LVM – 灵活的硬盘管理
初步理解
LVM 可以相对于传统的硬盘分区进行理解,传统的硬盘分区就像一套房子用固定的墙壁隔开几个小区域进行分区,而 LVM 就像可以随时调整移动这些墙壁,灵活调整每个区域空间大小。
比较常用的情况是系统添加了硬盘后,将新的硬盘用于扩容到已有的分区中。
主要概念
- 物理卷(PV,Physical Volumes): 就是硬盘或者硬盘的一部分,通过物理存储设备创建的。
- 卷组(Volume Group): 由多个物理卷组成的“存储池”,是PV的集合,可以在VG上创建逻辑卷LV。
- 逻辑卷(Logical Volume): 从卷组 VG 中划分出来的一块区域,用于存放数据,类似于传统分区,可以随时调整大小。
简单的例子:物理卷就像买的几桶桶装水,卷组是一些蓄水的水池,可以将桶装水中的水倒到水池中组成一个卷组,最后需要用多少水就从大水池中取出水量(逻辑卷)装到小桶中用作不同的用处,随着需要,可以随时购买桶装水回来(增加物理卷),或者调整小桶的大小(调整逻辑卷容量大小)。
图来自:http://t.csdnimg.cn/5mtTg
新建文件系统
假设现在新添加了一个硬盘,需要将新添加的硬盘空间都给到 /test 文件系统,并且将文件系统设置成开机自动挂载。
- 添加或删除了磁盘后,重新扫描 SCSI 总线
rescan-scsi-bus.sh -a #重新扫描所有SCSI设备
lsblk #显示系统中所有的块设备,硬盘和分区,新添加的硬盘会显示出来
- 创建物理卷
将新硬盘初始化为物理卷
pvcreate /dev/sdb
- 创建卷组
因为新的硬盘所有内容都归给 /test ,因此新建一个卷组方便分配容量
vgcreate testvg /dev/sdb
- 创建逻辑卷
将整个卷组的所有容量分配给一个逻辑卷 testlv
lvcreate -l 100%FREE -n testlv testvg
-l 100%FREE
参数表示使用卷组中所有可用空间
- 创建文件系统
在逻辑卷上创建文件系统
mkfs.ext4 /dev/testvg/testlv
- 创建挂载点
mkdir /test
- 挂载逻辑卷
将逻辑卷挂载到 ‘/test’ 文件系统
mount /dev/testvg/testlv /test
- 设置开机自动挂载,更新’/etc/fstab’
为了设置系统重启后自动挂载逻辑卷,编辑’/etc/fstab’
vim /etc/fstab
在文件中添加下行
/dev/testvg/testlv /test ext4 defaults 0 2
ext4列:ext4是文件系统类型,制定了挂载的设备使用的文件系统类型(ext4\xfs\btrfs等)
defaults列: 挂载选项,defaults是一组预定义的选项,还有其他的如’ro’ 只读
0列: 文件系统的备份选项,用于dump命令的选项,0表示不需要备份,1表示要备份
2列: 文件系统的检查顺序,用于fsck命令的选项,0表示启动时比检查该文件系统;1表示启动时’fsck’会首先检查这个文件系统;‘2’表示检查顺序中会被检查,但是优先级低于’1’。
- 验证挂载
df -h /test
扩容目录
假设现在要给系统中已有的目录 /var 扩容
1. 准备硬盘(如有)
lsblk
显示系统中所有的块设备,包括硬盘和他们的分区,查看是否有新加的硬盘。
2. 创建物理卷
若sdb是新增的硬盘
(sudo) pvcreate /dev/sdb
将 ‘/dev/sdb’ 设置为物理卷
3. 创建或者扩展卷组
- 若已有卷组需要扩展
(sudo) vgextend klas /dev/sdb
将新创建的物理卷添加到已有卷组 klas 中
- 若新建卷组
(sudo) vgcreate testvg /dev/sdb
将新创建的物理卷加到新的卷组 testvg 中
4. 扩展逻辑卷
- 首先查询目录 /var 所在的逻辑卷
运行
lsblk
可看到如下所示的输出形式,在MOUNTPOINT列找到目标目录,NAME列 klas-var 代表了 /var所在的逻辑卷为 /dev/klas/var
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
└─klas-var 253:0 0 50G 0 lvm /var
- 将卷组的空间扩展到逻辑卷中:
(sudo) lvextend -l +100%FREE /dev/klas/var # 将卷组klas中的所有空闲空间分配给逻辑卷
(sudo) lvextend -L 100G /dev/klas/var # 将逻辑卷扩容到100G
(sudo) lvextend -L +100G /dev/klas/var # 将逻辑卷扩容多100G
5. 扩展文件系统
还需要扩展文件系统,以便操作系统可以使用新增空间
- /var 是 ‘ext4’ 文件系统
(sudo) resize2fs /dev/klas/var
- /var 是 ‘xfs’ 文件系统
(sudo) xfs_growfs /var
验证是否扩展成功
df -h /var