Linux磁盘管理-LVM

  • 系统不直接操作物理卷,而是操作逻辑卷LV,逻辑卷从VG池中获取,VG池子由物理卷划分的PE组成,一个PE默认是4M。
  • 一个系统可以有多个LV和多个VG
  • 可以动态调整LV空间而无需卸载硬盘

假设虚拟机添加了两张硬盘,目的:给这两张硬盘添加一个LVM卷组

/linux%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86-lvm/Pasted%20image%2020240130134833.png

虚拟机重启后,通过lsblk可以看到新加入的物理盘

/linux%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86-lvm/Pasted%20image%2020240130135049.png

1
pvcreate /dev/sdc /dev/sdd
1
vgcreate myvg /dev/sdc /dev/sdd

查看myvg卷组信息vgdisplay或者vgs

  • 可以看到Free PE表示可以分配的内存有3G
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
root@ubuntu22lts:~# vgdisplay myvg
  --- Volume group ---
  VG Name               myvg
  System ID
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               2.99 GiB
  PE Size               4.00 MiB
  Total PE              766
  Alloc PE / Size       0 / 0
  Free  PE / Size       766 / 2.99 GiB
  VG UUID               HaTT0k-GIgX-x8vr-QVki-Krpg-Vcw9-tSV6W8
1
lvcreate -n mylv1 -L 512M myvg

查看逻辑卷信息lvdisplay或者lvs

  • LV创建路径在VG子路径下
  • 实际上还存在于/dev/mapper/myvg-mylv1
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
root@ubuntu22lts:~# lvdisplay /dev/myvg/mylv1
  --- Logical volume ---
  LV Path                /dev/myvg/mylv1
  LV Name                mylv1
  VG Name                myvg
  LV UUID                Fxrfkb-7E3z-ULcC-rjre-2M1m-Sdcy-k0XIqe
  LV Write Access        read/write
  LV Creation host, time ubuntu22lts, 2024-01-30 05:56:37 +0000
  LV Status              available
  # open                 1
  LV Size                512.00 MiB
  Current LE             128
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

注意必须要格式化,否则无法挂载

1
mkfs.ext4  /dev/myvg/mylv1
1
mount /dev/myvg/mylv1 /mnt

/linux%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86-lvm/Pasted%20image%2020240130141008.png

注意一定要按顺序删除

1
umount /dev/myvg/mylv1

注意,如果要删掉vg,则要删掉所有的lv,因为这里仅创建了mylv1,所以只需要删除它即可。

1
lvremove /dev/myvg/mylv1
1
vgremove myvg
1
pvremove /dev/sdc /dev/sdd

逻辑卷的拉伸和缩小操作都可以在已经挂载的硬盘上执行,无需卸载磁盘

  • 通过vgdisplay命令查看剩余空间
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
root@ubuntu22lts:~# vgdisplay myvg
  --- Volume group ---
  VG Name               myvg
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.99 GiB
  PE Size               4.00 MiB
  Total PE              766
  Alloc PE / Size       128 / 512.00 MiB
  Free  PE / Size       638 / 2.49 GiB
  VG UUID               2v2iHd-jcx3-UWU3-8KIk-wmHe-wEb3-GCpJrS
  • 或者vgs命令查看剩余空间
1
2
3
4
root@ubuntu22lts:~# vgs
  VG        #PV #LV #SN Attr   VSize   VFree
  myvg        2   1   0 wz--n-   2.99g  2.49g
  ubuntu-vg   1   1   0 wz--n- <38.00g 18.00g

Free PE表示还有多少PE可以分配,每块PE大小默认是4M,这里有638块,638*4 大约是2.5G。

看下要扩充哪块LV,输入lvdisplay或者lvs

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
root@ubuntu22lts:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/myvg/mylv1
  LV Name                mylv1
  VG Name                myvg
  LV UUID                idp0JM-STeC-T8L3-2d27-mlzY-Uqdr-dRIcrK
  LV Write Access        read/write
  LV Creation host, time ubuntu22lts, 2024-01-30 06:57:06 +0000
  LV Status              available
  # open                 0
  LV Size                512.00 MiB
  Current LE             128
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                wmFhA3-nMff-QYRL-J7Zi-kkVb-JTaC-YRG2dF
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2024-01-02 04:57:37 +0000
  LV Status              available
  # open                 1
  LV Size                <20.00 GiB
  Current LE             5119
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

假设要扩充/dev/myvg/mylv1 1G则输入命令

1
lvextend -L +1G /dev/myvg/mylv1
  • 如果扩充100%则输入命令lvextend -l +100%FREE /dev/myvg/mylv1

此时我们通过lvs查看的大小已经被扩展到了1.5G, 但是此时文件系统仍然是512M,这是因为操作了逻辑空间大小后,需要更新底层的文件系统才能扫描到更新后的逻辑卷

/linux%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86-lvm/Pasted%20image%2020240130151443.png

1
resize2fs /dev/myvg/mylv1

可以看到myvg-my/lv1已经被扩容到了1.5G

1
2
3
4
5
6
7
8
9
root@ubuntu22lts:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              388M  1.7M  387M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   19G  8.7G  9.0G  49% /
tmpfs                              1.9G     0  1.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G  251M  1.6G  14% /boot
tmpfs                              388M  4.0K  388M   1% /run/user/0
/dev/mapper/myvg-mylv1             1.5G   24K  1.4G   1% /mnt

逻辑卷LV是从卷组VG中获取的,那么VG不够了怎么办?实际上VG也是可以扩容的,前面提到过VG由PE组成,PE是从物理磁盘创建的物理卷PV上分配而来,如果VG不够了,则从PV上分配更多的PE即可。

  • 通过vgdisplay的Cur PV可以看到当前卷组挂了几个PV
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
root@ubuntu22lts:~# vgdisplay myvg
  --- Volume group ---
  VG Name               myvg
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.99 GiB
  PE Size               4.00 MiB
  Total PE              766
  Alloc PE / Size       384 / 1.50 GiB
  Free  PE / Size       382 / 1.49 GiB
  VG UUID               2v2iHd-jcx3-UWU3-8KIk-wmHe-wEb3-GCpJrS

显然,myvg挂了2个PV,通过pvs命令可以看到分别挂了哪些PV

1
2
3
4
5
root@ubuntu22lts:~#  pvs
  PV         VG        Fmt  Attr PSize    PFree 
  /dev/sda3  ubuntu-vg lvm2 a--   <38.00g 18.00g
  /dev/sdc   myvg      lvm2 a--  1020.00m     0 
  /dev/sdd   myvg      lvm2 a--    <2.00g  1.49g

此处可以看到myvg挂了/dev/sdc/dev/sdd,此时插入一块新的磁盘/dev/sde,注意虚拟机添加磁盘后要重启才能识别

/linux%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86-lvm/Pasted%20image%2020240130153247.png

重启后

/linux%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86-lvm/Pasted%20image%2020240130154107.png

下面是将/dev/sde加入到myvg的过程。

1
pvcreate /dev/sde
1
vgextend myvg /dev/sde

/linux%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86-lvm/Pasted%20image%2020240130154303.png

相关内容

Linux折腾科学上网过程
CentOS7设置静态IP