感谢支持
我们一直在努力

Linux逻辑卷管理LVM

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。

相关概念:

物理卷PV:是指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备(比如RAID设备)。

逻辑卷LV:一个或者多个物理卷组成一个逻辑卷。

卷组VG:一个或者多个逻辑卷组成一个卷组。卷组把多个逻辑卷组合在一起,形成一个可管理的单元。

物理块PE:物理卷按大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。

逻辑块LE:逻辑卷按“块”为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。

  • 创建物理分区
  1. 在使用LVM之前,需要首先划分磁盘分区,也就是用fdisk命令划分磁盘分区,需要指定分区类型为linux LVM,对应的ID为8e(其实LVM也能识别linux默认的分区类型83)
  2. [root@rhel5 ~]# fdisk -l
  3. Disk /dev/sda: 21.4 GB, 21474836480 bytes
  4. 255 heads, 63 sectors/track, 2610 cylinders
  5. Units = cylinders of 16065 * 512 = 8225280 bytes
  6. Device Boot Start End Blocks Id System
  7. /dev/sda1 * 1 13 104391 83 Linux
  8. /dev/sda2 14 78 522112+ 82 Linux swap / Solaris
  9. /dev/sda3 79 1383 10482412+ 8e Linux LVM
  10. /dev/sda4 1384 2610 9855877+ 5 Extended
  11. /dev/sda5 1384 1994 4907826 83 Linux
  12. [root@rhel5 ~]# fdisk -t 8e /dev/sda5
  • 创建物理卷PV
  1. 创建物理卷的命令是pvcreate,通过该命令可以将希望添加到卷组(VG)的所有磁盘分区或者整个磁盘创建为物理卷。使用格式为:
  2. pvcreate 磁盘分区或整个磁盘
  3. [root@rhel5 ~]# pvcreate /dev/sda5
  4. Physical volume “/dev/sda5” successfully created
  • 创建/激活卷组VG
  1. 创建卷组的命令是vgcreate,使用格式为:
  2. vgcreate 卷组名 物理卷
  3. [root@rhel5 ~]# vgcreate iscsi /dev/sda5
  4. Volume group“iscsi” successfully created
  5. 卷组创建完毕后,可以通过vgchange命令激活卷组,而无需重启系统。Vgchange使用格式如下:
  6. vgchange -a y 卷组名 (激活卷组)
  7. vgchange -a n 卷组名 (停用卷组)
  • 创建逻辑卷LV
  1. 创建逻辑卷的命令是lvcreate,常用的使用格式为:
  2. lvcreate [-L 逻辑卷大小| -l PE数 ] –n 逻辑卷名称 所属的卷组名
  3. 其中:
  4. -L:后面接逻辑卷的大小,可以用K、M、G表示。例如100M、10G等
  5. -l:用PE数来计算逻辑卷的大小。
  6. [root@rhel5 ~]# lvcreate -n sharedisk -L 2G iscsi
  7. Logical volume “sharedisk” created
  • 显示PV、VG、LV的属性信息
  1. [root@rhel5 ~]# pvs
  2. PV VG Fmt Attr PSize PFree
  3. /dev/sda3 rootvg lvm2 a- 9.97G 0
  4. /dev/sda5 iscsi lvm2 a- 4.68G 4.68G
  5. [root@rhel5 ~]# vgs
  6. VG #PV #LV #SN Attr VSize VFree
  7. iscsi 1 0 0 wz–n- 4.68G 4.68G
  8. rootvg 1 1 0 wz–n- 9.97G 0
  9. [root@rhel5 ~]# lvs
  10. LV VG Attr LSize Origin Snap% Move Log Copy% Convert
  11. sharedisk iscsi -wi-ao 2.00G
  12. rootlv rootvg -wi-ao 9.97G
  13. 相应的也可通过pvdisplay、vgdisplay、lvdisplay查看更详细的信息
  • 格式化逻辑卷,创建文件系统
  1. [root@rhel5 ~]# mkfs.ext3 /dev/iscsi/sharedisk
  2. mke2fs 1.39 (29-May-2006)
  3. Filesystem label=
  4. OS type: Linux
  5. Block size=4096 (log=2)
  6. Fragment size=4096 (log=2)
  7. 262144 inodes, 524288 blocks
  8. 26214 blocks (5.00%) reserved for the super user
  9. First data block=0
  10. Maximum filesystem blocks=536870912
  11. 16 block groups
  12. 32768 blocks per group, 32768 fragments per group
  13. 16384 inodes per group
  14. Superblock backups stored on blocks:
  15. 32768, 98304, 163840, 229376, 294912
  16. Writing inode tables: done
  17. Creating journal (16384 blocks): done
  18. Writing superblocks and filesystem accounting information: done
  19. This filesystem will be automatically checked every 38 mounts or
  20. 180 days, whichever comes first. Use tune2fs -c or -i to override.
  21. [root@rhel5 ~]# tune2fs -c 0 -i 0 /dev/iscsi/sharedisk
  22. tune2fs 1.39 (29-May-2006)
  23. Setting maximal mount countto -1
  24. Setting interval between checks to 0 seconds
  25. [root@rhel5 ~]#mkdir /data
  26. [root@rhel5 ~]# mount /dev/iscsi/sharedisk /data/
  27. [root@rhel5 ~]# df -h
  28. 文件系统 容量 已用 可用 已用% 挂载点
  29. /dev/mapper/rootvg-rootlv 9.7G 7.6G 1.7G 83% /
  30. /dev/sda1 99M 14M 80M 15% /boot
  31. tmpfs 322M 0 322M 0% /dev/shm
  32. /dev/mapper/iscsi-sharedisk 2.0G 68M 1.9G 4% /data

================================================================================

  • 添加新的PV到VG
  1. 紧接着上面的讲解实例,通过fdisk新建一个磁盘分区,对应的分区为/dev/sda6,现在要把新增的硬盘分区加入到卷组iscsi,操作如下:
  2. [root@rhel5 ~]# vgdisplay iscsi | grep -i free //首先检查iscsi卷组中的空闲空间
  3. Free PE / Size 686 / 2.68 GB
  4. [root@rhel5 ~]# pvcreate /dev/sda6 //先将/dev/sda6转换为物理卷
  5. Physical volume “/dev/sda6” successfully created
  6. [root@rhel5 ~]# vgextend iscsi /dev/sda6 //将新增物理卷添加到卷组iscsi中
  7. Volume group“iscsi” successfully extended
  8. [root@rhel5 ~]# vgdisplay iscsi | grep -i free //此时剩余卷组空间还有4.55G,刚好是新增物理卷的大小
  9. Free PE / Size 1164 / 4.55 GB
  • 在线扩展LV的大小
  1. LVM最主要的功能就是能动态的调整分区的大小,其实也就是修改逻辑卷的大小
  2. lvresize [-L (+size) –l (+PE数)] 逻辑卷名称
  3. 扩展逻辑卷sharedisk的大小到5G,执行以下命令:
  4. [root@rhel5 ~]# lvresize -L 5G /dev/iscsi/sharedisk
  5. [root@rhel5 ~]# resize2fs /dev/iscsi/sharedisk
  6. resize2fs 1.39 (29-May-2006)
  7. resize2fs: Bad magic number in super-block while trying toopen /dev/iscsi/sharedisk
  8. Couldn’t find valid filesystem superblock.
  • 缩小LV的大小
  1. 缩小LV必须先缩小LV所在的文件系统(resize2fs)才能进一步缩小LV(lvresize)
  2. 缩小逻辑卷sharediak的大小为3G
  3. [root@rhel5 ~]# umount /dev/iscsi/sharedisk
  4. [root@rhel5 ~]# e2fsck -f /dev/iscsi/sharedisk //检查文件系统的准确性
  5. e2fsck 1.39 (29-May-2006)
  6. Couldn’t find ext2 superblock, trying backup blocks…
  7. Pass 1: Checking inodes, blocks, and sizes
  8. Pass 2: Checking directory structure
  9. Pass 3: Checking directory connectivity
  10. Pass 4: Checking reference counts
  11. Pass 5: Checking group summary information
  12. /dev/iscsi/sharedisk: ***** FILE SYSTEM WAS MODIFIED *****
  13. /dev/iscsi/sharedisk: 11/262144 files (9.1% non-contiguous), 25406/524288 blocks
  14. [root@rhel5 ~]# resize2fs /dev/iscsi/sharedisk 3G //缩小文件系统的大小为3G
  15. resize2fs 1.39 (29-May-2006)
  16. Resizing the filesystem on /dev/iscsi/sharedisk to 786432 (4k) blocks.
  17. The filesystem on /dev/iscsi/sharedisk is now 786432 blocks long.
  18. [root@rhel5 ~]# lvresize -L 3G /dev/iscsi/sharedisk //缩小逻辑卷sharedisk的大小为3G
  19. WARNING: Reducing active logical volume to 3.00 GB
  20. THIS MAY DESTROY YOUR DATA (filesystem etc.)
  21. Do you really want to reduce sharedisk? [y/n]: y
  22. Reducing logical volume sharedisk to 3.00 GB
  23. Logical volume sharedisk successfully resized
  24. [root@rhel5 ~]# mount /dev/iscsi/sharedisk /data/
  • 删除LV、VG、PV
  1. 删除物理卷的命令是pvremove,将物理卷从卷组移除的命令是vgreduce,删除卷组的命令是vgremove,同理,删除逻辑卷的命令是lvremove。
  2. 删除一个卷组的顺序是:卸载逻辑卷分区–>删除卷组上所有逻辑卷–>删除卷组
  3. [root@rhel5 ~]# umount /dev/iscsi/sharedisk
  4. [root@rhel5 ~]# lvremove /dev/iscsi/sharedisk
  5. Do you really want to remove active logical volume sharedisk? [y/n]: y
  6. Logical volume “sharedisk” successfully removed
  7. [root@rhel5 ~]# vgchange -a n iscsi //停用卷组iscsi
  8. 0 logical volume(s) in volume group“iscsi” now active
  9. [root@rhel5 ~]# vgreduce iscsi /dev/sda6 //从卷组iscsi 中移除一个/dev/sda6的物理卷
  10. Removed “/dev/sda6”from volume group“iscsi”
  11. [root@rhel5 ~]# vgs iscsi
  12. VG #PV #LV #SN Attr VSize VFree
  13. iscsi 1 0 0 wz–n- 4.68G 4.68G
  14. [root@rhel5 ~]# vgremove iscsi /dev/sda5
  15. Volume group“iscsi” successfully removed
  16. [root@rhel5 ~]# pvremove /dev/sda5
  17. Labels on physical volume “/dev/sda5” successfully wiped
  18. [root@rhel5 ~]# pvremove /dev/sda6
  19. Labels on physical volume “/dev/sda6” successfully wiped

LVM快照:

LVM快照是基于存储块基本的,而不是文件系统级别的,所以当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on-write)。

在写操作写入块之前,CoW将原始数据移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。

采取CoW实现方式时,snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效。

  1. [root@rhel5 ~]# pvcreate /dev/sda{5,6}
  2. Physical volume “/dev/sda5” successfully created
  3. Physical volume “/dev/sda6” successfully created
  4. [root@rhel5 ~]# vgcreate datavg /dev/sda{5,6}
  5. Volume group“datavg” successfully created
  6. [root@rhel5 ~]# lvcreate -n datalv -L 500M datavg
  7. Logical volume “datalv” created
  8. [root@rhel5 ~]# mkfs.ext3 /dev/datavg/datalv
  9. mke2fs 1.39 (29-May-2006)
  10. Filesystem label=
  11. OS type: Linux
  12. Block size=1024 (log=0)
  13. Fragment size=1024 (log=0)
  14. 128016 inodes, 512000 blocks
  15. 25600 blocks (5.00%) reserved for the super user
  16. First data block=1
  17. Maximum filesystem blocks=67633152
  18. 63 block groups
  19. 8192 blocks per group, 8192 fragments per group
  20. 2032 inodes per group
  21. Superblock backups stored on blocks:
  22. 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
  23. Writing inode tables: done
  24. Creating journal (8192 blocks): done
  25. Writing superblocks and filesystem accounting information: done
  26. This filesystem will be automatically checked every 27 mounts or
  27. 180 days, whichever comes first. Use tune2fs -c or -i to override.
  28. [root@rhel5 ~]# mount /dev/datavg/datalv /data
  29. [root@rhel5 ~]# dd if=/dev/zero of=/data/test.img bs=10M count=10
  30. 10+0 records in
  31. 10+0 records out
  32. 104857600 bytes (105 MB) copied, 4.79465 seconds, 21.9 MB/s
  33. [root@rhel5 ~]# lvcreate -L 400M -n snaplv -s /dev/datavg/datalv
  34. Logical volume “snaplv” created
  35. [root@rhel5 ~]# lvs
  36. LV VG Attr LSize Origin Snap% Move Log Copy% Convert
  37. datalv datavg owi-ao 500.00M
  38. snaplv datavg swi-a- 400.00M datalv 0.00
  39. rootlv rootvg -wi-ao 9.97G
  40. [root@rhel5 ~]# mount /dev/datavg/snaplv /data_snap/
  41. [root@rhel5 ~]# df -h
  42. Filesystem Size Used Avail Use% Mounted on
  43. /dev/mapper/rootvg-rootlv
  44. 9.7G 3.4G 5.8G 38% /
  45. /dev/sda1 99M 14M 80M 15% /boot
  46. tmpfs 212M 0 212M 0% /dev/shm
  47. /dev/mapper/datavg-datalv
  48. 485M 111M 354M 24% /data
  49. /dev/mapper/datavg-snaplv
  50. 485M 111M 354M 24% /data_snap
  51. [root@rhel5 ~]# ls /data /data_snap/
  52. /data:
  53. lost+found test.img
  54. /data_snap/:
  55. lost+found test.img
  56. [root@rhel5 ~]# dd if=/dev/zero of=/data/test2.img bs=10M count=10
  57. 10+0 records in
  58. 10+0 records out
  59. 104857600 bytes (105 MB) copied, 6.50751 seconds, 16.1 MB/s
  60. [root@rhel5 ~]#
  61. [root@rhel5 ~]# df -h
  62. Filesystem Size Used Avail Use% Mounted on
  63. /dev/mapper/rootvg-rootlv
  64. 9.7G 3.4G 5.8G 38% /
  65. /dev/sda1 99M 14M 80M 15% /boot
  66. tmpfs 212M 0 212M 0% /dev/shm
  67. /dev/mapper/datavg-datalv
  68. 485M 212M 254M 46% /data
  69. /dev/mapper/datavg-snaplv
  70. 485M 111M 354M 24% /data_snap
  71. [root@rhel5 ~]# ls /data /data_snap/
  72. /data:
  73. lost+found test2.img test.img
  74. /data_snap/:
  75. lost+found test.img
  76. [root@rhel5 ~]# lvs
  77. LV VG Attr LSize Origin Snap% Move Log Copy% Convert
  78. datalv datavg owi-ao 500.00M
  79. snaplv datavg swi-ao 400.00M datalv 24.76
  80. rootlv rootvg -wi-ao 9.97G
  81. [root@rhel5 ~]# rm -rf /data/*
  82. [root@rhel5 ~]# dd if=/dev/zero of=/data/snap.img bs=40M count=10 //此时datalv上的变化量将超过快照snaplv的大小400M,则snaplv将失效
  83. [root@rhel5 ~]# df -h
  84. Filesystem Size Used Avail Use% Mounted on
  85. /dev/mapper/rootvg-rootlv
  86. 9.7G 3.4G 5.8G 38% /
  87. /dev/sda1 99M 14M 80M 15% /boot
  88. tmpfs 212M 0 212M 0% /dev/shm
  89. /dev/mapper/datavg-datalv
  90. 485M 400M 85M 82% /data
  91. /dev/mapper/datavg-snaplv
  92. 485M 111M 354M 24% /data_snap
  93. [root@rhel5 ~]# lvs
  94. /dev/datavg/snaplv: read failed after 0 of 2048 at 0: Input/output error
  95. LV VG Attr LSize Origin Snap% Move Log Copy% Convert
  96. datalv datavg owi-ao 500.00M
  97. snaplv datavg Swi-Io 400.00M datalv 100.00
  98. rootlv rootvg -wi-ao 9.97G
  99. [root@rhel5 ~]# rm -rf /data_snap/test.img //快照失效,里面的文件已无法读取
  100. rm: cannot remove `/data_snap/test.img’: Readonly file system
  101. [root@rhel5 ~]# mount -o remount,rw /data_snap/
  102. mount: block device /dev/mapper/datavg-snaplv is write-protected, mounting readonly
  103. [root@rhel5 ~]# lvremove /dev/datavg/snaplv //快照失效,只能移除LV
  104. /dev/cdrom: open failed: Readonly file system
  105. /dev/datavg/snaplv: read failed after 0 of 4096 at 0: Input/output error
  106. Do you really want to remove active logical volume snaplv? [y/n]: y
  107. Logical volume “snaplv” successfully removed

可以将LVM快照应用在KVM虚拟机中,创建一个LV作为原始映像,为该原始映像创建LV快照作为虚拟机的磁盘映像,这样可以迅速克隆系统(创建快照的时间常常不超过几秒)且节省磁盘空间(guest共享原始映像的大多数数据)。即使系统出现问题,只要移除快照��可。

赞(0) 打赏
转载请注明出处:服务器评测 » Linux逻辑卷管理LVM
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏