以下内容主要来自于系统运维|Lnux LVM简明教程。
简介
逻辑卷管理LVM是用来管理磁盘的一个工具。传统分区使用固定大小分区,重新调整大小十分麻烦,而LVM就是解决这个问题的。
LVM使用分层结构,如下图所示。
这其中就涉及到我们后面需要操作的三个核心组件,物理卷,卷组,逻辑卷。
首先,实际的物理磁盘及其划分的分区被成为物理卷(PV),一个或多个物理卷可以用来创建卷组(VG)。基于卷组可以创建逻辑卷(LV)。在一个卷组中可以创建多个逻辑卷。文件系统就是在逻辑卷上创建的,然后可以在操作系统挂载和访问。
LVM的基本操作
准备磁盘分区
通过使用fdisk,创建磁盘分区。我们需要创建3个1G分区,注意,并不要求分区的大小一致。同样,分区需要使用‘8e’类型来使他们可用于LVM。
重复上面的操作来创建其他两个分区。分区创建完成后,我们应该有类似如下的输出:
其中/dev/sdb1, /dev/sdb2等就是我们所说的磁盘分区。
准备物理卷(PV)
通过pvcreate
可以在磁盘分区上创建物理卷。
pvcreate /dev/sdb1
pvcreate /dev/sdb2
pvcreate /dev/sdb3
使用pvdisplay
命令可以检查查看当前机器上的物理卷情况。
在我自己的主机上的显示情况如下。
使用pvremove
可以删除物理卷
pvremove /dev/sdb1
准备卷组(VG)
使用vgcreate
进行卷组的创建。
下列命令用来创建名为’volume-group1’的卷组,使用/dev/sdb1, /dev/sdb2 和 /dev/sdb3创建。
vgcreate volume-group1 /dev/sdb1 /dev/sdb2 /dev/sdb3
使用vgdisplay
来查看主机上的卷组
在我自己的主机上如下所示。
从众我们可以看到卷组的使用量/总量。物理卷给卷组提供空间,只要这个卷组中还有可用空间,我们就可以随意创建逻辑卷。
vgs命令也可以查看卷组的信息,但是比较简略。
使用vgremove删除卷组。
vgremove volume-group1
创建逻辑卷(LV)
使用lvcreate
进行裸机卷的创建。下面是创建一个名为1v1
大小为100MB的逻辑卷。
lvcreate -L 100M -n 1v1 volume-group1
逻辑卷可以使用lvdisplay
命令查看。
我自己的机器上显示效果如下。
我们可以格式化和挂载逻辑卷。
# mkfs.ext4 /dev/volume-group1/lv1
# mkdir /lvm-mount
# mount /dev/volume-group1/lv1 /lvm-mount/
使用lvremove可以删除逻辑卷。
# umount /lvm-mount/
# lvremove /dev/volume-group1/lv1
拓展一个LVM卷
逻辑卷的大小是可以调整的。在调整逻辑卷大小之后,也要对文件系统调整大小进行匹配。这个额外的步骤各不相同,取决于创建文件系统的类型。
首先需要卸载掉1v1卷。
umount /lvm-mount/
然后设置卷的大小为200M
lvresize -L 200M /dev/volume-group1/1v1
也可以用lvextend命令来进行了扩容
lvextend -l +100%FREE /dev/VolGroup00/lv_root
将当前卷组中所有的空闲空间都拓展到lv_root这个逻辑卷中。
接下来检查磁盘错误
e2fsck -f /dev/volume-group1/1v1
运行一下命令拓展文件系统
resize2fs /dev/volume-group1/1v1
然后检查一下lv的状态来验证。
缩减一个LVM卷
和上面差不多的步骤。需要注意的是减少后逻辑卷的大小值如果小于存储数据的大小,存储在后面的数据会丢失。
umount /dev/volume-group1/lv1 # 卸载掉卷。
e2fsck -f /dev/volume-group1/lv1 # 检测磁盘错误。
resize2fs /dev/volume-group1/lv1 100M # 缩小文件系统,更新ext4信息。
lvresize -L 100M /dev/volume-group1/lv1 #减少逻辑卷大小
最后验证调整后的逻辑卷大小。
拓展一个卷组
将一个物理卷添加到卷组。主要用于将一个新挂载的磁盘加入到LVM中。
检查现在的卷组状态。
创建一个2GB分区sdc1,类型为LVM(8e)
再创建物理卷并拓展卷组。
pvcreate /dev/sdc1
vgextend volume-group1 /dev/sdc1
使用vgdisplay来验证。
只要是8e类型的磁盘分区都可以用来拓展卷组。
lvm用法实践
centos中将home分区合并到/分区
备份home分区的文件并卸载home分区
tar cvf /tmp/home.tar /home umount /home
取消home分区的开机挂载,把
/etc/fstab
里面的/dev/mapper/centos-home
这一行注释掉。删除与home分区有关的进程
fuser -m -v -i -k /home
删除/home所在的lv
lvremove /dev/mapper/centos-home
拓展/root所在的lv,将剩下全部可用大小都分配给root
lvextend -l +100%FREE /dev/mapper/centos-root # 下面的命令应该用哪一个? xfs_growfs /dev/mapper/centos-root resize2fs /dev/mapper/centos-root
- 把原来备份的home目录中的东西放到/home文件夹中。
为ubuntu的lvm分区添加一块新的硬盘
格式化新的硬盘
/dev/sda
。分区需要使用‘8e’类型来使他们可用于LVM。sudo fdisk /dev/sda Welcome to fdisk (util-linux 2.34). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x10f72008. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-1953525167, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1953525167, default 1953525167): Created a new partition 1 of type 'Linux' and of size 931.5 GiB. Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM'. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
在分区上创建逻辑卷。
sudo pvcreate /dev/sda1 Physical volume "/dev/sda1" successfully created.
将物理卷添加到逻辑卷中。先查看卷名称再扩容。
# rui @ rdma221 in ~ [8:16:37] $ sudo vgdisplay --- Volume group --- VG Name ubuntu-vg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size <891.70 GiB PE Size 4.00 MiB Total PE 228275 Alloc PE / Size 228275 / <891.70 GiB Free PE / Size 0 / 0 VG UUID 2oBXft-mP9w-vgg3-AF1e-ouqS-nVGP-WR0Jdf # rui @ rdma221 in ~ [8:17:03] $ sudo vgextend ubuntu-vg /dev/sda1 Volume group "ubuntu-vg" successfully extended
扩容逻辑卷。先查看逻辑卷名称再扩容。
# rui @ rdma221 in ~ [8:21:24] C:130 $ sudo lvdisplay --- Logical volume --- LV Path /dev/ubuntu-vg/ubuntu-lv LV Name ubuntu-lv VG Name ubuntu-vg LV UUID ATijFo-gKff-sAf8-r2Xa-md8C-WqJE-ihhiqJ LV Write Access read/write LV Creation host, time ubuntu-server, 2022-11-22 13:56:21 +0000 LV Status available # open 1 LV Size <891.70 GiB Current LE 228275 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
rui @ rdma221 in ~ [8:21:27]
$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from <891.70 GiB (228275 extents) to 1.78 TiB (466741 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
5. 扩容文件系统。
```bash
# rui @ rdma221 in ~ [8:22:06]
$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 112, new_desc_blocks = 228
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 477942784 (4k) blocks long.
扩容完成。
# rui @ rdma221 in ~ [8:23:12] $ df -h Filesystem Size Used Avail Use% Mounted on udev 126G 0 126G 0% /dev tmpfs 26G 2.8M 26G 1% /run /dev/mapper/ubuntu--vg-ubuntu--lv 1.8T 475G 1.3T 28% / tmpfs 126G 0 126G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 126G 0 126G 0% /sys/fs/cgroup /dev/nvme0n1p2 1.5G 210M 1.2G 16% /boot /dev/nvme0n1p1 1.1G 6.1M 1.1G 1% /boot/efi /dev/loop0 64M 64M 0 100% /snap/core20/1852 /dev/loop1 92M 92M 0 100% /snap/lxd/23991 /dev/loop2 54M 54M 0 100% /snap/snapd/18933 /dev/loop3 50M 50M 0 100% /snap/snapd/18596 /dev/loop4 64M 64M 0 100% /snap/core20/1879 /dev/loop5 92M 92M 0 100% /snap/lxd/24061 tmpfs 26G 0 26G 0% /run/user/6666 # rui @ rdma221 in ~ [8:23:15] $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 63.3M 1 loop /snap/core20/1852 loop1 7:1 0 91.8M 1 loop /snap/lxd/23991 loop2 7:2 0 53.2M 1 loop /snap/snapd/18933 loop3 7:3 0 49.9M 1 loop /snap/snapd/18596 loop4 7:4 0 63.3M 1 loop /snap/core20/1879 loop5 7:5 0 91.9M 1 loop /snap/lxd/24061 sda 8:0 0 931.5G 0 disk └─sda1 8:1 0 931.5G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 1.8T 0 lvm / nvme0n1 259:0 0 894.3G 0 disk ├─nvme0n1p1 259:1 0 1.1G 0 part /boot/efi ├─nvme0n1p2 259:2 0 1.5G 0 part /boot └─nvme0n1p3 259:3 0 891.7G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 1.8T 0 lvm / pmem0 259:4 0 496.1G 0 disk