查看命令:lvs   lsblk

lvm 逻辑卷管理
磁盘空间的动态划分和管理

lvm能够实现分区的动态的拉伸和回缩

lvm的创建过程其实是一个先整合,再划分的过程。

LVM创建

一、LVM的创建过程
1)添加硬盘或者创建分区,通知内核
2)创建物理卷 PV (pvcreate)
3)创建卷组 VG (vgcreate)
4)创建逻辑卷 LV (lvcreate)
5)创建文件系统 (mkfs.xfs)
6)挂载使用 (mount /etc/fstab /etc/rc.d/rc.local)

1)创建分区
# parted /dev/sdd mklabel gpt
# parted /dev/sdd mkpart primary 1 1G
# parted /dev/sdd mkpart primary 1G 2G
# parted /dev/sdd mkpart primary 2G 3G
# parted /dev/sdd mkpart primary 3G 4G
# ll /dev/sdd
sdd sdd1 sdd2 sdd3 sdd4

2)创建物理卷
# pvcreate /dev/sdd{1..4}
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.
Physical volume "/dev/sdd3" successfully created.
Physical volume "/dev/sdd4" successfully created.

2.1)查看物理卷

# pvs
      PV         VG Fmt  Attr PSize   PFree  
      /dev/sda2  cl lvm2 a--   19.00g      0 
      /dev/sdd1     lvm2 ---  953.00m 953.00m
      /dev/sdd2     lvm2 ---  953.00m 953.00m
      /dev/sdd3     lvm2 ---  954.00m 954.00m
      /dev/sdd4     lvm2 ---  954.00m 954.00m

    # pvscan
      PV /dev/sda2   VG cl              lvm2 [19.00 GiB / 0    free]
      PV /dev/sdd3                      lvm2 [954.00 MiB]
      PV /dev/sdd2                      lvm2 [953.00 MiB]
      PV /dev/sdd4                      lvm2 [954.00 MiB]
      PV /dev/sdd1                      lvm2 [953.00 MiB]
      Total: 5 [22.72 GiB] / in use: 1 [19.00 GiB] / in no VG: 4 [3.72 GiB]

    # pvdisplay  
      "/dev/sdd3" is a new physical volume of "954.00 MiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdd3
      VG Name               
      PV Size               954.00 MiB
      Allocatable           NO
      PE Size               0   
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               kRYrRB-0BZm-Z2h1-tQxu-kDUC-FvQF-4YSZ5L
      ...



3)创建卷组
语法:vgcreate [-s 大小] 卷组的名字 物理卷的设备路径

# vgcreate [-s 8M] vg0 /dev/sdd{1..4}
    Volume group "vg0" successfully created

-s 指定PE大小
        PE(物理扩展单元) 大小(默认是4M)

    3.1)
# vgs
          VG  #PV #LV #SN Attr   VSize  VFree
          cl    1   2   0 wz--n- 19.00g    0 
          vg0   4   0   0 wz--n-  3.72g 3.72g

        # vgscan
          Reading volume groups from cache.
          Found volume group "vg0" using metadata type lvm2
          Found volume group "cl" using metadata type lvm2

        # vgdisplay 
      --- Volume group ---
      VG Name               vg0
      System ID             
      Format                lvm2
      Metadata Areas        4
      Metadata Sequence No  1
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                0
      Open LV               0
      Max PV                0
      Cur PV                4
      Act PV                4
      VG Size               3.72 GiB
      PE Size               8.00 MiB
      Total PE              476
      Alloc PE / Size       0 / 0   
      Free  PE / Size       476 / 3.72 GiB
      VG UUID               PWOx9H-9eP0-vkdz-v31T-cHxO-C80x-4BAMfE



4)创建逻辑卷

# lvcreate -n lv0 -L 1500M vg0
      Rounding up size to full physical extent 1.47 GiB
      Logical volume "lv0" created.

        -n 指定lv的名字
        -L 指定lv的大小
        vg0  取vg0卷组的空间做lv

    # lvcreate -n lv0 -l 188 vg0  
        -l 指定使用了多少个PE
            LE 逻辑扩展单元

    4.1)  
        #lvs
        #lvscan
        #lvdisplay



5)创建文件系统

# mkfs.xfs /dev/vg0/lv0


6)挂载

# mkdir /lv0
    # mount /dev/vg0/lv0 /lv0/
    # vim /etc/fstab 
    /dev/vg0/lv0 /lv0 xfs defaults 0 0


7)测试

# cd /lv0
    # cat > lvm-test.txt << EOF
    > ---------------
    > Hello JIM
    > hi jim
    > hello world
    > ---------------
    > EOF

 

LVM动态扩容

xfs和ext4文件系统

扩容的区别 扩容文件系统的命令不一样 xfs 使用的命令是xfs_growfs ext4 使用的命令是resize2fs

XFS在线扩容

第1种情况:卷组内有空闲空间,直接从卷组取空间
1)对逻辑卷扩容
# lvextend -L +500M /dev/vg0/lv0 +表示在原来的空间
大小上加上多少空间大小
Rounding size to boundary between physical extents: 504.00 MiB.
Size of logical volume vg0/lv0 changed from 1.47 GiB (188 extents) to 1.96 GiB (251 extents).
Logical volume vg0/lv0 successfully resized.

2)对文件系统扩容

# xfs_growfs /dev/vg0/lv0


第2种情况:卷组内没有空间
1)创建新分区

# parted /dev/sdd mkpart primary  4G 5G    
            # ll /dev/sdd
            sdd   sdd1  sdd2  sdd3  sdd4  sdd5


2)创建物理卷

# pvcreate /dev/sdd5
            Physical volume "/dev/sdd5" successfully created.


3)加入卷组 vg扩容

# vgextend vg0 /dev/sdd5
            Volume group "vg0" successfully extended


4)对逻辑卷扩容

# lvextend -L 4500M /dev/vg0/lv0 
              Rounding size to boundary between physical extents: 4.40 GiB.
              Size of logical volume vg0/lv0 changed from 1.96 GiB (251 extents) to 4.40 GiB (563 extents).
              Logical volume vg0/lv0 successfully resized.

5)对文件系统扩容

# xfs_growfs /dev/vg0/lv0

 

ext4扩容

  创建lv0逻辑卷

# lvcreate -n lv0 -L 2G vg0


制作文件系统ext4

# mkfs.ext4  /dev/vg0/lv0

挂载

# mount /dev/vg0/lv0 /lv0


在逻辑卷中添加数据

# cd /lv0
# echo "ext4"  >test.txt
# cat test.txt 
ext4


扩容lv0

# lvextend -L +1G /dev/vg0/lv0 
  Size of logical volume vg0/lv0 changed from 2.00 GiB (256 extents) to 3.00 GiB (384 extents).
  Logical volume vg0/lv0 successfully resized.

文件系统扩容

# resize2fs /dev/vg0/lv0

 

缩容

XFS不支持缩容

ext4支持缩容

 

 

ext4缩容

注意:
1.风险大有可能造成数据的损坏
2.确保缩减后的空间大小依然能存储原来的所有数据
3.不要在线缩容
4.在缩减之前强制检查文件系统

现在要在创建一个逻辑卷lv1,lv1的大小要求为1G,卷组内没有空间,但逻辑卷lv0的空间过大,缩减lv0,给lv1

给lv0缩减
1)先卸载

# umount /lv0

2)强制检查文件系统

# e2fsck -f /dev/vg0/lv0


3)缩减文件系统

# resize2fs /dev/vg0/lv0  1800M


4)缩减逻辑卷

# lvreduce -L 1800M /dev/vg0/lv0


5)测试缩减逻辑卷后逻辑卷能否正常使用

# mount /dev/vg0/lv0 /lv0
                # cd /lv0
                # cat 
                lost+found/  test.txt    
                # cat test.txt 
                ext4                # df -h
                文件系统             容量  已用  可用 已用% 挂载点
                /dev/mapper/cl-root   17G  4.3G   13G   26% /
                devtmpfs             473M     0  473M    0% /dev
                tmpfs                489M   84K  489M    1% /dev/shm
                tmpfs                489M  7.1M  482M    2% /run
                tmpfs                489M     0  489M    0% /sys/fs/cgroup
                /dev/sda1           1014M  155M  860M   16% /boot
                tmpfs                 98M   16K   98M    1% /run/user/42
                tmpfs                 98M     0   98M    0% /run/user/0
                /dev/mapper/vg0-lv0  1.7G  6.1M  1.6G    1% /lv0

创建快照

快照的工作原理:
保存数据某一刻的状态。快照刚建立的时候,大小是空的,快照是访问源数据的另一条路径。快照是在数据改变之前将数据原封不动的保存在快照空间里面。注意变化数据的源数据不能超过快照空间的大小,否则,快照将崩溃。

写时复制:快照做完以后,源文件要修改前,会复制一份到快照,以便恢复到最原始的时候

实验:
1.挂载lv0逻辑卷,在逻辑卷内写入数据

# mount /dev/vg0/lv0 /lv0
        # cd /lv0
        # ls
        # cp /etc/passwd /etc/shadow .
        # echo "hello" > lvmsnap-test.txt
        # cat lvmsnap-test.txt
        hello
        # ll
        总用量 12
        -rw-r--r--. 1 root root    6 7月   7 22:34 lvmsnap-test.txt
        -rw-r--r--. 1 root root 2229 7月   7 22:34 passwd
        ----------. 1 root root 1248 7月   7 22:34 shadow


2.给/dev/vg0/lv0逻辑卷做快照

# lvcreate -s /dev/vg0/lv0  -L 800M -n lv0.snap 
          Using default stripesize 64.00 KiB.
          Logical volume "lv0.snap" created.


3.改变lv0逻辑卷的数据

# cp /etc/group .
        # rm passwd 
        rm:是否删除普通文件 "passwd"?y
        # ls
        group  lvmsnap-test.txt  shadow
        # echo "world" >> lvmsnap-test.txt 
        # cat lvmsnap-test.txt
        hello
        world

4.恢复数据 会删除快照卷 恢复之前要卸载

# umount /dev/vg0/lv0

        # lvconvert --merge /dev/vg0/lv0.snap 
        Merging of volume vg0/lv0.snap started.
        lv0: Merged: 100.00%

5.挂载lv0逻辑卷查看数据是否恢复到拍快照的那一刻的状态

# mount /dev/vg0/lv0 /lv0
        # cd /lv0
        # ls
        lvmsnap-test.txt  passwd  shadow
        # cat lvmsnap-test.txt 
        hello