zoukankan      html  css  js  c++  java
  • LVM卷管理

    一、LVM是做什么的

    LVM ( Logical Volume Manager ,逻辑卷管理器)LVM 是建立在磁盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性。LVM 可以对磁盘分区按照组的方式进行命名、管理和分配。LVM 最早源于IBM 的AIX 系统

    LVM 术语:
    1. Physical Volume(PV)
    实际分区需要调整System ID 成为LVM 表示(8e) ,然后经过pvcreate 命令将他转为LVM 最低层的PV, 然后才能使用磁盘。

    2. Volume Group(VG)
    将PV 整合成为一起即为VG

    3. Physical Extent(PE)
    LVM 预设使用4MB 的PE 区块,每个LV 最多允许有65534 个PE ,即256GB 。PE 属于LVM 最小寻址单元(PE单位的大小可以在划分创建vg时定义)

    4. Logical Volume(LV)
    VG 将被分割为若干LV , LV 的大小受到PE 的限制,大小不能超过PE大小*PE数。

    5. Logical Extent(LE)

    LE等于PE

    我们现在用的LVM是VERSION2版本 ,VERSION1就不讨论了。

    二、LVM的操作

    1、至少两个分区或磁盘
    2、创建pv
    pvcreate /dev/sd{b1,c} 创建pv
    pvs 查看当前创建好的pv
    pvdisplay 显示pv的详细信息,比pvs详细
    3、创建卷组
    vgcreate -s 16M vg0(卷组名) /dev/sd{b1,c} #-s 指定PE大小[kMGT] vg0 卷组名(没有则创建) /dev/sd{b1,c} 指定的pv
    pvdisplay 查看现在pv的详细信息
    vgdisplay 查看卷组的详细信息 (vg也有vgs和pvs类似)
    vgchange -an vg0 禁用vg (现在其实没有用处,因为,还没有划分逻辑卷)
    vgchange -ay vg0 启用vg
    4、创建逻辑卷
    lvcreate -n lv0 -L (16G) -l (PE个数) vg0 #-l 和 -L 连个2选一,两种分配单位 -n表示指定lv的名字 -l 后面也可以这样玩儿 : -l +100%FREE 表示所有剩余空间
    lvdisplay 查看逻辑卷的详细信息,当然也有vgs
    5、扩展vg
    pvcreate /dev/sdc1 先创建新的pv
    vgextend vg0 /dev/sdc1 将sdc1添加进vg0中
    6、扩展lv
    lvextend -L 24G|+24G -l +320|1599 +100%FREE /dev/vg0/lv0 # 和lvcreate 的参数类似, -L 24G|+24G 24G表示扩展到24G ,+24G表示增加24G的空间 ,-l同理
    7、扩展lv的文件系统
    resize2fs /dev/vg0/lv0 #也可以在lvextend的时候使用-r选项,在扩展完之后,同时扩展文件系统

    8、有时候空间剩余,可以移除pv,可以使用pe迁移命令
    pvmove /dev/sdc1 但是需要注意一个问题,那就是,vg的剩余可用空间小于要迁移的pv空间,那么将无法迁移pe
    vgreduce vg0 /dev/sdc1 将该pv从卷组中删除
    pvremove /dev/sdc1 清除pv标签

    9、迁移LV到新主机
    vgrename vg0 vg100 将vg0 改为vg100 ,相对的PV对应的vg也就改了
    lvrename /dev/vg100/lv2 lv100
    umount lv 挂载点
    vgchange -an 禁用vg
    vgexport vg100 将vg100设置成导出状态
    vgdisplay 查看vgstat
    pvdisplay 查看pvstat
    拔出硬盘
    插入硬盘 ,这是系统扫描,可以查找到导出状态的pv
    vgimport /dev/新磁盘
    vg -ay /dev/

    10 LV的快照
    原理:快照内只保存修改过的数据,且为创建快照后最早未改变时的数据
    快照,实际也是一个逻辑卷
    lvcreate -n lv0-snapshot -L 1G -s -p r /dev/vg0/lv0 # -L: 指定大小 -s:表示这是一个快照 -p r :表示只读,防止误修改    /dev/vg0/lv0: 表明对谁做快照
    ##当使用 “-p r ”选项时ext4系统支持直接将快照挂载到目录上,而xfs文件系统则需要在挂载时指定 两个特殊选项  –nouuid –norecovery

    还原数据:
    第一步,先取消挂载
    umount /mnt/lv0
    第二部,还原
    lvconvert –merge /dev/vg0/lv0-snapshot
    第三部,挂载回去
    mount /dev/vg0/lv0 /mnt/lv0

    三、LVM实验

    实验1:创建PV、VG、LV

    1、创建PV

    1. [root@joker-7-01 ~]# pvcreate /dev/sdc
    2. Physical volume "/dev/sdc" successfully created.
    3. [root@joker-7-01 ~]# pvcreate /dev/sdd
    4. Physical volume "/dev/sdd" successfully created.
    5. [root@joker-7-01 ~]# pvcreate /dev/sde
    6. Physical volume "/dev/sde" successfully created.
    7. [root@joker-7-01 ~]# pvcreate /dev/sdf
    8. Physical volume "/dev/sdf" successfully created.

    使用4块磁盘创建pv成功。现在我们查看一下pv信息

    1. [root@joker-7-01 ~]# pvs
    2. PV VG Fmt Attr PSize PFree
    3. /dev/sda2 centos_joker-7-01 lvm2 a-- 72.00g 4.00m
    4. /dev/sdc lvm2 --- 5.00g 5.00g
    5. /dev/sdd lvm2 --- 5.00g 5.00g
    6. /dev/sde lvm2 --- 5.00g 5.00g
    7. /dev/sdf lvm2 --- 5.00g 5.00g
    8. [root@joker-7-01 ~]# pvdisplay
    9. --- Physical volume ---
    10. PV Name /dev/sda2
    11. VG Name centos_joker-7-01
    12. PV Size <72.01 GiB / not usable 4.00 MiB
    13. Allocatable yes
    14. PE Size 4.00 MiB
    15. Total PE 18433
    16. Free PE 1
    17. Allocated PE 18432
    18. PV UUID MJg0Bw-yPYJ-LXUA-iznM-Lq5v-9jC0-VujSGa
    19. "/dev/sdf" is a new physical volume of "5.00 GiB"
    20. --- NEW Physical volume ---
    21. PV Name /dev/sdf
    22. VG Name
    23. PV Size 5.00 GiB
    24. Allocatable NO
    25. PE Size 0
    26. Total PE 0
    27. Free PE 0
    28. Allocated PE 0
    29. PV UUID XaW65c-FZOz-pre2-qQD2-LrEM-7HBg-UcQE2c
    30. "/dev/sdd" is a new physical volume of "5.00 GiB"
    31. --- NEW Physical volume ---
    32. PV Name /dev/sdd
    33. VG Name
    34. PV Size 5.00 GiB
    35. Allocatable NO
    36. PE Size 0
    37. Total PE 0
    38. Free PE 0
    39. Allocated PE 0
    40. PV UUID pS1YKM-F4hH-rAz7-gM33-VcZc-PPL2-9zaZeQ
    41. "/dev/sde" is a new physical volume of "5.00 GiB"
    42. --- NEW Physical volume ---
    43. PV Name /dev/sde
    44. VG Name
    45. PV Size 5.00 GiB
    46. Allocatable NO
    47. PE Size 0
    48. Total PE 0
    49. Free PE 0
    50. Allocated PE 0
    51. PV UUID JmDYTP-199p-ftcV-wqkV-m3jE-nHxz-inVOtN
    52. "/dev/sdc" is a new physical volume of "5.00 GiB"
    53. --- NEW Physical volume ---
    54. PV Name /dev/sdc
    55. VG Name
    56. PV Size 5.00 GiB
    57. Allocatable NO
    58. PE Size 0
    59. Total PE 0
    60. Free PE 0
    61. Allocated PE 0
    62. PV UUID iqKlpg-oA4Y-6e33-7EGl-wr7u-uAM1-ZeY5Ef

    由以上可以看出pvs只会显示简短的pv信息,而pvdisplay将会显示更多。pvdisplay中第一条pv信息是有关centos7系统的,这么我们暂时不关注,先看我们的实验。我们可以注意到,pvdisplay中PEsize的值是0,这是因为还没有按单位把pv划分给vg。

    2、创建VG

    1. [root@joker-7-01 ~]# vgs
    2. VG #PV #LV #SN Attr VSize VFree
    3. centos_joker-7-01 1 3 0 wz--n- 72.00g 4.00m
    4. vg_test 4 0 0 wz--n- <19.94g <19.94g
    5. [root@joker-7-01 ~]# vgdisplay vg_test
    6. --- Volume group ---
    7. VG Name vg_test
    8. System ID
    9. Format lvm2
    10. Metadata Areas 4
    11. Metadata Sequence No 1
    12. VG Access read/write
    13. VG Status resizable
    14. MAX LV 0
    15. Cur LV 0
    16. Open LV 0
    17. Max PV 0
    18. Cur PV 4
    19. Act PV 4
    20. VG Size <19.94 GiB
    21. PE Size 16.00 MiB
    22. Total PE 1276
    23. Alloc PE / Size 0 / 0
    24. Free PE / Size 1276 / <19.94 GiB
    25. VG UUID JmvDcD-ltUK-HTXF-3Aue-YBQj-tjgK-h0NTVF

    vgdisplay不加残水会显示所有的vg信息,我们就只显示刚才创建的vg信息就好了。

    我们再来看一下刚刚创建的pv的信息

    1. [root@joker-7-01 ~]# pvdisplay
    2. --- Physical volume ---
    3. PV Name /dev/sdc
    4. VG Name vg_test
    5. PV Size 5.00 GiB / not usable 16.00 MiB
    6. Allocatable yes
    7. PE Size 16.00 MiB
    8. Total PE 319
    9. Free PE 319
    10. Allocated PE 0
    11. PV UUID iqKlpg-oA4Y-6e33-7EGl-wr7u-uAM1-ZeY5Ef
    12. --- Physical volume ---
    13. PV Name /dev/sdd
    14. VG Name vg_test
    15. PV Size 5.00 GiB / not usable 16.00 MiB
    16. Allocatable yes
    17. PE Size 16.00 MiB
    18. Total PE 319
    19. Free PE 319
    20. Allocated PE 0
    21. PV UUID pS1YKM-F4hH-rAz7-gM33-VcZc-PPL2-9zaZeQ
    22. --- Physical volume ---
    23. PV Name /dev/sde
    24. VG Name vg_test
    25. PV Size 5.00 GiB / not usable 16.00 MiB
    26. Allocatable yes
    27. PE Size 16.00 MiB
    28. Total PE 319
    29. Free PE 319
    30. Allocated PE 0
    31. PV UUID JmDYTP-199p-ftcV-wqkV-m3jE-nHxz-inVOtN
    32. --- Physical volume ---
    33. PV Name /dev/sdf
    34. VG Name vg_test
    35. PV Size 5.00 GiB / not usable 16.00 MiB
    36. Allocatable yes
    37. PE Size 16.00 MiB
    38. Total PE 319
    39. Free PE 319
    40. Allocated PE 0
    41. PV UUID XaW65c-FZOz-pre2-qQD2-LrEM-7HBg-UcQE2c
    42. --- Physical volume ---
    43. PV Name /dev/sda2
    44. VG Name centos_joker-7-01
    45. PV Size <72.01 GiB / not usable 4.00 MiB
    46. Allocatable yes
    47. PE Size 4.00 MiB
    48. Total PE 18433
    49. Free PE 1
    50. Allocated PE 18432
    51. PV UUID MJg0Bw-yPYJ-LXUA-iznM-Lq5v-9jC0-VujSGa

    PV的PEsize已经变成了16M

    4、创建逻辑卷lv

    1. [root@joker-7-01 ~]# lvcreate -n lv_test_01 -L 15G vg_test
    2. Logical volume "lv_test_01" created.
    3. [root@joker-7-01 ~]# lvs vg_test
    4. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    5. lv_test_01 vg_test -wi-a----- 15.00g
    6. [root@joker-7-01 ~]# lvdisplay lv_test_01
    7. --- Logical volume ---
    8. LV Path /dev/vg_test/lv_test_01
    9. LV Name lv_test_01
    10. VG Name vg_test
    11. LV UUID 8gqqqe-qrjN-9T4h-wBWg-j7jC-sPuT-24megs
    12. LV Write Access read/write
    13. LV Creation host, time joker-7-01, 2017-12-11 19:50:43 +0800
    14. LV Status available
    15. # open 0
    16. LV Size 15.00 GiB
    17. Current LE 960
    18. Segments 4
    19. Allocation inherit
    20. Read ahead sectors auto
    21. - currently set to 8192
    22. Block device 253:3

     第一条命令创建lv成功。

     第二条命令lvs显示所有的lv简短信息。我们创建的lv_test_01已经成功出现了,15g的大小。

    第三条命令详细显示lv_test_01信息,该lv有960个LE(PE)构成,总共的LV大小为15G,available状态(LE=PE,PE是最小的寻址单元)

    5、为lv创建文件系统,并挂载使用

    1. [root@joker-7-01 ~]# mkfs.ext4 /dev/vg_test/lv_test_01
    2. mke2fs 1.42.9 (28-Dec-2013)
    3. 文件系统标签=
    4. OS type: Linux
    5. 块大小=4096 (log=2)
    6. 分块大小=4096 (log=2)
    7. Stride=0 blocks, Stripe width=0 blocks
    8. 983040 inodes, 3932160 blocks
    9. 196608 blocks (5.00%) reserved for the super user
    10. 第一个数据块=0
    11. Maximum filesystem blocks=2151677952
    12. 120 block groups
    13. 32768 blocks per group, 32768 fragments per group
    14. 8192 inodes per group
    15. Superblock backups stored on blocks:
    16. 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
    17. Allocating group tables: 完成
    18. 正在写入inode表: 完成
    19. Creating journal (32768 blocks): 完成
    20. Writing superblocks and filesystem accounting information: 完成
    21. [root@joker-7-01 ~]# mount /dev/vg_test/lv_test_01 /mnt
    22. [root@joker-7-01 /]# cd /dev/vg_test/
    23. [root@joker-7-01 vg_test]# ll
    24. 总用量 0
    25. lrwxrwxrwx 1 root root 7 1211 19:58 lv_test_01 -> ../dm-3
    26. [root@joker-7-01 vg_test]#

    我们使用ext4系统,格式化lv,并成功挂载到了mnt,由最后的操作,可以明确的看出,/dev/vg_test/lv_test_01 实际是/dev/dm-3的软连接

    实验二:扩容、缩减vg、lv、pv

    1、扩展vg和lv

    1. [root@joker-7-01 vg_test]# vgs
    2. VG #PV #LV #SN Attr VSize VFree
    3. centos_joker-7-01 1 3 0 wz--n- 72.00g 4.00m
    4. vg_test 4 1 0 wz--n- <19.94g <4.94g #可用空间5g
    5. [root@joker-7-01 vg_test]# pvcreate /dev/sdg
    6. Physical volume "/dev/sdg" successfully created.
    7. [root@joker-7-01 vg_test]# vgextend /dev/sdg
    8. No command with matching syntax recognised. Run 'vgextend --help' for more information.
    9. Correct command syntax is: #语法打错了
    10. vgextend VG PV ... #正确的语法
    11. [root@joker-7-01 vg_test]# vgextend vg_test /dev/sdg
    12. Volume group "vg_test" successfully extended
    13. [root@joker-7-01 vg_test]# vgs
    14. VG #PV #LV #SN Attr VSize VFree
    15. centos_joker-7-01 1 3 0 wz--n- 72.00g 4.00m
    16. vg_test 5 1 0 wz--n- 24.92g 9.92g #扩展成功,变成了10g
    17. [root@joker-7-01 vg_test]# lvextend -L +5G -r /dev/vg_test/lv_test_01 #扩展lv -r选项,在扩展空间的之后,把文件系统也扩展了。
    18. Size of logical volume vg_test/lv_test_01 changed from 15.00 GiB (960 extents) to 20.00 GiB (1280 extents).
    19. Logical volume vg_test/lv_test_01 successfully resized. #扩展成功
    20. [root@joker-7-01 vg_test]# lvs vg_test
    21. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    22. lv_test_01 vg_test -wi-ao---- 20.00g #lv的空间扩展成功

    lv空间扩展成功,当vg空间不足时,需要先扩展vg,然后才能扩展lv,因为lv的空间是从vg中划分出去的。

    2、缩减vg、lv、移除pv

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

    主要步骤:

      umount设备

      缩减文件系统大小

      缩减lv大小

      恢复挂载设备

    1. [root@joker-7-01 vg_test]# umount /mnt #取消lv的挂载
    1. [root@joker-7-01 vg_test]# resize2fs /dev/vg_test/lv_test_01 2G #缩减lv到2g空间
    2. resize2fs 1.42.9 (28-Dec-2013)
    3. 请先运行 'e2fsck -f /dev/vg_test/lv_test_01'. #不让缩减,提示必须先要检测文件系统,这里要注意,一定要确保,文件系统的数据存放,缩减是一个非常危险的动作,无法挽回。如果能迁移,尽量迁移,确保数据的完整不丢失。
    4. [root@joker-7-01 vg_test]# e2fsck -f /dev/vg_test/lv_test_01 #检测文件系统
    5. e2fsck 1.42.9 (28-Dec-2013)
    6. 第一步: 检查inode,块,和大小
    7. 第二步: 检查目录结构
    8. 3步: 检查目录连接性
    9. Pass 4: Checking reference counts
    10. 5步: 检查簇概要信息
    11. /dev/vg_test/lv_test_01: 11/1376256 files (0.0% non-contiguous), 130423/5505024 blocks #检测完成,没有问题
    12. [root@joker-7-01 vg_test]# resize2fs /dev/vg_test/lv_test_01 2G #重新执行缩减lv
    13. resize2fs 1.42.9 (28-Dec-2013)
    14. Resizing the filesystem on /dev/vg_test/lv_test_01 to 524288 (4k) blocks.
    15. The filesystem on /dev/vg_test/lv_test_01 is now 524288 blocks long. #文件系统缩减成功
    16. [root@joker-7-01 vg_test]#
    1. [root@joker-7-01 vg_test]# mount /dev/vg_test/lv_test_01 /mnt #重新挂在lv
    2. [root@joker-7-01 vg_test]# df -h
    3. 文件系统 容量 已用 可用 已用% 挂载点
    4. /dev/mapper/centos_joker--7--01-root 50G 7.1G 43G 15% /
    5. devtmpfs 473M 0 473M 0% /dev
    6. tmpfs 489M 0 489M 0% /dev/shm
    7. tmpfs 489M 7.1M 482M 2% /run
    8. tmpfs 489M 0 489M 0% /sys/fs/cgroup
    9. /dev/sda1 1014M 159M 856M 16% /boot
    10. /dev/mapper/centos_joker--7--01-app 20G 33M 20G 1% /app
    11. tmpfs 98M 0 98M 0% /run/user/0
    12. /dev/mapper/vg_test-lv_test_01 1.9G 25M 1.8G 2% /mnt #文件系统已经缩减到了2G
    13. [root@joker-7-01 vg_test]# umount /mnt #重新卸载

    现在缩减lv的大小,我使用lvreduce命令,lvresize也可以实现,但是这个命令我不太熟,也不想用,能实现功能就好了。

    1. [root@joker-7-01 vg_test]# lvreduce -L 2G /dev/vg_test/lv_test_01 # 缩减到2G
    2. WARNING: Reducing active logical volume to 2.00 GiB.
    3. THIS MAY DESTROY YOUR DATA (filesystem etc.)
    4. Do you really want to reduce vg_test/lv_test_01? [y/n]: y # 提示是缩减到2G,如果生产中一定要缩减lv,那么让别人执行(死道友不死贫道),如果非要自己执行,那么咱们就迁移数据吧。
    5. Size of logical volume vg_test/lv_test_01 changed from 21.00 GiB (1344 extents) to 2.00 GiB (128 extents).
    6. Logical volume vg_test/lv_test_01 successfully resized. #缩减成功
    1. [root@joker-7-01 vg_test]# lvs
    2. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    3. app centos_joker-7-01 -wi-ao---- 20.00g
    4. root centos_joker-7-01 -wi-ao---- 50.00g
    5. swap centos_joker-7-01 -wi-ao---- 2.00g
    6. lv_test_01 vg_test -wi-a----- 2.00g #已经缩减到了2G

    (2)缩减vg

    1. [root@joker-7-01 vg_test]# vgs
    2. VG #PV #LV #SN Attr VSize VFree
    3. centos_joker-7-01 1 3 0 wz--n- 72.00g 4.00m
    4. vg_test 5 1 0 wz--n- 24.92g 22.92g
    5. [root@joker-7-01 vg_test]# pvs
    6. PV VG Fmt Attr PSize PFree
    7. /dev/sda2 centos_joker-7-01 lvm2 a-- 72.00g 4.00m
    8. /dev/sdc vg_test lvm2 a-- 4.98g 2.98g #我们做实验的磁盘只有/dev/sdc现在占用着空间,其余4块均为空闲
    9. /dev/sdd vg_test lvm2 a-- 4.98g 4.98g
    10. /dev/sde vg_test lvm2 a-- 4.98g 4.98g
    11. /dev/sdf vg_test lvm2 a-- 4.98g 4.98g
    12. /dev/sdg vg_test lvm2 a-- 4.98g 4.98g

    现在我们将sdd、sde、sdf三块pv移除掉

    1. [root@joker-7-01 vg_test]# vgreduce vg_test /dev/sdf #从vg_test组移除/dev/sdf这个pv
    2. Removed "/dev/sdf" from volume group "vg_test"
    3. [root@joker-7-01 vg_test]# vgreduce vg_test /dev/sde
    4. Removed "/dev/sde" from volume group "vg_test"
    5. [root@joker-7-01 vg_test]# vgreduce vg_test /dev/sdd
    6. Removed "/dev/sdd" from volume group "vg_test"
    1. [root@joker-7-01 vg_test]# pvs
    2. PV VG Fmt Attr PSize PFree
    3. /dev/sda2 centos_joker-7-01 lvm2 a-- 72.00g 4.00m
    4. /dev/sdc vg_test lvm2 a-- 4.98g 2.98g 可以看出vg_test 内现在只有两个pv了
    5. /dev/sdd lvm2 --- 5.00g 5.00g
    6. /dev/sde lvm2 --- 5.00g 5.00g
    7. /dev/sdf lvm2 --- 5.00g 5.00g
    8. /dev/sdg vg_test lvm2 a-- 4.98g 4.98g

    (3)现在我们移除刚刚移出的pv

    1. [root@joker-7-01 vg_test]# pvremove /dev/sdd
    2. Labels on physical volume "/dev/sdd" successfully wiped.
    3. [root@joker-7-01 vg_test]# pvremove /dev/sd{e,f}
    4. Labels on physical volume "/dev/sde" successfully wiped.
    5. Labels on physical volume "/dev/sdf" successfully wiped.
    6. [root@joker-7-01 vg_test]# pvs
    7. PV VG Fmt Attr PSize PFree
    8. /dev/sda2 centos_joker-7-01 lvm2 a-- 72.00g 4.00m
    9. /dev/sdc vg_test lvm2 a-- 4.98g 2.98g
    10. /dev/sdg vg_test lvm2 a-- 4.98g 4.98g
    11. #成功移除

    实验三:VG的数据迁移

    首先确保迁移的目的地主机上vg和lv的名不能和迁移的vg和lv名字重复,否则会报错,迁移前可以先将vg和lv的名字更改.

    1. [root@joker-7-01 vg_test]# lvrename /dev/vg_test/lv_test_01 lv001
    2. Renamed "lv_test_01" to "lv001" in volume group "vg_test"
    3. [root@joker-7-01 vg_test]# vgrename vg_test vg001
    4. Volume group "vg_test" successfully renamed to "vg001"

    实验步骤:

    取消lv的挂载

    禁用vg

    将vg设置成导出状态

    关闭虚拟机,移除磁盘

    再把移除的磁盘添加回来

    扫描vg,并把vg启用

    1. umount /mnt
    2. [root@joker-7-01 vg_test]# pvs #可以看出vg001有一个pv是空着的,如果要迁移vg尽量把空磁盘剔除
    3. PV VG Fmt Attr PSize PFree
    4. /dev/sda2 centos_joker-7-01 lvm2 a-- 72.00g 4.00m
    5. /dev/sdc vg001 lvm2 a-- 4.98g 2.98g
    6. /dev/sdg vg001 lvm2 a-- 4.98g 4.98g
    1. [root@joker-7-01 vg_test]# vgreduce vg001 /dev/sdg
    2. Removed "/dev/sdg" from volume group "vg001" #剔除/dev/sdg
    3. [root@joker-7-01 vg_test]# pvremove /dev/sdg
    4. Labels on physical volume "/dev/sdg" successfully wiped.

     如果lv占用了多个pv的空间,可以将pv中的数据集中移动到一起,已腾出空的pv,节省磁盘使用pvmove src_disk dist_disk 命令

    禁用vg,并设置成导出状态

    1. [root@joker-7-01 vg_test]# vgchange -an vg001 #导出前必须先禁用vg
    2. 0 logical volume(s) in volume group "vg001" now active
    3. [root@joker-7-01 vg_test]# vgexport vg001 #导出成功
    4. Volume group "vg001" successfully exported

    这是vg导出后的状态

    1. [root@joker-7-01 vg_test]# vgdisplay vg001
    2. --- Volume group ---
    3. VG Name vg001
    4. System ID
    5. Format lvm2
    6. Metadata Areas 1
    7. Metadata Sequence No 13
    8. VG Access read/write
    9. VG Status exported/resizable #有标识导出
    10. MAX LV 0
    11. Cur LV 1
    12. Open LV 0
    13. Max PV 0
    14. Cur PV 1
    15. Act PV 1
    16. VG Size 4.98 GiB
    17. PE Size 16.00 MiB
    18. Total PE 319
    19. Alloc PE / Size 128 / 2.00 GiB
    20. Free PE / Size 191 / 2.98 GiB
    21. VG UUID JmvDcD-ltUK-HTXF-3Aue-YBQj-tjgK-h0NTVF
    22. [root@joker-7-01 vg_test]# pvdisplay
    23. Physical volume "/dev/sdc" of volume group "vg001" is exported
    24. --- Physical volume ---
    25. PV Name /dev/sdc
    26. VG Name vg001 (exported) #pv的状态
    27. PV Size 5.00 GiB / not usable 16.00 MiB
    28. Allocatable yes
    29. PE Size 16.00 MiB
    30. Total PE 319
    31. Free PE 191
    32. Allocated PE 128
    33. PV UUID iqKlpg-oA4Y-6e33-7EGl-wr7u-uAM1-ZeY5Ef

    现在将磁盘再vmware内导出,然后再导入

    1. [root@joker-7-01 vg_test]# partprobe # 将磁盘移除,然后重新读一下分区表
    2. [root@joker-7-01 vg_test]# lsblk #显示现有的磁盘,vg的磁盘已经被导出去了
    3. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    4. sda 8:0 0 200G 0 disk
    5. ├─sda1 8:1 0 1G 0 part /boot
    6. └─sda2 8:2 0 72G 0 part
    7. ├─centos_joker--7--01-root 253:0 0 50G 0 lvm /
    8. ├─centos_joker--7--01-swap 253:1 0 2G 0 lvm [SWAP]
    9. └─centos_joker--7--01-app 253:2 0 20G 0 lvm /app
    10. sdb 8:16 0 20G 0 disk
    11. ├─sdb1 8:17 0 3G 0 part
    12. ├─sdb2 8:18 0 3G 0 part /mnt/ext4
    13. └─sdb3 8:19 0 3G 0 part /mnt/xfs
    14. sr0 11:0 1 1024M 0 rom
    1. [root@joker-7-01 vg_test]# vgs #已经没有vg001了
    2. VG #PV #LV #SN Attr VSize VFree
    3. centos_joker-7-01 1 3 0 wz--n- 72.00g 4.00m

    我们再把vg那块磁盘拿回来,重新加入到虚拟机内

    1. [root@joker-7-01 ~]# echo '- - -' > /sys/class/scsi_host/host0/scan
    2. [root@joker-7-01 ~]# echo '- - -' > /sys/class/scsi_host/host1/scan
    3. [root@joker-7-01 ~]# echo '- - -' > /sys/class/scsi_host/host2/scan
    4. [root@joker-7-01 ~]# partprobe
    5. ##如果上述不能读出磁盘,那就重启电脑吧,正常的线上环境会自动识别的
    1. [root@joker-7-01 ~]# pvscan #查看系统上的所有pv
    2. PV /dev/sda2 VG centos_joker-7-01 lvm2 [72.00 GiB / 4.00 MiB free]
    3. PV /dev/sdc is in exported VG vg_test [5.98 GiB / 1008.00 MiB free]
    4. Total: 2 [<77.99 GiB] / in use: 2 [<77.99 GiB] / in no VG: 0 [0 ]

    已经搜索到了那块pv

    1. [root@joker-7-01 ~]# vgscan #查看系统上的所有vg
    2. Reading volume groups from cache.
    3. Found volume group "centos_joker-7-01" using metadata type lvm2
    4. Found exported volume group "vg_test" using metadata type lvm2

    使用vgscan可以看出已经读取到了vg_test且为导出状态

    1. [root@joker-7-01 ~]# vgimport vg_test #导入vg
    2. Volume group "vg_test" successfully imported
    3. [root@joker-7-01 ~]# vgs
    4. VG #PV #LV #SN Attr VSize VFree
    5. centos_joker-7-01 1 3 0 wz--n- 72.00g 4.00m
    6. vg_test 1 1 0 wz--n- 5.98g 1008.00m
    7. [root@joker-7-01 ~]# lvs
    8. LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    9. app centos_joker-7-01 -wi-ao---- 20.00g
    10. root centos_joker-7-01 -wi-ao---- 50.00g
    11. swap centos_joker-7-01 -wi-ao---- 2.00g
    12. lv_test_01 vg_test -wi------- 5.00g
    13. [root@joker-7-01 ~]# vgchange -ay vg_test
    14. 1 logical volume(s) in volume group "vg_test" now active #激活vg
    15. [root@joker-7-01 ~]# mount /dev/vg_test/lv_test_01 /mnt #lv可用了

    实验四:lv的快照,创建、挂载、还原

    首先说一下理论,什么是lv的快照:快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝,对于需要备份或者复制的现有数据集临时拷贝以及其它操作来说,快照是最合适的选择。

    快照的特性:

    1. 快照只有在它们和原来的逻辑卷不同时才会消耗空间
    2. 在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
    3. 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。
    4. 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
    5. 建立快照的卷大小只需要原始逻辑卷的15%~20%就够了,也可以使用lvextend放大快照
    6. 快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享
    7. 由于快照区与原本的LV共用很多PE的区块,因此快照去与被快照的LV必须在同一个VG.系统恢复的时候的文件数量不能高于快照区的实际容量

    1. [root@joker-7-01 mnt]# lsblk
    2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    3. sda 8:0 0 200G 0 disk
    4. ├─sda1 8:1 0 1G 0 part /boot
    5. └─sda2 8:2 0 72G 0 part
    6. ├─centos_joker--7--01-root 253:0 0 50G 0 lvm /
    7. ├─centos_joker--7--01-swap 253:1 0 2G 0 lvm [SWAP]
    8. └─centos_joker--7--01-app 253:2 0 20G 0 lvm /app
    9. sdb 8:16 0 20G 0 disk
    10. ├─sdb1 8:17 0 3G 0 part
    11. ├─sdb2 8:18 0 3G 0 part /mnt/ext4
    12. └─sdb3 8:19 0 3G 0 part /mnt/xfs
    13. sdc 8:32 0 6G 0 disk
    14. ├─vg_test-lv_test_01-real 253:4 0 5G 0 lvm
    15. │ ├─vg_test-lv_test_01 253:3 0 5G 0 lvm /mnt #lv已经挂载在mnt下
    16. │ └─vg_test-lv_test_01_snapshot 253:6 0 5G 1 lvm
    17. └─vg_test-lv_test_01_snapshot-cow 253:5 0 1008M 1 lvm
    18. └─vg_test-lv_test_01_snapshot 253:6 0 5G 1 lvm
    19. sr0 11:0 1 1024M 0 rom
    20. [root@joker-7-01 mnt]# touch 1111 #我们创建一个文件
    21. [root@joker-7-01 mnt]# ll
    22. 总用量 0
    23. -rw-r--r-- 1 root root 0 1212 20:16 1111

    创建快照:

    1. [root@joker-7-01 ~]# lvcreate -s -L 1007M -n lv_test_01_snapshot -p r /dev/vg_test/lv_test_01 #快照创建成功(注意xfs文件系统不支持-p r选项)
    2. Using default stripesize 64.00 KiB.
    3. Rounding up size to full physical extent 1008.00 MiB
    4. Logical volume "lv_test_01_snapshot" created.

    现在挂载快照

    1. [root@joker-7-01 mnt]# mount /dev/vg_test/lv_test_01_snapshot /data
    2. mount: /dev/mapper/vg_test-lv_test_01_snapshot 写保护,将以只读方式挂载
    3. [root@joker-7-01 /]# cd /data
    4. [root@joker-7-01 data]# ll
    5. 总用量 0
    6. -rw-r--r-- 1 root root 0 1212 20:16 1111

    刚才创建的文件,现在恢复快照,我们现在lv中创建一个新的文件,然后用快照恢复回去:

      1. [root@joker-7-01 /]# lsblk
      2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
      3. sda 8:0 0 200G 0 disk
      4. ├─sda1 8:1 0 1G 0 part /boot
      5. └─sda2 8:2 0 72G 0 part
      6. ├─centos_joker--7--01-root 253:0 0 50G 0 lvm /
      7. ├─centos_joker--7--01-swap 253:1 0 2G 0 lvm [SWAP]
      8. └─centos_joker--7--01-app 253:2 0 20G 0 lvm /app
      9. sdb 8:16 0 20G 0 disk
      10. ├─sdb1 8:17 0 3G 0 part
      11. │ └─vg_test-lv_03_snapshot-cow 253:5 0 1G 1 lvm
      12. │ └─vg_test-lv_03_snapshot 253:6 0 5G 1 lvm /mnt
      13. ├─sdb2 8:18 0 3G 0 part /mnt/ext4
      14. └─sdb3 8:19 0 3G 0 part /mnt/xfs
      15. sdc 8:32 0 6G 0 disk
      16. └─vg_test-lv_test_01-real 253:4 0 5G 0 lvm
      17. ├─vg_test-lv_test_01 253:3 0 5G 0 lvm /mnt
      18. └─vg_test-lv_03_snapshot 253:6 0 5G 1 lvm /mnt
      19. sr0 11:0 1 1024M 0 rom
      20. [root@joker-7-01 /]# umount /mnt #卸载快照的挂载
      21. [root@joker-7-01 /]# mount /dev/vg_test/lv_
      22. lv_03_snapshot lv_test_01
      23. [root@joker-7-01 /]# mount /dev/vg_test/lv_test_01 /mnt #挂载lv到mnt下
      24. mount: /dev/mapper/vg_test-lv_test_01 已经挂载或 /mnt 忙
      25. /dev/mapper/vg_test-lv_test_01 已经挂载到 /mnt 上
      26. [root@joker-7-01 /]# lslbk
      27. -bash: lslbk: 未找到命令
      28. [root@joker-7-01 /]# lsblk
      29. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
      30. sda 8:0 0 200G 0 disk
      31. ├─sda1 8:1 0 1G 0 part /boot
      32. └─sda2 8:2 0 72G 0 part
      33. ├─centos_joker--7--01-root 253:0 0 50G 0 lvm /
      34. ├─centos_joker--7--01-swap 253:1 0 2G 0 lvm [SWAP]
      35. └─centos_joker--7--01-app 253:2 0 20G 0 lvm /app
      36. sdb 8:16 0 20G 0 disk
      37. ├─sdb1 8:17 0 3G 0 part
      38. │ └─vg_test-lv_03_snapshot-cow 253:5 0 1G 1 lvm
      39. │ └─vg_test-lv_03_snapshot 253:6 0 5G 1 lvm
      40. ├─sdb2 8:18 0 3G 0 part /mnt/ext4
      41. └─sdb3 8:19 0 3G 0 part /mnt/xfs
      42. sdc 8:32 0 6G 0 disk
      43. └─vg_test-lv_test_01-real 253:4 0 5G 0 lvm
      44. ├─vg_test-lv_test_01 253:3 0 5G 0 lvm /mnt
      45. └─vg_test-lv_03_snapshot 253:6 0 5G 1 lvm
      46. sr0 11:0 1 1024M 0 rom
      47. [root@joker-7-01 /]# cd /mnt
      48. [root@joker-7-01 mnt]# ls
      49. lost+found
      50. [root@joker-7-01 mnt]# touch 123123123123 #在lv上创建一个文件
      51. [root@joker-7-01 mnt]# ls
      52. 123123123123 lost+found
      53. [root@joker-7-01 mnt]# cd ..
      54. [root@joker-7-01 /]# umount /mnt #取消lv的挂载
      55. [root@joker-7-01 /]# lvconvert --merge /dev/vg_test/lv_
      56. lv_03_snapshot lv_test_01
      57. [root@joker-7-01 /]# lvconvert --merge /dev/vg_test/lv_
      58. lv_03_snapshot lv_test_01
      59. [root@joker-7-01 /]# lvconvert --merge /dev/vg_test/lv_03_snapshot #使用快照恢复
      60. Merging of volume vg_test/lv_03_snapshot started.
      61. lv_test_01: Merged: 100.00%
      62. [root@joker-7-01 /]# mount /dev/vg_test/lv_test_01 /mnt #将恢复的lv挂载到mnt上
      63. [root@joker-7-01 /]# lsblk
      64. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
      65. sda 8:0 0 200G 0 disk
      66. ├─sda1 8:1 0 1G 0 part /boot
      67. └─sda2 8:2 0 72G 0 part
      68. ├─centos_joker--7--01-root 253:0 0 50G 0 lvm /
      69. ├─centos_joker--7--01-swap 253:1 0 2G 0 lvm [SWAP]
      70. └─centos_joker--7--01-app 253:2 0 20G 0 lvm /app
      71. sdb 8:16 0 20G 0 disk
      72. ├─sdb1 8:17 0 3G 0 part
      73. ├─sdb2 8:18 0 3G 0 part /mnt/ext4
      74. └─sdb3 8:19 0 3G 0 part /mnt/xfs
      75. sdc 8:32 0 6G 0 disk
      76. └─vg_test-lv_test_01 253:3 0 5G 0 lvm /mnt
      77. sr0 11:0 1 1024M 0 rom
      78. [root@joker-7-01 /]# cd /mnt
      79. [root@joker-7-01 mnt]# ls #确认已经恢复了,刚刚创建的文件已经消失了
      80. lost+found
  • 相关阅读:
    hadoop学习摘要
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
    sqlserver 2012 IDE中 Windows身份验证连接服务器报错 ,Login failed for user 'xxxAdministrator'. 原因: 找不到与提供的名称匹配的登录名。
    不重复随机数列生成算法
    异步和等待(async和await)
    mvc和mvvm的区别?
    Redis命令大全
    Java NIO 三大组件之 Buffer
    Java NIO 三大组件之 Channel
    Java NIO概述
  • 原文地址:https://www.cnblogs.com/momenglin/p/8485705.html
Copyright © 2011-2022 走看看