逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。
物理卷 PV 卷组 VG 逻辑卷 LV 基本单元 PE
(硬盘格式化成为PV,PV的单位为PE,每个PE默认大小为4MiB, 多个PV合成一个VG ,VG作为一个整体再划分为多个LV以供我们使用,即使用的是LV)
PV 相当于硬件,买的多大就多大,扩展不了
LV 一盘水饺
VG 全部面团团在一起
PE 所包水饺的大小
一、创建逻辑卷
第1步:让新添加的两块硬盘设备支持LVM技术。
选中所用的关机的虚拟机,鼠标右键选择设置 重启虚拟机 init 6 或者 鼠标重启
|
[root@localhost ~]# yum install -y lvm2
[root@localhost ~]# ls /dev/sd*
2 /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc
3 [root@localhost ~]# pvcreate /dev/sdb /dev/sdc
4 Physical volume "/dev/sdb" successfully created.
5 Physical volume "/dev/sdc" successfully created.
第2步:把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。
1 [root@localhost ~]# vgcreate storage /dev/sdb /dev/sdc
2 Volume group "storage" successfully created
3 [root@localhost ~]# vgdisplay
4 ‐‐‐ Volume group ‐‐‐
5 VG Name storage
6 System ID
7 Format lvm2
8 Metadata Areas 2
9 Metadata Sequence No 1
10 VG Access read/write
11 VG Status resizable
12 MAX LV 0
13 Cur LV 0
14 Open LV 0
15 Max PV 0
16 Cur PV 2
17 Act PV 2
18 VG Size 39.99 GiB
19 PE Size 4.00 MiB
20 Total PE 10238
21 Alloc PE / Size 0 / 0
22 Free PE / Size 10238 / 39.99 GiB
23 VG UUID YCh944‐XIga‐w4Uo‐ppVO‐m2CC‐XtdL‐Y1AgnY
24 ………………省略部分输出信息………………
第3步:切割出一个约为160MB的逻辑卷设备。
这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为
单位,所使用的参数为-L。例如,使用-L 160M生成一个大小为160MB的逻辑卷。另外一
种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例
如,使用-l 40可以生成一个大小为40×4MB=160MB的逻辑卷。
1 [root@localhost ~]# lvcreate ‐n lv ‐L 160M storage
2 Logical volume "lv" created.
3 # 另一种创建逻辑卷的方式为 lvcreate ‐n lv ‐l 40 storage
4 [root@localhost ~]# lvdisplay
5 ‐‐‐ Logical volume ‐‐‐
6 LV Path /dev/storage/lv
7 LV Name lv
8 VG Name storage
9 LV UUID jKe29V‐IAC5‐zren‐OsoK‐01cU‐nwPU‐xW5paJ
10 LV Write Access read/write
11 LV Creation host, time localhost.localdomain, 2019‐07‐23 19:20:45 +0800
12 LV Status available
13 # open 0
14 LV Size 160.00 MiB
15 Current LE 40
16 Segments 1
17 Allocation inherit
18 Read ahead sectors auto
19 ‐ currently set to 8192
20 Block device 253:2
21 ………………省略部分输出信息………………
第4步:把生成好的逻辑卷进行格式化,然后挂载使用。
Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上是做了一个符号链
接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/
卷组名称/逻辑卷名称)。
1 [root@localhost ~]# mkfs.ext4 /dev/storage/lv
2 mke2fs 1.42.9 (28‐Dec‐2013)
3 Filesystem label=
4 OS type: Linux
5 Block size=1024 (log=0)
6 Fragment size=1024 (log=0)
7 Stride=0 blocks, Stripe width=0 blocks
8 40960 inodes, 163840 blocks
9 8192 blocks (5.00%) reserved for the super user
10 First data block=1
11 Maximum filesystem blocks=33816576
12 20 block groups
13 8192 blocks per group, 8192 fragments per group
14 2048 inodes per group
15 Superblock backups stored on blocks:
16 8193, 24577, 40961, 57345, 73729
17
18 Allocating group tables: done
19 Writing inode tables: done
20 Creating journal (4096 blocks): done
21 Writing superblocks and filesystem accounting information: done
22 [root@localhost ~]# mkdir /lv
23 [root@localhost ~]# mount /dev/storage/lv /lv
第5步:查看挂载状态,并写入到配置文件,使其永久生效。
1 [root@localhost ~]# df ‐h
2 Filesystem Size Used Avail Use% Mounted on
3 /dev/mapper/rhel‐root 17G 5.6G 12G 33% /
4 devtmpfs 478M 0 478M 0% /dev
5 tmpfs 489M 0 489M 0% /dev/shm
6 tmpfs 489M 6.7M 482M 2% /run
7 tmpfs 489M 0 489M 0% /sys/fs/cgroup
8 /dev/sr0 3.6G 3.6G 0 100% /media/cdrom
9 /dev/sda1 1014M 139M 876M 14% /boot
10 tmpfs 98M 0 98M 0% /run/user/0
11 /dev/mapper/storage‐lv 151M 1.6M 139M 2% /lv
12 [root@localhost ~]# echo "/dev/storage/lv /lv ext4 defaults 0 0" >> /etc/fstab
二、扩容逻辑卷
用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组
成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前请一定要记得卸载设备
和挂载点的关联。
第1步:把lv扩容至300MB
1 [root@localhost ~]# umount /lv
2 [root@localhost ~]# lvextend ‐L 300M /dev/storage/lv
3 Size of logical volume storage/lv changed from 160.00 MiB (40 extents) to
300.00 MiB (75 extents).
4 Logical volume storage/lv successfully resized.
第2步:检查硬盘完整性,并重置硬盘容量。
1 [root@localhost ~]# e2fsck ‐f /dev/storage/lv
2 e2fsck 1.42.9 (28‐Dec‐2013)
3 Pass 1: Checking inodes, blocks, and sizes
4 Pass 2: Checking directory structure
5 Pass 3: Checking directory connectivity
6 Pass 4: Checking reference counts
7 Pass 5: Checking group summary information
8 /dev/storage/lv: 11/40960 files (0.0% non‐contiguous), 10825/163840 block
s
9 [root@localhost ~]# resize2fs /dev/storage/lv
10 resize2fs 1.42.9 (28‐Dec‐2013)
11 Resizing the filesystem on /dev/storage/lv to 307200 (1k) blocks.
12 The filesystem on /dev/storage/lv is now 307200 blocks long.
第3步:重新挂载硬盘设备并查看挂载状态。
1 [root@localhost ~]# mount ‐a
2 [root@localhost ~]# df ‐h
3 Filesystem Size Used Avail Use% Mounted on
4 /dev/mapper/rhel‐root 17G 5.6G 12G 33% /
5 devtmpfs 478M 0 478M 0% /dev
6 tmpfs 489M 0 489M 0% /dev/shm
7 tmpfs 489M 6.7M 482M 2% /run
8 tmpfs 489M 0 489M 0% /sys/fs/cgroup
9 /dev/sr0 3.6G 3.6G 0 100% /media/cdrom
10 /dev/sda1 1014M 139M 876M 14% /boot
11 tmpfs 98M 0 98M 0% /run/user/0
12 /dev/mapper/storage‐lv 287M 2.1M 266M 1% /lv
三、缩小逻辑卷
相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境
中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩
容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执行
缩容操作前记得先把文件系统卸载掉。
第1步:卸载逻辑卷,检查文件系统的完整性。
1 [root@localhost ~]# umount /lv
2 [root@localhost ~]# e2fsck ‐f /dev/storage/lv
3 e2fsck 1.42.9 (28‐Dec‐2013)
4 Pass 1: Checking inodes, blocks, and sizes
5 Pass 2: Checking directory structure
6 Pass 3: Checking directory connectivity
7 Pass 4: Checking reference counts
8 Pass 5: Checking group summary information
9 /dev/storage/lv: 11/77824 files (0.0% non‐contiguous), 15987/307200 block
s
第2步:把逻辑卷lv的容量减小到100MB
1 [root@localhost ~]# resize2fs /dev/storage/lv 100M
2 resize2fs 1.42.9 (28‐Dec‐2013)
3 Resizing the filesystem on /dev/storage/lv to 102400 (1k) blocks.
4 The filesystem on /dev/storage/lv is now 102400 blocks long.
5 [root@localhost ~]# lvreduce ‐L 100M /dev/storage/lv
6 WARNING: Reducing active logical volume to 100.00 MiB.
7 THIS MAY DESTROY YOUR DATA (filesystem etc.)
8 Do you really want to reduce storage/lv? [y/n]: y
9 Size of logical volume storage/lv changed from 300.00 MiB (75 extents) to
100.00 MiB (25 extents).
10 Logical volume storage/lv successfully resized.
第3步:重新挂载文件系统并查看系统状态。
1 [root@localhost ~]# mount ‐a
2 [root@localhost ~]# df ‐h
3 Filesystem Size Used Avail Use% Mounted on
4 /dev/mapper/rhel‐root 17G 5.6G 12G 33% /
5 devtmpfs 478M 0 478M 0% /dev
6 tmpfs 489M 0 489M 0% /dev/shm
7 tmpfs 489M 6.7M 482M 2% /run
8 tmpfs 489M 0 489M 0% /sys/fs/cgroup
9 /dev/sr0 3.6G 3.6G 0 100% /media/cdrom
10 /dev/sda1 1014M 139M 876M 14% /boot
11 tmpfs 98M 0 98M 0% /run/user/0
12 /dev/mapper/storage‐lv 93M 1.6M 85M 2% /lv