• lvm磁盘管理


    1 原理

    你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
    算是一个介于分区之上,文件系统之下的中间层。
    好处就是可以管理灵活,在线扩容。坏处就是退出的时候别暴力插拔,先退出lvm管理。

    最下层的物理分区:fdisk -l
    物理卷(physical volumes):pvdisplay 与物理分区一一对应,创建pv相当于设置为lvm分区格式,才能提取出来创建成vg
    卷组(volumes groups):vgdisplay 可以由不同的pv合并而成,组成一个大的vg
    逻辑卷(logical volumes):lvdisplay 在vg中划分出来,相当于逻辑分区,lv就可以直接挂在目录使用了。

    2 新增一块硬盘怎么添加到lvm管理呢?

    2.1 查看现在环境:

    #vgdisplay 可以看到有一个vg(centos)

     VG Name               centos
     ...
     VG Size               59.41 GiB
    
    • 1
    • 2
    • 3

    #pvdisplay 这个vg是sda2分区做成pv划进来的

     PV Name               /dev/sda2
     VG Name               centos
     PV Size               59.41 GiB
    
    • 1
    • 2
    • 3

    #lvdisplay 用vg划了 两个lv(root和swap)

    --- Logical volume ---
     LV Path                /dev/centos/root
     LV Name                root
     VG Name                centos
     ...
     LV Size                55.41 GiB
     ...
      
     --- Logical volume ---
     LV Path                /dev/centos/swap
     LV Name                swap
     VG Name                centos
     ...
     LV Size                4.00 GiB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.2 开始将sda3纳入lvm管理

    只有60G的一块sda盘,有sda1和sda2两个分区,现在
    #fdisk /dev/sda
    新增了/dev/sda3,大小100G

    #新增将sda3做成pv

    pvcreate /dev/sda3
    pvdisplay
    
    • 1
    • 2

    #若加到新的vg(vg名字datavg、pv名字/dev/sda3为例)

    vgcreate  datavg  /dev/sda3 
    vgdisplay
    
    • 1
    • 2

    #若加到现有vg(vg名字centos、pv名字/dev/sda3为例)

    vgextend centos /dev/sda3
    vgdisplay
    
    • 1
    • 2
    [root@docker-test ~]# df -hT
    Filesystem                                Type      Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root          xfs        56G   48G  7.6G  87% /
    devtmpfs                               devtmpfs  1.9G     0  1.9G   0% /dev
    tmpfs                                       tmpfs     1.9G     0  1.9G   0% /dev/shm
    tmpfs                                       tmpfs     1.9G   13M  1.9G   1% /run
    tmpfs                                       tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/sda1                                   xfs       597M  177M  421M  30% /boot
    tmpfs                                       tmpfs     378M   12K  378M   1% /run/user/42
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.3 假设我不想使用旧的逻辑卷,而是新建lv(名字为data1),大小为5G,挂载到/data1

    lvcreate -L 5G -n data1 centos   #我这里还用的旧的vg centos
    lvdisplay 
    
    • 1
    • 2

    centos7 的文件系统格式默认为xfs,centos6为ext4,通过逻辑卷的LV Path指定逻辑卷

    mkfs.xfs /dev/centos/data1
    mkdir /data1
    mount /dev/centos/data1 /data1
    
    • 1
    • 2
    • 3

    #挂载完成后,通过df -lT 就能看到相应的文件系统
    然后将挂载信息写入到/etc/fstab中,使其开机挂载

    echo "/dev/centos/data1  /data1  xfs  defaults  0  0" >> /etc/fstab
    
    • 1

    2.4 假设我就想挂载到/,使用旧的vg 旧的lv,也就是调整分区大小

    特别注意的是:
    resize2fs命令 针对的是ext2、ext3、ext4文件系统
    xfs_growfs命令 针对的是xfs文件系统

    df -lT 查看下文件系统类型(通过df -hT查出的文件系统路径跟逻辑分区路径不同,不过还是能区分的)
    vgdisplay 查看下vg剩余空间

     VG Name               centos
     ...
     Free  PE / Size       24319 / <95.00 GiB
    
    • 1
    • 2
    • 3

    1)ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)–未测试版本

    #调整逻辑分区大小
    增大至20G

    $ lvextend -L 20G /dev/mapper/centos-test--lv
    
    • 1

    增加5G

    $ lvextend -L +5G /dev/mapper/centos-test--lv
    
    • 1

    减小至10G

    lvreduce -L 10G /dev/mapper/centos-test--lv
    
    • 1

    #减小3G

    $ lvreduce -L -3G /dev/mapper/centos-test--lv
    
    • 1

    #执行调整

    $ resize2fs /dev/mapper/centos-test--lv
    
    • 1

    2)xfs文件系统的调整命令是xfs_growfs(只支持增大)

    调整逻辑分区大小(事实证明用df -lT和LV Path两个路径都可以实现)
    #增大至70G(用LV Path)

    $ lvextend -L 70G /dev/centos/root
    
    • 1

    增加5G(用df -lT)

    $ lvextend -L +80G /dev/mapper/centos-root
    
    • 1

    #执行调整

    $ xfs_growfs /dev/centos/root
    df -lT
    
    • 1
    • 2

    此种方法进行的扩缩容,是不会影响到原有数据的,非常的方便好用。

    ps:xfs格式不是不支持缩容,而是xfs格式缩容后需要重新格式化才能继续挂载使用,且缩容前需要先卸载挂载,然后在缩容,然后格式化,然后再挂载。这会导致原本的数据丢失,如果实在要缩容,可以提前将数据转移备份好,缩容后再将数据迁移回来。
    卸载挂载

    $ umount /dev/mapper/centos-test--lv
    
    • 1

    #缩容

    $ lvreduce -L -5G /dev/mapper/centos-test--lv
    
    • 1

    重新格式化,添加-f参数,强制重写。

    $ mkfs.xfs /dev/mapper/centos-test--lv -f
    
    • 1

    重新挂载

    #mount /dev/mapper/centos-test--lv /data
    
    • 1

    3 退出磁盘管理(未测试版)

    在日常使用中,磁盘老旧,故障,需要更换等问题也经常有,此时需要安全退出。

    首先,磁盘中的数据,如何需要转移到新的磁盘中,那么首先,先插入新的磁盘,然后创建pv,将pv加入到相同的vg,然后移动逻辑分区和数据到新的磁盘,然后将就旧的磁盘的pv移除出vg,删除pv,就可以移除此磁盘了。
    #查看系统磁盘挂载情况

    $ lsblk
    NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda                   8:0    0   20G  0 disk 
    ├─sda1                8:1    0  300M  0 part /boot
    ├─sda2                8:2    0    2G  0 part [SWAP]
    └─sda3                8:3    0 17.7G  0 part /
    sdb                   8:16   0   20G  0 disk 
    └─sdb1                8:17   0   20G  0 part 
    └─centos-test--lv 253:0    0    7G  0 lvm  
    sdc                   8:32   0   20G  0 disk 
    sr0                  11:0    1 1024M  0 rom 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如上可以看到在sdb磁盘中有一个sdb1的分区,下面有一个lvm的逻辑分区。
    #若要安全的退出磁盘,就需要将此磁盘中的所有数据迁移到新的磁盘中,当然如果你不要数据了,那可以不迁移,直接删除逻辑分区,从卷组中删除物理卷即可。
    sdc磁盘为刚添加的新磁盘,我们要做的就是将sdb的数据导入到sdc中,然后退出sdb磁盘

    #首先,创建sdc磁盘的物理分区和物理卷
    #操作过程不赘述了,查看最开头第一步新增创建分区的内容。
    #创建完成后,查看物理卷

    $ pvs
    PV               VG     Fmt  Attr PSize  PFree 
    /dev/sdb1  centos lvm2 a--  20.00g 13.00g
    /dev/sdc1             lvm2  ---  20.00g 20.00g
    
    • 1
    • 2
    • 3
    • 4

    #可以看到新的物理卷还没有加入卷组,空间为全剩余
    #将新磁盘的物理卷加入到相同的卷组

    $ vgextend centos /dev/sdc1
    
    • 1

    再查看物理卷,如下

    $ pvs
    PV         VG     Fmt  Attr PSize  PFree 
    /dev/sdb1  centos lvm2 a--  20.00g 13.00g
    /dev/sdc1  centos lvm2 a--  20.00g 20.00g
    
    • 1
    • 2
    • 3
    • 4

    下面将/dev/sdb1中的数据移动到卷组中的/dev/sdc1上

    $ pvmove /dev/sdb1 /dev/sdc1
    
    • 1

    #等待一段时间即可,如果数据量过大,可以用下面命令,放到后台执行。

    $ pvmove /dev/sdb1 /dev/sdc1 2>error.log >normal.log &
    
    • 1

    完成后,查看物理卷信息,会发现sdb1上的数据都迁移到了sdc1上。

    $ pvs
    PV         VG     Fmt  Attr PSize  PFree 
    /dev/sdb1  centos lvm2 a--  20.00g 20.00g
    /dev/sdc1  centos lvm2 a--  20.00g 13.00g
    
    • 1
    • 2
    • 3
    • 4

    然后将/dev/sdb1的物理卷从卷组中删除

    $ vgreduce centos /dev/sdb1
    
    • 1

    删除后,再看pvs,会发现此物理卷已经没有所属卷组了

    $ pvs
    PV         VG     Fmt  Attr PSize  PFree 
    /dev/sdb1         lvm2 ---  20.00g 20.00g
    /dev/sdc1  centos lvm2 a--  20.00g 13.00g
    
    • 1
    • 2
    • 3
    • 4

    然后删除物理卷

    $ pvremove /dev/sdb1
    
    • 1
  • 相关阅读:
    Linux基础——定时任务
    用于视觉识别的深度卷积网络中的空间金字塔池化
    多线程笔记第一天(进程的理解、线程的理解与创建、Thread类、线程状态)
    QT 气泡消息绘制
    华为云时习知&成都大学附属医院,打造“互联网+医疗”标杆
    怎么把图片转文字?掌握这个技巧,帮你解放双手
    [附源码]计算机毕业设计springboot学分制环境下本科生学业预警帮扶系统
    初识Matter协议
    640. 求解方程
    JSD-2204-WebServer(项目终章)-Day18
  • 原文地址:https://blog.csdn.net/weixin_44167712/article/details/124903594