磁盘管理系列

linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html

linux磁盘管理系列二:软RAID的实现  http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_041_raid.html

linux磁盘管理系列三:LVM的使用        http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_042_lvm.html

LVM是什么

LVM是Linux操作系统的逻辑卷管理器。 现在有两个Linux版本的LVM,分别是 LVM1,LVM2。LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本。 LVM2几乎完全向后兼容使用LVM1创建的卷。此例外是快照(在升级到LVM 2之前,必须删除快照卷)。

LVM简介

逻辑卷管理提供了比传统的磁盘和分区视图更高级别的计算机系统上磁盘存储的视图。 这使得系统管理员可以更灵活地将存储分配给应用程序和用户。

在逻辑卷管理器的控制下创建的存储卷可以随意调整大小和移动,尽管这可能需要对文件系统工具进行一些升级。

逻辑卷管理器还允许管理用户定义组中的存储卷,允许系统管理员处理明显命名的卷组(如“development”和“sales”),而不是物理磁盘名称,例如“sda”和“sdb”

LVM基本术语

volume group (VG)

卷组是LVM中使用的最高级别的抽象。 它将逻辑卷和物理卷集合在一起成为一个管理单元。

physical volume (PV)

一个物理卷通常是一个硬盘,虽然它可能只是一个看起来像一个硬盘(如软件RAID设备)的设备。

logical volume (LV)

相当于非LVM系统中的磁盘分区。 LV作为标准块设备可见; 因此LV可以包含文件系统(例如/ home)。

physical extent (PE)

每个物理卷都被划分为数据块(称为物理扩展盘区),这些扩展盘区与卷组的逻辑盘区具有相同的大小。

logical extent (LE)

每个逻辑卷都被分割成数据块,称为逻辑盘区。 卷组中的所有逻辑卷的区段大小都是相同的。

几个概念的关系

一个具体的例子将有助于:

假设我们有一个名为VG1的卷组,这个卷组的物理盘区大小为4MB。 在这个卷组中,我们引入了2个硬盘分区/dev/hda1和/dev/hdb1。
这些分区将成为物理卷PV1和PV2(管理员可以自行决定是否提供更有意义的名称)。
PV被分成4MB块,因为这是卷组的大小。磁盘大小不同,我们在PV1中获得99个扩展盘区,在PV2中获得248个扩展盘区。
我们现在可以创建自己的逻辑卷,它可以是1到347(248 + 99)范围之间的任何大小。
当创建逻辑卷时,在逻辑盘区和物理盘区之间定义映射,例如, 逻辑盘区1可以映射到PV1的物理盘区51上,写入逻辑盘的第一个4MB的数据实际上被写入到PV1的第51盘区。

映射模式

线性映射 : 将分配一定范围的PE到LV的一个区域,例如LE 1 - 99映射到PV1,LE 100 - 347映射到PV2。

分条映射 : 将跨多个物理卷交织逻辑盘区的块,这个方式一定程度上提高了性能,具体如下

  1st chunk of LE[1] -> PV1[1], #第一个逻辑块在PV1设备上, 第二个在PV2设备上,等等。
  2nd chunk of LE[1] -> PV2[1],
  3rd chunk of LE[1] -> PV3[1],
  4th chunk of LE[1] -> PV1[2],

Snapshots(快照):

这是LVM提供的一个非常棒的功能就是快照了,他允许管理员创建一个新的块设备来呈现一个逻辑卷的的精确副本,在某个时间冻结,管理员可以及时备份指定一致状态下的数据,备份完毕就可以删除设备了。

快照最初包含有关快照的一些元数据,但没有来自源逻辑卷的实际数据。快照使用写时复制(copy on write)技术来检测数据在原始数据块中何时更改。它将拍摄快照时保存的值复制到快照卷中的块中,然后允许将新数据存储在源块中。

随着更多块从源逻辑卷上的原始值发生更改,快照大小也会增加。如果快照卷变满,它将被丢弃,所以分配足够的空间是非常重要的,具体取决于你数据的变换情况,如果快照大小和原始数据一样大,它将永远不会溢出的。

安装LVM

  1. [root@centos7 ~]$ rpm -q lvm2 # 查看lvm2是否安装了, 我使用的centos7,这是安装的了
  2. lvm2-2.02.-.el7.x86_64
  3. [root@centos7 ~]$ # yum -y install lvm2 # 没有安装的话使用yum安装

常用命令简介

  1. [root@centos7 ~]$ pv # 使用tab按键获取pv相关命令
  2. pvchange pvck pvcreate pvdisplay pvmove pvremove pvresize pvs pvscan
  3. [root@centos7 ~]$ vg # 使用tabl按键获取vg相关的命令
  4. vgcfgbackup vgck vgdisplay vgimport vgmknodes vgrename vgsplit
  5. vgcfgrestore vgconvert vgexport vgimportclone vgreduce vgs
  6. vgchange vgcreate vgextend vgmerge vgremove vgscan
  7. [root@centos7 ~]$ lv # 使用tabl按键获取lv先关的命令
  8. lvchange lvdisplay lvmconf lvmdump lvmsadc lvremove lvs
  9. lvconvert lvextend lvmconfig lvmetad lvmsar lvrename lvscan
  10. lvcreate lvm lvmdiskscan lvmpolld lvreduce lvresize

上面的命令比较多,简单介绍几个常用的命令。

  • pv打头的:代表pv相关的命令
  • vg带头的:代表vg相关的命令
  • lv带头的: 代表lv相关的命令
  • create:创建相关
  • remove:移除相关
  • display:显示相关
  • import:导入 相关
  • export:导出相关
  • rename:重命名
  • vgchange:改变状态相关
  • extend:扩展相关
  • reduce:缩进相关

使用LVM

pv创建

pv作用:初始化磁盘和磁盘分区

在将磁盘或者磁盘分区用作物理卷(PV)之前,你需要对其进行初始化工作。

  1. [root@centos7 ~]$ pvcreate /dev/sdb1

注意:

  1. 不建议对整个磁盘做PV初始化工作。因为其他操作系统不能识别LVM元数据,导致我们认为磁盘是空闲的,重新设置分区覆盖原有数据
  2. 如果是分区需要调整分区的类型为LVM(代码为8e)

分区并设置分区类型

  1. [root@centos7 ~]$ fdisk -l
  2.  
  3. Disk /dev/sda: 214.7 GB, bytes, sectors
  4. Units = sectors of * = bytes
  5. Sector size (logical/physical): bytes / bytes
  6. I/O size (minimum/optimal): bytes / bytes
  7. Disk label type: dos
  8. Disk identifier: 0x000b0b8a
  9.  
  10. Device Boot Start End Blocks Id System
  11. /dev/sda1 * Linux
  12. /dev/sda2 Linux
  13. /dev/sda3 Linux
  14. /dev/sda4 Extended
  15. /dev/sda5 Linux
  16.  
  17. Disk /dev/sdb: 107.4 GB, bytes, sectors
  18. Units = sectors of * = bytes
  19. Sector size (logical/physical): bytes / bytes
  20. I/O size (minimum/optimal): bytes / bytes
  21. Disk label type: dos
  22. Disk identifier: 0x93d380cf
  23.  
  24. Device Boot Start End Blocks Id System
  25. /dev/sdb1 8e Linux LVM
  26. /dev/sdb2 8e Linux LVM
  27.  
  28. Disk /dev/sde: 21.5 GB, bytes, sectors
  29. Units = sectors of * = bytes
  30. Sector size (logical/physical): bytes / bytes
  31. I/O size (minimum/optimal): bytes / bytes
  32. Disk label type: dos
  33. Disk identifier: 0x73afb36f
  34.  
  35. Device Boot Start End Blocks Id System
  36. /dev/sde1 8e Linux LVM
  37. /dev/sde2 8e Linux LVM
  38.  
  39. Disk /dev/sdd: 21.5 GB, bytes, sectors
  40. Units = sectors of * = bytes
  41. Sector size (logical/physical): bytes / bytes
  42. I/O size (minimum/optimal): bytes / bytes
  43. Disk label type: dos
  44. Disk identifier: 0x7e0900d8
  45.  
  46. Device Boot Start End Blocks Id System
  47. /dev/sdd1 8e Linux LVM
  48. /dev/sdd2 8e Linux LVM
  49.  
  50. Disk /dev/sdc: 21.5 GB, bytes, sectors
  51. Units = sectors of * = bytes
  52. Sector size (logical/physical): bytes / bytes
  53. I/O size (minimum/optimal): bytes / bytes
  54. Disk label type: dos
  55. Disk identifier: 0xc56b90d8
  56.  
  57. Device Boot Start End Blocks Id System
  58. /dev/sdc1 8e Linux LVM
  59. /dev/sdc2 8e Linux LVM
  60.  
  61. Disk /dev/sdf: 21.5 GB, bytes, sectors
  62. Units = sectors of * = bytes
  63. Sector size (logical/physical): bytes / bytes
  64. I/O size (minimum/optimal): bytes / bytes
  65.  
  66. [root@centos7 ~]$ partprobe
  67. Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only.
  68. [root@centos7 ~]$ lsblk
  69. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  70. sda : 200G disk
  71. ├─sda1 : 1G part /boot
  72. ├─sda2 : 128G part
  73. ├─sda3 : .8G part /
  74. ├─sda4 : 512B part
  75. └─sda5 : .5G part /app
  76. sdb : 100G disk
  77. ├─sdb1 : 1G part
  78. └─sdb2 : 1G part
  79. sdc : 20G disk
  80. ├─sdc1 : 1G part
  81. └─sdc2 : 1G part
  82. sdd : 20G disk
  83. ├─sdd1 : 1G part
  84. └─sdd2 : 5G part
  85. sde : 20G disk
  86. ├─sde1 : 1G part
  87. └─sde2 : 2G part
  88. sdf : 20G disk
  89. sr0 : .1G rom /run/media/root/CentOS x86_64

上面我们在/dev/sd{b,c,d,e}这4个盘每个都有2个类型为lvm的盘。接下来使用pvcreat初始化为物理卷

  1. [root@centos7 ~]$ pvcreate /dev/sd{b1,b2,c1,c2,d1,d2,e1,e2} -y # 这里加入了-y选项,之前的盘有文件系统的。 我这里强制创建了
  2. Wiping xfs_external_log signature on /dev/sdb2.
  3. Wiping xfs_external_log signature on /dev/sdb2.
  4. Wiping xfs_external_log signature on /dev/sdb2.
  5. Wiping xfs_external_log signature on /dev/sdb2.
  6. Wiping xfs_external_log signature on /dev/sdb2.
  7. Wiping xfs_external_log signature on /dev/sdb2.
  8. Wiping xfs_external_log signature on /dev/sdb2.
  9. Wiping xfs_external_log signature on /dev/sdb2.
  10. Physical volume "/dev/sdb1" successfully created.
  11. Physical volume "/dev/sdb2" successfully created.
  12. Physical volume "/dev/sdc1" successfully created.
  13. Physical volume "/dev/sdc2" successfully created.
  14. Physical volume "/dev/sdd1" successfully created.
  15. Physical volume "/dev/sdd2" successfully created.
  16. Physical volume "/dev/sde1" successfully created.
  17. Physical volume "/dev/sde2" successfully created.

pv信息查看

  1. [root@centos7 ~]$ pvs # 详细信息可以使用pvdisplay查看
  2. PV VG Fmt Attr PSize PFree
  3. /dev/sdb1 vg_test_01 lvm2 a-- 1020.00m 1020.00m
  4. /dev/sdb2 lvm2 --- .00g .00g
  5. /dev/sdc1 vg_test_01 lvm2 a-- 1020.00m 1020.00m
  6. /dev/sdc2 lvm2 --- .00g .00g
  7. /dev/sdd1 vg_test_01 lvm2 a-- 1020.00m 1020.00m
  8. /dev/sdd2 lvm2 --- .00g .00g
  9. /dev/sde1 vg_test_01 lvm2 a-- 1020.00m 1020.00m
  10. /dev/sde2 lvm2 --- .00g .00g

vg创建

vg的创建是比较简单的。

  1. [root@centos7 ~]$ vgcreate vg_test_01 /dev/sd{b1,c1,d1,e1} # 上面我们创建了8个pv,这里我们使用4个1的设备去创建vg,创建后默认vg是激活状态的
  2. Volume group "vg_test_01" successfully created

vg信息的查看

  1. [root@centos7 ~]$ vgs # 查看简短的信息
  2. VG #PV #LV #SN Attr VSize VFree
  3. vg_test_01 wz--n- .98g .98g
  4. [root@centos7 ~]$ vgdisplay # 查看详细的信息
  5. --- Volume group ---
  6. VG Name vg_test_01 # vg的名字
  7. System ID
  8. Format lvm2 # lvm格式, 这里是lvm2的
  9. Metadata Areas
  10. Metadata Sequence No
  11. VG Access read/write
  12. VG Status resizable
  13. MAX LV
  14. Cur LV
  15. Open LV
  16. Max PV
  17. Cur PV
  18. Act PV
  19. VG Size 3.98 GiB # 这是我们4个pv的总大小
  20. PE Size 4.00 MiB # pe的大小
  21. Total PE
  22. Alloc PE / Size / # 分配的大小,这里我们还没有创建lv,所以为0
  23. Free PE / Size / 3.98 GiB # 分配后剩余的空间,第一个数是剩余的个数,第二个数是剩余的空间大小,2个都是剩余的只是单位表示不一样而已
  24. VG UUID Y5NjjP-e3Aq-3u6E-gw6P-fLyy-Y5pN-ryyN9R # vg设备的uuid

vg的激活

  1. [root@centos7 ~]$ vgchange -a y vg_test_01 # 我们上面就是激活状态的,如果我们重启系统,或者vgchange -y n命令关闭了,就需要这个命令启动下
  2. logical volume(s) in volume group "vg_test_01" now active

vg的移除

  1. [root@centos7 ~]$ vgchange -a n vg_test_01 # 要想移除vg,需要先关闭vg才能移除,这里先关闭
  2. logical volume(s) in volume group "vg_test_01" now active
  3. [root@centos7 ~]$ vgremove vg_test_01 # 移除vg,

vg的添加成员

  1. [root@centos7 ~]$ vgcreate vg_test_01 /dev/sd{b1,c1,d1,e1} # 上面我把vg删了,这里重新添加进来
  2. Volume group "vg_test_01" successfully created
  3. [root@centos7 ~]$ vgextend vg_test_01 /dev/sdb2 # 添加一个pv2到vg中来
  4. Volume group "vg_test_01" successfully extended

vg的删除成员

这个操作需要使用vgdisplay查看vg的使用情况和删除的pv上没有数据。如果有使用pvmove迁移完毕数据才能移除。

  1. [root@centos7 ~]$ vgreduce vg_test_01 /dev/sdb2
  2. Removed "/dev/sdb2" from volume group "vg_test_01"

lv的创建

  1. [root@centos7 ~]$ vgdisplay # lv逻辑卷创建之前, 需要查看下vg信息
  2. --- Volume group ---
  3. VG Name vg_test_01
  4. System ID
  5. Format lvm2
  6. Metadata Areas
  7. Metadata Sequence No
  8. VG Access read/write
  9. VG Status resizable
  10. MAX LV
  11. Cur LV
  12. Open LV
  13. Max PV
  14. Cur PV
  15. Act PV
  16. VG Size 3.98 GiB
  17. PE Size 4.00 MiB
  18. Total PE
  19. Alloc PE / Size /
  20. Free PE / Size / 3.98 GiB
  21. VG UUID sZwHea-LabA-SJaV-Wz40-qFp3-Um2w-pvmJAY
  22.  
  23. [root@centos7 ~]$ lvcreate -L 2G -n lv_test_01 vg_test_01 # 我们的vg是近4G的,我这里创建一个2G的lv,之前磁盘使用了文件系统慈爱有如下警告。输入y即可。
  24. WARNING: linux_raid_member signature detected on /dev/vg_test_01/lv_test_01 at offset . Wipe it? [y/n]: y
  25. Wiping linux_raid_member signature on /dev/vg_test_01/lv_test_01.
  26. WARNING: ext4 signature detected on /dev/vg_test_01/lv_test_01 at offset . Wipe it? [y/n]: y
  27. Wiping ext4 signature on /dev/vg_test_01/lv_test_01.
  28. Logical volume "lv_test_01" created.

lv的移除

  1. [root@centos7 ~]$ lvremove /dev/vg_test_01/lv_test_01
    # 这个移除我们上面创建lv_test_01这个逻辑卷, 下面提示这个是活动的逻辑卷,输入y就可以了
  2. Do you really want to remove active logical volume vg_test_01/lv_test_01? [y/n]: y
  3. Logical volume "lv_test_01" successfully removed

注意: 如果这个lv被挂载了。 请先umount

挂载文件系统

  1. [root@centos7 ~]$ lvcreate -L 2G -n lv_test_01 vg_test_01 # 上面我们删除了lv,这里需要创建出来
  2. Logical volume "lv_test_01" created.
  3. [root@centos7 ~]$ mkfs.ext4 /dev/vg_test_01/lv_test_01 # 这里我使用ext4 文件系统了。centos7默认使用的文件系统是xfs,但是xfs不支持缩减的
  4.  
  5. [root@centos7 ~]$ mkdir /mnt/test_01 # 创建挂载点目录
  6. [root@centos7 ~]$ mount /dev/vg_test_01/lv_test_01 /mnt/test_01/ # 挂载逻辑卷

扩展LVM

上面我们的测试是vg是4G,我们的创建的lv是2G的,我们想给创建的lv扩展1G空间。

  1. [root@centos7 ~]$ lvextend -L +1G /dev/vg_test_01/lv_test_01 # 我们扩大1G, +1G表示在原有基础上扩大1G,我们这里是有vg是有空间的,没有的话就需要创建pv,扩大vg在做
  2. Size of logical volume vg_test_01/lv_test_01 changed from 2.00 GiB ( extents) to 3.00 GiB ( extents).
  3. Logical volume vg_test_01/lv_test_01 successfully resized.
  4. [root@centos7 ~]$ df -h # 上面的命令提示lv已经到3G了, 但是使用df-h 查看还是2g
  5. Filesystem Size Used Avail Use% Mounted on
  6. /dev/sda3 48G .9G 41G % /
  7. devtmpfs 979M .0K 979M % /dev
  8. tmpfs 993M 993M % /dev/shm
  9. tmpfs 993M 22M 971M % /run
  10. tmpfs 993M 993M % /sys/fs/cgroup
  11. /dev/sda1 976M 130M 780M % /boot
  12. /dev/sda5 20G 307M 18G % /app
  13. tmpfs 199M 32K 199M % /run/user/
  14. /dev/sr0 .1G .1G % /run/media/root/CentOS x86_64
  15. /dev/mapper/vg_test_01-lv_test_01 .0G 33M .0G % /mnt/test_01
  16. [root@centos7 ~]$ resize2fs /dev/mapper/vg_test_01-lv_test_01 # 需要增长下文件系统的,让文件系统和lv大小匹配下
  17. meta-data=/dev/mapper/vg_test_01-lv_test_01 isize= agcount=, agsize= blks
  18. = sectsz= attr=, projid32bit=
  19. = crc= finobt= spinodes=
  20. data = bsize= blocks=, imaxpct=
  21. = sunit= swidth= blks
  22. naming =version bsize= ascii-ci= ftype=
  23. log =internal bsize= blocks=, version=
  24. = sectsz= sunit= blks, lazy-count=
  25. realtime =none extsz= blocks=, rtextents=
  26. data blocks changed from to
  27. [root@centos7 ~]$ df -h # 再次查看就是一致的了
  28. Filesystem Size Used Avail Use% Mounted on
  29. /dev/sda3 48G .9G 41G % /
  30. devtmpfs 979M .0K 979M % /dev
  31. tmpfs 993M 993M % /dev/shm
  32. tmpfs 993M 22M 971M % /run
  33. tmpfs 993M 993M % /sys/fs/cgroup
  34. /dev/sda1 976M 130M 780M % /boot
  35. /dev/sda5 20G 307M 18G % /app
  36. tmpfs 199M 32K 199M % /run/user/
  37. /dev/sr0 .1G .1G % /run/media/root/CentOS x86_64
  38. /dev/mapper/vg_test_01-lv_test_01 .0G 33M .0G % /mnt/test_01

注意:

  1.    ext系列可以使用resieze2fs去调整。其他的文件系统可以参考http://tldp.org/HOWTO/LVM-HOWTO/extendlv.html
  2.    lvextentd 有个-r选项,自动去调整大小,匹配lv和文件系统大小的。

缩减LVM

逻辑卷的大小可以减小,也可以增加。 但是,在缩小卷本身之前,请记住缩小文件系统的大小或存在于卷中的任何文件是非常重要的,否则可能会丢失数据。

注意: xfs,jsf文件系统是没法缩减lvm的,因为这2个文件系统没法缩减文件系统大小的。参考http://tldp.org/HOWTO/LVM-HOWTO/reducelv.html

主要步骤:

  1.   检查空间使用情况和分析
  2.   umount设备
  3.   缩减文件系统大小
  4.   缩减lv大小
  5.   恢复挂载设备

上面我们的逻辑卷是3G的大小,在缩减之前我们需要确保缩减的空间不能影响数据的存放的。

检查工作

  1. [root@centos7 ~]$ cp -a /etc/ /mnt/test_01/ # 我这里模拟下,只能目录有文件的情况
  2. [root@centos7 ~]$ du -sh /mnt/test_01/ # 查看下大小
  3. 42M /mnt/test_01/
  4. [root@centos7 ~]$ df -h # 查看逻辑卷分区利用情况 ,数据才存放76M,我们的逻辑卷都3G呢, 如果我们想缩减1G,完全没有问题的。
  5. Filesystem Size Used Avail Use% Mounted on
  6. /dev/sda3 48G .9G 41G % /
  7. devtmpfs 979M .0K 979M % /dev
  8. tmpfs 993M 993M % /dev/shm
  9. tmpfs 993M 22M 971M % /run
  10. tmpfs 993M 993M % /sys/fs/cgroup
  11. /dev/sda1 976M 130M 780M % /boot
  12. /dev/sda5 20G 307M 18G % /app
  13. tmpfs 199M 32K 199M % /run/user/
  14. /dev/sr0 .1G .1G % /run/media/root/CentOS x86_64
  15. /dev/mapper/vg_test_01-lv_test_01 .0G 76M .0G % /mnt/test_01

缩减空间

  1. [root@centos7 ~]$ umount /dev/vg_test_01/lv_test_01 # 取消挂载
  2. [root@centos7 ~]$ resize2fs /dev/vg_test_01/lv_test_01 1G # resieze2fs定义下文件系统大小
  3. resize2fs 1.42. (-Dec-)
  4. Please run 'e2fsck -f /dev/vg_test_01/lv_test_01' first.
  5.  
  6. [root@centos7 ~]$ e2fsck -f /dev/vg_test_01/lv_test_01 #上面的命令要检查,那就检查下
  7. e2fsck 1.42. (-Dec-)
  8. Pass : Checking inodes, blocks, and sizes
  9. Pass : Checking directory structure
  10. Pass : Checking directory connectivity
  11. Pass : Checking reference counts
  12. Pass : Checking group summary information
  13. /dev/vg_test_01/lv_test_01: / files (0.1% non-contiguous), / blocks
  14. [root@centos7 ~]$ resize2fs /dev/vg_test_01/lv_test_01 1G # 检查完,那就执行缩减文件系统大小
  15. resize2fs 1.42. (-Dec-)
  16. Resizing the filesystem on /dev/vg_test_01/lv_test_01 to (4k) blocks.
  17. The filesystem on /dev/vg_test_01/lv_test_01 is now blocks long.
  18. [root@centos7 ~]$ lvreduce -L 1G /dev/vg_test_01/lv_test_01 # 缩减下逻辑卷到1G,这里有提示,缩减可能会丢失数据,输入y即可
  19. WARNING: Reducing active logical volume to 1.00 GiB.
  20. THIS MAY DESTROY YOUR DATA (filesystem etc.)
  21. Do you really want to reduce vg_test_01/lv_test_01? [y/n]: yG
  22. Size of logical volume vg_test_01/lv_test_01 changed from 3.00 GiB ( extents) to 1.00 GiB ( extents).
  23. Logical volume vg_test_01/lv_test_01 successfully resized.
  24. [root@centos7 ~]$ mount /dev/vg_test_01/lv_test_01 /mnt/test_01/ # 恢复挂载
  25. [root@centos7 ~]$ ll /mnt/test_01/
  26. total
  27. drwxr-xr-x. root root Dec : etc
  28. drwx------. root root Dec : lost+found
  29. [root@centos7 ~]$ df -h # 检查下
  30. Filesystem Size Used Avail Use% Mounted on
  31. /dev/sda3 48G .9G 41G % /
  32. devtmpfs 979M .0K 979M % /dev
  33. tmpfs 993M 993M % /dev/shm
  34. tmpfs 993M 22M 971M % /run
  35. tmpfs 993M 993M % /sys/fs/cgroup
  36. /dev/sda1 976M 130M 780M % /boot
  37. /dev/sda5 20G 307M 18G % /app
  38. tmpfs 199M 32K 199M % /run/user/
  39. /dev/sr0 .1G .1G % /run/media/root/CentOS x86_64
  40. /dev/mapper/vg_test_01-lv_test_01 944M 52M 825M % /mnt/test_01

迁移LVM的vg

移动vg到另外一个机器上

主要步骤:

  1.   检查和分析
  2. 一些预处理工作
  3. umount文件系统
  4.   设置卷组非活动
  5.   导出卷组
  6.   取出设备,插入到新机器
  7.   导入卷组
  8.   激活卷组
  9.   挂载文件系统

检查分析

  1. [root@centos7 ~]$ vgs
  2. VG #PV #LV #SN Attr VSize VFree
  3. vg_test_01 wz--n- .98g .98g
  4. [root@centos7 ~]$ pvs
  5. l PV VG Fmt Attr PSize PFree
  6. /dev/sdb1 vg_test_01 lvm2 a-- 1020.00m
  7. /dev/sdb2 lvm2 --- .00g .00g
  8. /dev/sdc1 vg_test_01 lvm2 a-- 1020.00m 1016.00m
  9. /dev/sdc2 lvm2 --- .00g .00g
  10. /dev/sdd1 vg_test_01 lvm2 a-- 1020.00m 1020.00m
  11. /dev/sdd2 lvm2 --- .00g .00g
  12. /dev/sde1 vg_test_01 lvm2 a-- 1020.00m 1020.00m
  13. /dev/sde2 lvm2 --- .00g .00g
  14. [root@centos7 ~]$ lvs
  15. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
  16. lv_test_01 vg_test_01 -wi-ao---- .00g

我们使用lvs,vgs,pvs分别查看信息。发现我们vg是3G的大小。lv是1G的大小。但是vg的pv来自不同的磁盘的。我们要迁移vg。不能把包含pv都迁移过去把。 那这一下子需要4个盘的。

我们把pv数据迁移下,到时候摘盘的时候只那一个就可以多好。 发现/dev/sdd2是一个5G的盘。 打算使用/dev/sdd这个盘作为迁移盘来迁移数据。

一些预处理工作

  1. [root@centos7 ~]$ umount /mnt/test_01/ # 去除挂载
  1. [root@centos7 ~]$ vgchange -an vg_test_01 # 设置vg不激活
  2. 0 logical volume(s) in volume group "vg_test_01" now active
  1. [root@centos7 ~]$ pvmove /dev/sd{b1,c1,e1} # 迁移pv数据
  2. /dev/sdb1: Moved: 0.00%
  3. /dev/sdb1: Moved: 100.00%
  4. [root@centos7 ~]$ pvs # 确保pv都是空的,没有数据存放了。
  5. PV VG Fmt Attr PSize PFree
  6. /dev/sdb1 vg_test_01 lvm2 a-- 1020.00m 1020.00m
  7. /dev/sdb2 lvm2 --- .00g .00g
  8. /dev/sdc1 vg_test_01 lvm2 a-- 1020.00m 1016.00m
  9. /dev/sdc2 lvm2 --- .00g .00g
  10. /dev/sdd1 vg_test_01 lvm2 a-- 1020.00m
  11. /dev/sdd2 vg_test_01 lvm2 a-- <.00g <.00g
  12. /dev/sde1 vg_test_01 lvm2 a-- 1020.00m 1020.00m
  13. /dev/sde2 lvm2 --- .00g .00g
  14.  
  15. [root@centos7 ~]$ vgreduce vg_test_01 /dev/sd{b1,c1,e1} # 缩减vg 去除b1,c1,e1
  16. Removed "/dev/sdb1" from volume group "vg_test_01"
  17. Removed "/dev/sdc1" from volume group "vg_test_01"
  18. Removed "/dev/sde1" from volume group "vg_test_01"
  19. [root@centos7 ~]$ pvremove /dev/sd{b1,c1,e1} # 移除pv,这里提示,
  20. Lables on physical volume "/dev/sdb1" sucdessfully wiped.
  21. Labels on physical volume "/dev/sdc1" successfully wiped.
  22. Labels on physical volume "/dev/sde1" successfully wiped.

导出vg

  1. [root@centos7 ~]$ vgdisplay # 导出前的确认
  2. --- Volume group ---
  3. VG Name vg_test_01
  4. System ID
  5. Format lvm2
  6. Metadata Areas
  7. Metadata Sequence No
  8. VG Access read/write
  9. VG Status resizable
  10. MAX LV
  11. Cur LV
  12. Open LV
  13. Max PV
  14. Cur PV
  15. Act PV
  16. VG Size 5.99 GiB
  17. PE Size 4.00 MiB
  18. Total PE
  19. Alloc PE / Size / 1.00 GiB
  20. Free PE / Size / 4.99 GiB
  21. VG UUID sZwHea-LabA-SJaV-Wz40-qFp3-Um2w-pvmJAY
  22.  
  23. [root@centos7 ~]$ vgexport vg_test_01 # 导出vg发现有激活的设备,需要关闭
  24. Volume group "vg_test_01" has active logical volumes
  25. [root@centos7 ~]$ vgchange -an vg_test_01 # 设置为非激活
  26.    logical volume(s) in volume group "vg_test_01" now active
  27. [root@centos7 ~]$ vgexport vg_test_01 # 导出, 要看到成功导出才可以,这里注意了, 如果这个vg名字和目标机器有重名的话, 这里使用rename改下在导出
  28.   Volume group "vg_test_01" successfully exported
  29.  
  30. [root@centos7 ~]$ sync # 多执行几次sync。 防止内存和磁盘没有同步的问题。
  31. [root@centos7 ~]$ sync
  32. [root@centos7 ~]$ sync
  33. [root@centos7 ~]$ sync

我这里把这个磁盘取出来安装到另外一个机器上面。下面的一部分操作在新机器上执行。注意啦。

识别硬件

  1. [root@centos6 ~]$ /git/Bash/other/scan_scsi_device.sh # 执行下扫描硬件脚本,我自己写的,后面把这个bash脚本贴出来
  2. start scan
  3. /sys/devices/pci0000:/::07.1/host0/scsi_host/host0/scan scan finished.
  4. /sys/devices/pci0000:/::07.1/host1/scsi_host/host1/scan scan finished.
  5. /sys/devices/pci0000:/::10.0/host2/scsi_host/host2/scan scan finished.
  6. end scan
  7. please use lsblk check
  8. [root@centos6 ~]$ lsblk # 使用lsblk查看,可以发现,识别出来就是那个/dev/sdc
  9. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  10. sr0 : .7G rom /media/CentOS_6.9_Final
  11. sr1 : .1G rom /media/CentOS x86_64
  12. sda : 200G disk
  13. ├─sda1 : 1G part /boot
  14. ├─sda2 : .8G part /
  15. ├─sda3 : .5G part /app
  16. ├─sda5 : 2G part [SWAP]
  17. ├─sda4 : 2M part
  18. └─sda6 : 1G part
  19. sdb : 100G disk
  20. ├─sdb1 : 1G part
  21. ├─sdb2 : 20G part
  22. ├─sdb3 : 1G part
  23. ├─sdb4 : 1K part
  24. ├─sdb5 : 20G part
  25. ├─sdb6 : 1G part
  26. └─sdb7 : 1G part
  27. sr2 : .7G rom /media/CentOS_6.9_Final_
  28. sr3 : 2G rom /media/CentOS_6.9_Final__
  29. sdc : 20G disk
  30. ├─sdc1 : 1G part
  31. └─sdc2 : 5G part

脚本内容如下

  1. [root@centos6 ~]$ cat /git/Bash/other/scan_scsi_device.sh
  2. #!/bin/bash
  3. #================================================
  4. #FileName :scan_scsi_device
  5. #Author :zhaojiedi
  6. #Description:如果你添加了一个新的硬盘设备, 但是没有被系统识别,使用如下脚本可以识别出来,
  7. #DateTime :-- ::
  8. #Version :V1.
  9. #Other :最新版本建议从这里获取https://github.com/zhaojiedi1992/Bash
  10. #================================================
  11. #!/bin/bash
  12. echo "start scan"
  13. for i in `find /sys/devices/ -name scan`; do
  14. echo "- - -" > $i
  15. echo $i scan finished.
  16. done
  17. echo "end scan"
  18. echo -e "\033[32mplease use lsblk check\033[0m"

导入并挂载

  1. [root@centos6 ~]$ vgscan # vg扫描
  2. Reading all physical volumes. This may take a while...
  3. Found exported volume group "vg_test_01" using metadata type lvm2
  4. [root@centos6 ~]$ pvscan # pv扫描
  5. PV /dev/sdc1 is in exported VG vg_test_01 [1020.00 MiB / free]
  6. PV /dev/sdc2 is in exported VG vg_test_01 [5.00 GiB / 4.99 GiB free]
  7. Total: [5.99 GiB] / in use: [5.99 GiB] / in no VG: [ ]
  8. [root@centos6 ~]$ vgimport vg_test_01 # 确认无错误的就导入。
  9. Volume group "vg_test_01" successfully imported
  10. [root@centos6 ~]$ vgs # 查看下vg信息
  11. VG #PV #LV #SN Attr VSize VFree
  12. vg_test_01 wz--n- .99g .99g
  13. [root@centos6 ~]$ vgchange -ay vg_test_01 # 激活vg
  14. logical volume(s) in volume group "vg_test_01" now active
  15. [root@centos6 ~]$ mkdir /mnt/new_test # 创建挂载点
  16. [root@centos6 ~]$ mount /dev/vg_test_01/lv_test_01 /mnt/new_test/ # 挂载
  17. [root@centos6 ~]$ du -sh /mnt/new_test/ # 确认文件没有丢失
  18. 45M /mnt/new_test/

快照LVM

分析下当前环境,我把vg移动到centos6上了。一下操作在centos6上执行的。

  1. [root@centos6 ~]$ vgs # 查看下vg信息, 一共6G,还有5G呢。
  2. VG #PV #LV #SN Attr VSize VFree
  3. vg_test_01 wz--n- .99g .99g
  4. [root@centos6 ~]$ pvs # 有2个pv
  5. PV VG Fmt Attr PSize PFree
  6. /dev/sdc1 vg_test_01 lvm2 a--u 1020.00m
  7. /dev/sdc2 vg_test_01 lvm2 a--u .00g .99g

我们刚才给/mnt/new_test目录挂载逻辑卷vg_test_01。假如我们的/mnt/new_test的内容一直在变化。想去备份数据就需要快照卷了。

创建快照

  1. [root@centos6 etc]$ lvcreate -L 500M -s -p r -n vg_test_01_snapshot /dev/vg_test_01/lv_test_01 # -L指定大小, -s 表示创建快照而不是普通逻辑卷,-p r 指定权限为只读的, -n指定名字
  2. Logical volume "vg_test_01_snapshot" created.

注意: 如果使用的xfs文件系统, 挂载的时候需要加入nouuid,ro选项,且创建快照的时候不能指定-p r选项。具体参考:http://tldp.org/HOWTO/LVM-HOWTO/snapshots_backup.html

模拟一些数据修改操作

  1. [root@centos6 etc]$ echo "zhaojiedi1992" >>/mnt/new_test/zhaojiedi1992.txt # 制作一些修改情况
  2. [root@centos6 etc]$ vim /mnt/new_test/etc/motd

监控快照情况

  1. [root@centos6 ~]$ lvdisplay /dev/vg_test_01/vg_test_01_snapshot
  2. --- Logical volume ---
  3. LV Path /dev/vg_test_01/vg_test_01_snapshot
  4. LV Name vg_test_01_snapshot
  5. VG Name vg_test_01
  6. LV UUID pZ8x2u-lqPA-uLef-P816-dS8V-wZ0y-PKWWwL
  7. LV Write Access read only #只读的
  8. LV Creation host, time centos6.magedu.com, -- :: +
  9. LV snapshot status active destination for lv_test_01 # 这是lv_test_01的快照
  10. LV Status available
  11. # open
  12. LV Size 1.00 GiB # 快照的总大小
  13. Current LE
  14. COW-table size 500.00 MiB
  15. COW-table LE
  16. Allocated to snapshot 0.01% # 这个地方可以看当前快照占用情况。
  17. Snapshot chunk size 4.00 KiB
  18. Segments
  19. Allocation inherit
  20. Read ahead sectors auto
  21. - currently set to
  22. Block device :

挂载快照并备份

  1. [root@centos6 etc]$ mkdir /mnt/test_bak # 创建一个快照挂载目录
  2. [root@centos6 etc]$ mount /dev/vg_test_01/vg_test_01_snapshot /mnt/test_bak/ # 挂载,因为我们上面创建快照的时候指定-pr只读的
  3. mount: block device /dev/mapper/vg_test_01-vg_test_01_snapshot is write-protected, mounting read-only
  4. [root@centos6 etc]$ cat /mnt/test_bak/ # 快照后的zhaojiedi1992.txt没有的。
  5. etc/ lost+found/
  6. [root@centos6 etc]$ cat /mnt/test_bak/etc/motd # 这个地方的文件也是快照前的样子。没有问题
  7. Welcom you this system
  8. [root@centos6 etc]$ tar -jcvf /root/test.tar.bz --acl --selinux --xattrs /mnt/test_bak/ # 备份数据赶紧的

移除快照

  1. [root@centos6 etc]$ umount /mnt/test_bak/ # 取消挂载
  2. [root@centos6 etc]$ lvremove /dev/vg_test_01/vg_test_01_snapshot # 移除了快照卷
  3. Do you really want to remove active logical volume vg_test_01_snapshot? [y/n]: y
  4. Logical volume "vg_test_01_snapshot" successfully removed

参考资料

redhat : https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/installation_guide/create_lvm-x86

suse : https://www.suse.com/documentation/sles11/stor_admin/data/lvm.html

lvm how to : http://tldp.org/HOWTO/LVM-HOWTO/index.html

linux磁盘管理系列-LVM的使用的更多相关文章

  1. Linux磁盘管理系列 — LVM和RAID

    一.逻辑卷管理器(LVM) 1.什么是逻辑卷管理器(LVM) LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对卷进行操作的抽象层. LVM是建立在硬盘 ...

  2. linux磁盘管理系列三:LVM的使用

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  3. linux磁盘管理系列-软RAID的实现

    1 什么是RAID RAID全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高. R ...

  4. linux磁盘管理系列二:软RAID的实现

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  5. linux磁盘管理系列一:磁盘配额管理

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  6. 【转载】Linux磁盘管理:LVM逻辑卷管理

    Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理 这篇随笔将详细讲解Linux磁盘管理机制中的LVM逻辑卷的基本概念以及LVM的工作原理!!! 一. ...

  7. Linux学习之CentOS(二十六)--Linux磁盘管理:LVM逻辑卷的创建及使用

    在上一篇随笔里面 Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理,详细的讲解了Linux的动态磁盘管理LVM逻辑卷的基本概念以及LVM的工作原理, ...

  8. Linux磁盘管理之LVM

    一.LVM介绍 在我们管理Linux磁盘的时候,通常会遇到这么一种情况.在最初规划Linux的磁盘的时候,我们给某个分区划分了一定量的磁盘空间,使用一段时间后,发现我们规划的磁盘空间不足了,这个时候怎 ...

  9. Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理

    一.传统的磁盘管理 其实在Linux操作系统中,我们的磁盘管理机制和windows上的差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分区,然后再将该 ...

随机推荐

  1. LINUX 笔记-MOUNT

    mount [-t vfstype] [-o options] device dir -o options: 主要用来描述设备或档案的挂接方式 1)loop:用来把一个文件当成硬盘分区挂上系统 2)r ...

  2. LeetCode 31. Next Permutation (下一个排列)

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  3. php 不能取得session值的一个解决方法

    1.确认下<?php session_start(); ?> 这句话是不是在<HTML> 标志之前.  不在的话,请放到<HTML> 标志之前. 2.如果上面操作后 ...

  4. myeclipse10破解失败,正解

    此文图借用他人的,很是经典 第一步:输入任意用户名 第二步:点击Systemid... 按钮,自动生成本机器的systemid.ps:确定本机的systemid,如果和破解器生成不一致,需要copy本 ...

  5. uploadify 配置后,页面显示无效果

    uploadify使用的是Flash版本 谷歌浏览器:默认没有开启Flash,进行如下图设置即可

  6. 路由知识 静态路由 rip eigrp ospf

    第1章 路由选择原理 1.1 几个概念 1.1.1 被动路由协议 用来在路由之间传递用户信息 1.1.2 主动路由协议 用于维护路由器的路由表 R2#show ip route Codes: C - ...

  7. 网络基础二 tcp/ip协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...

  8. jsoup从表单中取数据

    表单的格式如下 <td>user</td> <td>cc</td> </tr> <tr> <td>pass</ ...

  9. Android 开发笔记___SD卡文件操作

    package com.example.alimjan.hello_world.Utils; import android.graphics.Bitmap; import android.graphi ...

  10. Linux修改时区的正确方法

    CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后localtime以及变成了一个链接文件 [root@centos7 ~]# ll /etc/localti ...