LVM手册

RHEL7 lvm中文手册

1.1 LVM基本组成

LVM利用Linux内核的device-mapper来实现存储系统的虚拟化(系统分区独立于底层硬件)。

通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间.

LVM是用来方便管理的,不会提供额外的安全保证。

LVM的基本组成块(building blocks)如下:

  • 物理卷Physical volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。
  • 卷组Volume group (VG):将一组物理卷收集为一个管理单元。
  • 逻辑卷Logical volume (LV):虚拟分区,由物理区域(physical extents)组成。
  • 物理区域Physical extent (PE):硬盘可供指派给逻辑卷的最小单位(通常为4MB)。

1.2 优缺点

1.2.1 优点

比起正常的硬盘分区管理,LVM更富于弹性:

  • 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘。
  • 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
  • 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
  • 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。It does not depend on the position of the LV within VG, there is no need to ensure surrounding available space.
  • 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作。
  • 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
  • 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。

这些优点使得LVM对服务器的管理非常有用。

1.2.2 缺点

  • 在系统设置时需要更复杂的额外步骤。

任务PV阶段VG阶段LV阶段
搜寻(scan) pvscanvgscanlvscan
建立(create) pvcreatevgcreatelvcreate
列出(display)pvdisplayvgdisplaylvdisplay
增加(extend)vgextendlvextend (lvresize)
减少(reduce)lvgreducelvreduce (lvresize)
删除(remove)pvremovevgremovelvremove
改变容量(resize)lvresize
改变属性(attribute)pvchangevgchangelvchange

3.1 创建分区

fdisk -l
parted <DEVICE>
mklabel gpt
mkpart data ext4 0% 100%
#4k对齐
parted --align optimal /dev/sdX
(parted) align-check optimal 1

3.2 创建pv

pvcreate <DEVICE>
#用以下命令查看已创建好的物理卷
pvs/pvdisplay
#注意: 如果你用的是擦除块(erase block)大小小于1M的SSD,
#用以下命令pvcreate --dataalignment 1m /dev/sda2来设置对齐(alignment)
#pvcreate提示:Device /dev/sdb not found (or ignored by filtering)
#dd if=/dev/urandom of=/dev/sdX bs=512 count=64

3.3 创建vg

vgcreate <volume_group> <physical_volume>
vgextend <volume_group> <another_physical_volume>
#或一次性创建
vgcreate <volume_group> <physical_volume> <another_physical_volume>
vgdisplay

3.4 vg增加pv

pvcreate /dev/sdb1
vgextend VolGroup /dev/sdb1

3.5 从vg中移除pv

#将要移除的pv上的数据转移到别的pv上
pvmove -v /dev/sdb1
#如果你想指定所要转移的pv,指定该pv为pvmove的第二个参数
pvmove -v /dev/sdb1 /dev/sdf1
#从vg中移除pv
vgreduce myVg /dev/sdb1
#或者把所有空pv都移除
vgreduce --all myVg
#移除pv
pvremove /dev/sdb1

3.6 创建lv

lvcreate -L <size> <volume_group> -n <logical_volume>
#vgdisplay --units g  查看Free PE数量,g单位
lvcreate -l <PE_free> <volume_group> -n <logical_volume>
#如果你想让要创建的逻辑卷拥有卷组(VG)的所有未使用空间,请使用以下命令:
lvcreate -l +100%FREE <volume_group> -n <logical_volume>
lvdisplay

3.7 访问lv

/dev/mapper/Volgroup00-lvolhome或/dev/VolGroup00/lvolhome
#如果你要创建的是swap,那么你需要加上-C y参数:
lvcreate -C y -L 10G VolGroup00 -n lvolswap
-C y参数用来指定逻辑卷的空间分配是连续的,这保证了你所创建的swap空间不会被分散在不连续的物理空间甚至不同的硬盘中。
 
#若/dev/mapper和/dev/下找不到创建的lv,使用以下命令加载模块、扫描与激活vg:
modprobe dm-mod
vgscan
vgchange -ay

3.8 格式化&挂载

mkfs.ext4 /dev/mapper/<volume_group>-<logical_volume>
mount /dev/mapper/<volume_group>-<logical_volume> /<mountpoint>
lvdisplay
挂载,fstab增加开机自动挂载

3.9 lv扩大

# 15GB--->20G 扩大lv ---> 扩大filesystem
lvextend -L 20G /dev/mapper/<volume_group>-<logical_volume>
或使用lvresize命令来替代lvextend命令
lvresize -L +5G /dev/mapper/<volume_group>-<logical_volume>
# 让lv使用所有空余空间:
lvextend -l +100%FREE VolGroup00/lvolhome
# 调整filesystem大小
# 如果是xfs文件系统,需要用xfs_growfs 而不是 resize2fs.
# loop的设备+xfs 直接grow之后就行,如果分区了,需要更新分区表再reboot,再grow
resize2fs /dev/mapper/<volume_group>-<logical_volume>

警告: 并非所有的文件系统都支持无损或在线(online)扩大逻辑卷(在已挂载的文件系统上扩大逻辑卷很可能会造成数据损失) 注意: 如果没有执行resize2fs来调整filesystem大小,那么实际可用的lv空间不会得到扩充

3.10 lv缩小

由于lv上的filesystem很可能已经占满lv的空间,因此在缩小逻辑卷时,可能需要先缩小文件系统的大小,再缩小逻辑卷本身。
对于不支持在线调整大小的文件系统,比如ext4,先卸载再执行以下操作。

#15G--->10G
resize2fs /dev/mapper/<volume_group>-<logical_volume> 9G
lvreduce -L 10G /dev/mapper/<volume_group>-<logical_volume> 
#或
lvresize -L -5G /dev/mapper/<volume_group>-<logical_volume>
resize2fs /dev/VolGroup00/lvolhome

这里我们先把文件系统缩小到不足15G的大小(上例为9G),之所以不把它调整到刚好15G大小是为了防止在缩小逻辑卷时对文件系统数据可能造成的损害。之后我们再用resize2fs命令把文件系统调整到正常大小(上例为15G),以让它可以使用逻辑卷另外的(上例为6G)空余空间。与扩大逻辑卷类似,你可以使用lvresize命令来替代lvreduce命令。

警告:为了避免数据丢失,在缩小文件系统时请不要让文件系统的大小比它的已使用空间还小。 并非所有的文件系统都支持无损或在线(online)缩小逻辑卷(在已挂载的文件系统上缩小逻辑卷很可能会造成数据损失)
注意: 建议一开始缩小文件系统时,使文件系统大小比缩小后的逻辑卷大小还小,这样可以保证在缩小逻辑卷时,不会造成文件系统末端被切断的意外。

3.11 缩小/分区大小

进入Rescue模式(缩小/需要进入rescue模式)
依次执行pvscan,vgscan,lvscan
#激活lv,路径无法tab补全,手动输入
lvchange -ay /dev/vg_ssd/lv_system
#检查文件系统
e2fsck -f /dev/vg_ssd/lv_system
#缩小为20G,先减小文件系统,再减小lv
resize2fs /dev/vg_ssd/lv_system 20G
lvreduce -L 20G /dev/vg_ssd/lv_system
fsck /dev/vg_ssd/lv_system
#将空余容量扩充至其他lv
lvextend -l +100%FREE /dev/vg_ssd/lv_share
resize2fs -f /dev/vg_ssd/lv_share

3.12 移除LV

#找到要移除的lv,使用以下命令查看系统的所有逻辑卷
lvs,lsblk,df-h
umount /mountpoint
lvremove /dev/yourVG/yourLV
更新/etc/fstab

3.13 快照功能

LVM可以给系统创建一个快照,由于使用了写入时复制(copy-on-write) 策略,相比传统的备份更有效率。
初始的快照只有关联到实际数据的inode的实体链接(hark-link)而已。只要实际的数据没有改变,快照就只会包含指向数据的inode的指针,而非数据本身。
一旦更改了快照对应的文件或目录,LVM就会自动拷贝相应的数据,包括快照所对应的旧数据的拷贝和当前系统所对应的新数据的拷贝。这样的话,只要你修改的数据(包括原始的和快照的)不超过2G,你就可以只使用2G的空间对一个有35G数据的系统创建快照。

3.14 创建快照LV

lvcreate --size 100M --snapshot --name snap01 /dev/mapper/vg0-pv
#你可以修改少于100M的数据直到该快照逻辑卷空间不足为止。

3.15 RAID LVM

# 建立lv,-i为条代数即磁盘数量,-I为strip size,一般64k
lvcreate -i <num_of_disk> -I <64> -n lv_data -l +100%FREE vg_raid
# 建立lv_raid1
lvcreate -m 1 --type raid1 -l +100%FREE vg_data --nosync -n lv_r1 vg_raid
# 建立lv_raid10
#--stripes /-i (条带数,默认2,6盘raid10就应该配3), --mirrors 1(额外)副本数
lvcreate --type raid10 -l +100%FREE --nosync --name lv_r10 vg_raid
# lv转raid1
lvconvert -m 1 --type raid1  vg_raid/lv_raid
# raid1转liner_lv
lvconvert -m0 vg_raid/lv_raid1 (/dev/sd[ce] 最后参数指定要保留的pv)
# 查看lv信息
lvs -a -o name,copy_percent,devices vg_raid

3.16 Cache LVM

  • storage/lvm/lvm手册.txt
  • 最后更改: 2019/07/19 09:29
  • 由 mrco