概述
本章,您将学习 LVM 的相关命令以及创建 LVM。
相关命令
如下表所示:
功能项 | PV | VG | LV |
---|---|---|---|
扫描 | pvscan |
vgscan |
lvscan |
创建 | pvcreate |
vgcreate |
lvcreate |
显示 | pvdisplay |
vgdisplay |
lvdisplay |
移除 | pvremove |
vgremove |
lvremove |
扩展 | vgextend |
lvextend |
|
缩减 | vgreduce |
lvreduce |
|
查阅信息 | pvs |
vgs |
lvs |
上一篇我们提到「PV 的最小存储单位为 PE」,换言之,LV 能够实现动态扩容或动态缩容,其实就是增加或者减少组成该 LV 中 PE 的数量。
上述命令都是由 lvm2 软件包释放出来,若您的操作系统中没有该软件包,请执行以下操作:
Shell > dnf -y install lvm2
创建 LVM 的步骤
创建 LVM 的步骤:
- 将物理磁盘或磁盘分区初始化为 PV
- 将一个或多个 PV 加入到相应的 VG 中
- 在 VG 中创建一个或多个 LV
- 对这些 LV 执行格式化与挂载操作
创建 LVM
准备工作
因为服务器通常都支持「热插拔」技术,所以管理员可在开机的操作系统上直接插入新硬盘。
注:仅 SCSI 和 SATA 接口标准的磁盘支持「热插拔」,消费级 m.2 NVME 协议的固态硬盘通常不支持「热插拔」,企业级 U.2/U.3 NVME 协议的固态硬盘支持「热插拔」
# 假设您在 Vmware Workstation 中添加了两块 硬盘,每块硬盘 10GB
## 操作系统中的 udev 识别这两块硬盘分别为 sdb 和 sdc
# 使用 parted 进行分区操作:
Shell > lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 47G 0 part /
└─sda3 8:3 0 2G 0 part [SWAP]
sdb 8:16 0 10G 0 disk
sdc 8:32 0 10G 0 disk
sr0 11:0 1 13.2G 0 rom
Shell > parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.7GB 10.7GB primary
(parted) quit
Information: You may need to update /etc/fstab.
Shell > parted /dev/sdc
GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdc: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.7GB 10.7GB primary
(parted) quit
Information: You may need to update /etc/fstab.
Shell > lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 47G 0 part /
└─sda3 8:3 0 2G 0 part [SWAP]
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 10G 0 part
sdc 8:32 0 10G 0 disk
└─sdc1 8:33 0 10G 0 part
sr0 11:0 1 13.2G 0 rom
初始化为 PV
Shell > pvcreate /dev/sd{b,c}1
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
查阅相关信息:
Shell > pvscan
PV /dev/sdb1 lvm2 [<10.00 GiB]
PV /dev/sdc1 lvm2 [<10.00 GiB]
Total: 2 [<20.00 GiB] / in use: 0 [0 ] / in no VG: 2 [<20.00 GiB]
# VG 列为空
Shell > pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- <10.00g <10.00g
/dev/sdc1 lvm2 --- <10.00g <10.00g
# VG Name 行空值
Shell > pvdisplay /dev/sdb1 /dev/sdc1
"/dev/sdb1" is a new physical volume of "<10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID VDv64B-L8sD-iO3F-lnPK-FkNp-XN9D-1V1RW0
"/dev/sdc1" is a new physical volume of "<10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size <10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID FC85SS-Biip-VBji-YJpv-La87-0ecW-JppGQ0
通过查阅信息可知,我们这里的 PV 并没有加入到 VG 中。
创建 VG
需要将一个或多个 PV 加入到 VG 中,创建 VG 的命令语法为:
vgcreate <VG-name> <PV> ...
比如,我需要创建一个 vg01 且让 /dev/sdb1 和 /dev/sdc1 加入其中:
Shell > vgcreate vg01 /dev/sd{b,c}1
Volume group "vg01" successfully created
再次查阅相关信息:
# 如您所见,默认 PE 为 4MiB
Shell > vgdisplay vg01
--- Volume group ---
VG Name vg01
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 19.99 GiB
PE Size 4.00 MiB
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
VG UUID jFqzMt-lCMo-eLC1-0oJa-uqzf-M66U-KpuXMA
# VG 列有了值
Shell > pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- <10.00g <10.00g
/dev/sdc1 vg01 lvm2 a-- <10.00g <10.00g
Shell > vgscan
Found volume group "vg01" using metadata type lvm2
创建 LV
创建 LV 需要使用 lvcreate
命令,其基本语法为:
lvcreate -n <name> -L <size> <VG-name>
相关选项:
-n <name>
– 指定逻辑卷名称-L <size>
– 指定 LV 的大小,支持 M、G 等单位后缀,请注意这里的单位后缀都是 1024 进制,如 1G=1GiB-l <PE-number>
– 从 PE 数量的角度指定 LV 大小<VG-name>
– 指定从哪个 VG 中划分 LV
从 vgdisplay vg01
命令的输出可以看到,我们可以操作的容量大小为 19.99GiB,对应可操作的 PE 数量为 5118。
假设我需要从 vg01 中划分出两个 lv,第一个 lv 为 1GiB,剩余的容量划分给第二个 lv:
Shell > lvcreate -n lv01 -L 1G vg01
Logical volume "lv01" created.
Shell > vgdisplay vg01
--- Volume group ---
VG Name vg01
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 19.99 GiB
PE Size 4.00 MiB
Total PE 5118
Alloc PE / Size 256 / 1.00 GiB
Free PE / Size 4862 / 18.99 GiB
VG UUID jFqzMt-lCMo-eLC1-0oJa-uqzf-M66U-KpuXMA
Shell > lvcreate -n lv02 -l 4862 vg01
Logical volume "lv02" created.
Shell > pvscan
PV /dev/sdb1 VG vg01 lvm2 [<10.00 GiB / 0 free]
PV /dev/sdc1 VG vg01 lvm2 [<10.00 GiB / 0 free]
Total: 2 [19.99 GiB] / in use: 2 [19.99 GiB] / in no VG: 0 [0 ]
Shell > vgscan
Found volume group "vg01" using metadata type lvm2
Shell > lvscan
ACTIVE '/dev/vg01/lv01' [1.00 GiB] inherit
ACTIVE '/dev/vg01/lv02' [18.99 GiB] inherit
Q: 创建完 LV 后,设备的命名是什么样的?
其遵循这样的命名规范:
/dev/<VG-name>/<LV-name>
# 或者
/dev/dm-0
/dev/dm-1
...
# 或者
/dev/mapper/<VG-name>-<LV-name>
# 如您所见,/dev/vg01/lv01 是 /dev/dm-0 的软链接(符号链接)
Shell > ls -l /dev/vg01/lv0?
lrwxrwxrwx 1 root root 7 Jun 17 23:22 /dev/vg01/lv01 -> ../dm-0
lrwxrwxrwx 1 root root 7 Jun 17 23:23 /dev/vg01/lv02 -> ../dm-1
使用 LVM
写入文件系统并执行挂载操作:
# 格式化
Shell > mkfs -t ext4 /dev/vg01/lv01
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: 8eb731eb-1bda-4863-9430-b3cb46ea2507
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
# 格式化
Shell > mkfs -t ext4 /dev/vg01/lv02
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 4978688 4k blocks and 1245184 inodes
Filesystem UUID: c8958bf4-001e-4bc0-8116-fab989475d81
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
# 临时挂载
Shell > mkdir -p /lv{01,02}
Shell > mount -t ext4 /dev/vg01/lv01 /lv01/
Shell > mount -t ext4 /dev/vg01/lv02 /lv02/
Shell > df -hT
Filesystem Type Size Used Avail Use% Mounted on
...
/dev/mapper/vg01-lv01 ext4 974M 24K 907M 1% /lv01
/dev/mapper/vg01-lv02 ext4 19G 24K 18G 1% /lv02
若您需要让挂载永久生效,可写入到 /etc/fstab 文件中,比如:
/dev/mapper/vg01-lv01 /lv01 ext4 defaults 0 5
/dev/mapper/vg01-lv02 /lv02 ext4 defaults 0 6
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)

用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论