RAID(独立冗余磁盘阵列)

常见raid级别

RAID 0

如果要存储数据12345678 ,1357存储在disk1上,2468存储在disk2上。
3[NH]XA`RL9SDN(I]P_{7_C.png

  • 读取速率提高
  • 没有数据冗余性
  • 最少需要两块硬盘组合
  • 有效存储空间N块盘

    RAID 1

    如果要存1357这四份数据,会将同样的数据存入不同的盘中。
    N4H03_R$$]9KPTKR8{(L@O0.png

  • 读写速率提高

  • 具有数据冗余性
  • 最少需要两块磁盘
  • 有效存储空间N/2

    RAID 5

    如果要存四份数据A、B、C、D,有N块磁盘,将每份数据分成N-1份分别存入不同磁盘,例如:A1、A2、A3 ,然后通过A1、A2、A3计算出来一个Ap存入最后一块盘。
    O9H{6I]NRMDS2%J{KEYFRAN.png

  • 具有数据安全性

  • 读写速率提高
  • 最少需要三块盘
  • 有效存储空间N-1块盘

    RAID 10

    如果要存储数据1234567,结合RAID 1存储和RAID 0存储(内层RAID 1,外层RAID 0)
    u=3787993020,132891015&fm=26&gp=0.jpg

  • 读写速率提高

  • 具有数据冗余性
  • 有效存储空间N/2块盘

    RAID 01

    先使用RAID 0存储,再使用RAID 1存储
    u=76662363,2007533073&fm=11&gp=0.jpg

  • 读写速率提高

  • 具有数据冗余性
  • 有效存储空间N/2块盘

案例一

组件RAID 10阵列

  • 添加四块磁盘

7(Y35KXM4BGQ79XYF(WF)PT.png

  • 使用 madam 命令创建软件磁盘阵列

madam常用参数及作用

参数 作用
-a 创建模式:是否自动为其创建设备文件
管理模式:添加新硬盘到已有磁盘阵列(如果阵列缺少工作硬盘,则新增加硬盘直接转为工作硬盘;如果阵列不缺工作硬盘,则作为热备磁盘)
-n 指定设备数量
-l 指定RAID级别
-C 创建磁盘阵列
-v 显示过程
-f 模拟磁盘损坏
-r 移除磁盘
-Q 查看摘要信息
-D 查看详细信息
-S 停止RAID磁盘阵列
-x 指定备份盘数量
  1. [root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
  2. mdadm: layout defaults to n2
  3. mdadm: layout defaults to n2
  4. mdadm: chunk size defaults to 512K
  5. mdadm: size set to 20954112K
  6. mdadm: Defaulting to version 1.2 metadata
  7. mdadm: array /dev/md0 started.

把制作好的RAID磁盘阵列格式化为ext4

  1. [root@localhost ~]# mkfs.ext4 /dev/md0
  2. mke2fs 1.42.9 (28-Dec-2013)
  3. Filesystem label=
  4. OS type: Linux
  5. Block size=4096 (log=2)
  6. Fragment size=4096 (log=2)
  7. Stride=128 blocks, Stripe width=256 blocks
  8. 2621440 inodes, 10477056 blocks
  9. 523852 blocks (5.00%) reserved for the super user
  10. First data block=0
  11. Maximum filesystem blocks=2157969408
  12. 320 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. 4096000, 7962624
  18. Allocating group tables: done
  19. Writing inode tables: done
  20. Creating journal (32768 blocks): done
  21. Writing superblocks and filesystem accounting information: done

创建挂载点,把硬盘设备进行挂在操作。

  1. [root@localhost ~]# mkdir /RAID
  2. [root@localhost ~]# mount /dev/md0 /RAID/
  3. [root@localhost ~]# df -h
  4. Filesystem Size Used Avail Use% Mounted on
  5. /dev/mapper/centos-root 17G 1.1G 16G 7% /
  6. devtmpfs 898M 0 898M 0% /dev
  7. tmpfs 910M 0 910M 0% /dev/shm
  8. tmpfs 910M 9.6M 901M 2% /run
  9. tmpfs 910M 0 910M 0% /sys/fs/cgroup
  10. /dev/sda1 1014M 146M 869M 15% /boot
  11. tmpfs 182M 0 182M 0% /run/user/0
  12. /dev/md0 40G 49M 38G 1% /RAID

查看/dev/md0磁盘阵列详细信息,并把挂在信息写入配置文件,使其永久生效。

  1. [root@localhost ~]# mdadm -D /dev/md0
  2. /dev/md0:
  3. Version : 1.2
  4. Creation Time : Mon Apr 15 17:43:04 2019
  5. Raid Level : raid10
  6. Array Size : 41908224 (39.97 GiB 42.91 GB)
  7. Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
  8. Raid Devices : 4
  9. Total Devices : 4
  10. Persistence : Superblock is persistent
  11. Update Time : Mon Apr 15 17:44:14 2019
  12. State : active, resyncing
  13. Active Devices : 4
  14. Working Devices : 4
  15. Failed Devices : 0
  16. Spare Devices : 0
  17. Layout : near=2
  18. Chunk Size : 512K
  19. Consistency Policy : resync
  20. Resync Status : 66% complete
  21. Name : localhost.localdomain:0 (local to host
  22. localhost.localdomain)
  23. UUID : 9b664b1c:ab2b2fb6:6a00adf6:6167ad51
  24. Events : 15
  25. Number Major Minor RaidDevice State
  26. 0 8 16 0 active sync set-A /dev/sdb
  27. 1 8 32 1 active sync set-B /dev/sdc
  28. 2 8 48 2 active sync set-A /dev/sdd
  29. 3 8 64 3 active sync set-B /dev/sde
  30. [root@localhost ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab

小结:创建->格式化->挂载->查看信息/写入配置文件

损坏磁盘阵列及修复

在确认一块物理盘损坏而不能正常工作时,可以通过mdadm命令将这块物理盘从阵列中移除。我们可以通过 -f 参数模拟这一情况,再查看RAID磁盘阵列状态。

  1. [root@localhost ~]# mdadm /dev/md0 -f /dev/sdb
  2. mdadm: set /dev/sdb faulty in /dev/md0
  3. [root@localhost ~]# mdadm -D /dev/md0
  4. /dev/md0:
  5. Version : 1.2
  6. Creation Time : Thu Apr 18 09:25:38 2019
  7. Raid Level : raid10
  8. Array Size : 41908224 (39.97 GiB 42.91 GB)
  9. Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
  10. Raid Devices : 4
  11. Total Devices : 4
  12. Persistence : Superblock is persistent
  13. Update Time : Thu Apr 18 09:28:24 2019
  14. State : clean, degraded
  15. Active Devices : 3
  16. Working Devices : 3
  17. Failed Devices : 1
  18. Spare Devices : 0
  19. Layout : near=2
  20. Chunk Size : 512K
  21. Consistency Policy : resync
  22. Name : localhost.localdomain:0 (local to host
  23. localhost.localdomain)
  24. UUID : 09c273ff:77fa1bc2:84a934f1:b924fa6e
  25. Events : 27
  26. Number Major Minor RaidDevice State
  27. - 0 0 0 removed
  28. 1 8 32 1 active sync set-B /dev/sdc
  29. 2 8 48 2 active sync set-A /dev/sdd
  30. 3 8 64 3 active sync set-B /dev/sde
  31. 0 8 16 - faulty /dev/sdb

sdb已经故障,只有三块盘正在工作。在RAID 10阵列中,损坏一块硬盘并不影响磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/mnt/raid10目录中正常地创建或删除文件。

我们先移除故障盘,然后模拟重启系统,换上新的硬盘,将新的硬盘添加到磁盘阵列中。

  1. [root@localhost ~]# umount /mnt/raid10/
  2. [root@localhost ~]# mdadm /dev/md0 -r /dev/sdb
  3. mdadm: hot removed /dev/sdb from /dev/md0
  4. [root@localhost ~]# mdadm /dev/md0 -a /dev/sdb
  5. mdadm: added /dev/sdb
  6. [root@localhost ~]# mdadm -D /dev/md0
  7. /dev/md0:
  8. Version : 1.2
  9. Creation Time : Sun Jan 31 11:37:40 2021
  10. Raid Level : raid10
  11. Array Size : 10475520 (9.99 GiB 10.73 GB)
  12. Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
  13. Raid Devices : 4
  14. Total Devices : 4
  15. Persistence : Superblock is persistent
  16. Update Time : Sun Jan 31 11:56:52 2021
  17. State : clean, degraded, recovering
  18. Active Devices : 3
  19. Working Devices : 4
  20. Failed Devices : 0
  21. Spare Devices : 1
  22. Layout : near=2
  23. Chunk Size : 512K
  24. Consistency Policy : resync
  25. Rebuild Status : 50% complete
  26. Name : localhost.localdomain:0 (local to host localhost.localdomain)
  27. UUID : 03f2fb89:0839dd5b:74e726d0:5d4e435e
  28. Events : 32
  29. Number Major Minor RaidDevice State
  30. 4 8 16 0 spare rebuilding /dev/sdb
  31. 1 8 32 1 active sync set-B /dev/sdc
  32. 2 8 48 2 active sync set-A /dev/sdd
  33. 3 8 64 3 active sync set-B /dev/sde
  34. [root@localhost ~]# mount -a

通过mount [磁盘阵列] -a [硬盘]向磁盘阵列中添加一块新的硬盘,发现磁盘阵列中缺少一块盘,新的硬盘直接变为工作硬盘(这个过程需等待一段时间)。

案例二

RAID 5磁盘阵列+备份盘

部署RAID 5磁盘阵列至少需要三块硬盘,我们再加上一块备份盘,一共需要四块硬盘。

现在创建一个RAID 5磁盘阵列+备份盘。在下面的命令中,参数-n 3代表创建这个RAID 5磁盘阵列所需的
硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。当查看/dev/md0(即RAID 5磁盘
阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了。

  1. [root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
  2. mdadm: layout defaults to left-symmetric
  3. mdadm: layout defaults to left-symmetric
  4. mdadm: chunk size defaults to 512K
  5. mdadm: size set to 5237760K
  6. mdadm: Defaulting to version 1.2 metadata
  7. mdadm: array /dev/md0 started.
  8. [root@localhost ~]# mdadm -D /dev/md0
  9. /dev/md0:
  10. Version : 1.2
  11. Creation Time : Sun Jan 31 23:42:35 2021
  12. Raid Level : raid5
  13. Array Size : 10475520 (9.99 GiB 10.73 GB)
  14. Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
  15. Raid Devices : 3
  16. Total Devices : 4
  17. Persistence : Superblock is persistent
  18. Update Time : Sun Jan 31 23:43:16 2021
  19. State : clean
  20. Active Devices : 3
  21. Working Devices : 4
  22. Failed Devices : 0
  23. Spare Devices : 1
  24. Layout : left-symmetric
  25. Chunk Size : 512K
  26. Consistency Policy : resync
  27. Name : localhost.localdomain:0 (local to host localhost.localdomain)
  28. UUID : 242d84e0:b8e7a688:5e8c510e:8ff89c57
  29. Events : 18
  30. Number Major Minor RaidDevice State
  31. 0 8 16 0 active sync /dev/sdb
  32. 1 8 32 1 active sync /dev/sdc
  33. 4 8 48 2 active sync /dev/sdd
  34. 3 8 64 - spare /dev/sde

将部署好的RAID 5磁盘阵列格式化为ext4格式,然后写入配置文件、挂载到目录上,之后就可以使用了。

  1. [root@localhost ~]# mkfs.ext4 /dev/md0
  2. mke2fs 1.42.9 (28-Dec-2013)
  3. 文件系统标签=
  4. OS type: Linux
  5. 块大小=4096 (log=2)
  6. 分块大小=4096 (log=2)
  7. Stride=128 blocks, Stripe width=256 blocks
  8. 655360 inodes, 2618880 blocks
  9. 130944 blocks (5.00%) reserved for the super user
  10. 第一个数据块=0
  11. Maximum filesystem blocks=2151677952
  12. 80 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
  17. Allocating group tables: 完成
  18. 正在写入inode表: 完成
  19. Creating journal (32768 blocks): 完成
  20. Writing superblocks and filesystem accounting information: 完成
  21. [root@localhost ~]# echo "/dev/md0 /mnt/raid5 ext4 defaults 0 0" >> /etc/fstab
  22. [root@localhost ~]# mkdir /mnt/raid5
  23. [root@localhost ~]# mount -a

通过 -f 命令模拟sdb损坏,将其移除磁盘阵列,迅速查看磁盘阵列状态,会发现备用盘自动转换为工作盘准备加入到磁盘阵列中。

  1. [root@localhost ~]# mdadm /dev/md0 -f /dev/sdb
  2. mdadm: set /dev/sdb faulty in /dev/md0
  3. [root@localhost ~]# mdadm -D /dev/md0
  4. /dev/md0:
  5. Version : 1.2
  6. Creation Time : Sun Jan 31 23:42:35 2021
  7. Raid Level : raid5
  8. Array Size : 10475520 (9.99 GiB 10.73 GB)
  9. Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
  10. Raid Devices : 3
  11. Total Devices : 4
  12. Persistence : Superblock is persistent
  13. Update Time : Sun Jan 31 23:46:43 2021
  14. State : clean, degraded, recovering
  15. Active Devices : 2
  16. Working Devices : 3
  17. Failed Devices : 1
  18. Spare Devices : 1
  19. Layout : left-symmetric
  20. Chunk Size : 512K
  21. Consistency Policy : resync
  22. Rebuild Status : 31% complete
  23. Name : localhost.localdomain:0 (local to host localhost.localdomain)
  24. UUID : 242d84e0:b8e7a688:5e8c510e:8ff89c57
  25. Events : 24
  26. Number Major Minor RaidDevice State
  27. 3 8 64 0 spare rebuilding /dev/sde
  28. 1 8 32 1 active sync /dev/sdc
  29. 4 8 48 2 active sync /dev/sdd
  30. 0 8 16 - faulty /dev/sdb

LVM(逻辑卷管理器)

逻辑卷管理器最先是为了解决硬盘设备在创建分区后不宜修改分区大小的缺陷,而创建的一种理论性较强的硬盘分区管理机制。尽管对传统硬盘分区强制进行扩容或者缩容从理论来讲是可行的,但是有可能造成数据丢失。

LVM技术是在文件系统与硬盘分区之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来用户不必关心硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。
![8%OOBD_8JX}]W0UP`{K83Q.png

LVM的核心理念:物理卷处于LVM中的最底层,可以被理解为物理硬盘、硬盘分区或磁盘阵列,都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,一个卷组创建后可以继续向其中添加新的物理卷。逻辑卷是利用卷组中的空闲资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。

部署逻辑卷

常用的LVM部署命令

功能\命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
显示 pvdisplay、pvs vgdisplay、vgs lvdisplay、lvs
删除 pvremove vgremove lvremove
扩展 vgextend lvextend
缩小 vgreduce lvreduce

实验需要添加两块硬盘。

第1步:让新添加的两块硬盘设备支持LVM技术

  1. [root@localhost ~]# pvcreate /dev/sdb /dev/sdc
  2. Physical volume "/dev/sdb" successfully created.
  3. Physical volume "/dev/sdc" successfully created.

第2步:将两块硬盘加入到storage卷组中,然后查看卷组状态。

  1. [root@localhost ~]# vgcreate storage /dev/sdb /dev/sdc
  2. Volume group "storage" successfully created
  3. [root@localhost ~]# vgdisplay
  4. --- Volume group ---
  5. VG Name centos
  6. System ID
  7. Format lvm2
  8. Metadata Areas 1
  9. Metadata Sequence No 3
  10. VG Access read/write
  11. VG Status resizable
  12. MAX LV 0
  13. Cur LV 2
  14. Open LV 2
  15. Max PV 0
  16. Cur PV 1
  17. Act PV 1
  18. VG Size <19.00 GiB
  19. PE Size 4.00 MiB
  20. Total PE 4863
  21. Alloc PE / Size 4863 / <19.00 GiB
  22. Free PE / Size 0 / 0
  23. VG UUID JpwX64-A0g9-9KQI-66mw-aHCt-t87g-hSpHNJ
  24. --- Volume group ---
  25. VG Name storage
  26. System ID
  27. Format lvm2
  28. Metadata Areas 2
  29. Metadata Sequence No 1
  30. VG Access read/write
  31. VG Status resizable
  32. MAX LV 0
  33. Cur LV 0
  34. Open LV 0
  35. Max PV 0
  36. Cur PV 2
  37. Act PV 2
  38. VG Size 9.99 GiB
  39. PE Size 4.00 MiB
  40. Total PE 2558
  41. Alloc PE / Size 0 / 0
  42. Free PE / Size 2558 / 9.99 GiB
  43. VG UUID ZpHrGj-08fc-eSzO-Syfq-tMDq-O7CQ-xzWi9w

第3步:切割出一个约为150MB的逻辑卷设备。

这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。
第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷。
另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使
用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。

  1. [root@localhost ~]# lvcreate -n lvo -l 37 storage
  2. Logical volume "lvo" created.
  3. [root@localhost ~]# lvdisplay
  4. --- Logical volume ---
  5. LV Path /dev/centos/swap
  6. LV Name swap
  7. VG Name centos
  8. LV UUID dBdf6n-w000-61XH-8Rpy-Gx7E-3pFI-rjQVM0
  9. LV Write Access read/write
  10. LV Creation host, time localhost, 2020-12-20 15:35:11 +0800
  11. LV Status available
  12. # open 2
  13. LV Size 2.00 GiB
  14. Current LE 512
  15. Segments 1
  16. Allocation inherit
  17. Read ahead sectors auto
  18. - currently set to 8192
  19. Block device 253:1
  20. --- Logical volume ---
  21. LV Path /dev/centos/root
  22. LV Name root
  23. VG Name centos
  24. LV UUID 11e11J-MnO5-ZfTG-emOq-pHF1-igRc-Jsw8xb
  25. LV Write Access read/write
  26. LV Creation host, time localhost, 2020-12-20 15:35:11 +0800
  27. LV Status available
  28. # open 1
  29. LV Size <17.00 GiB
  30. Current LE 4351
  31. Segments 1
  32. Allocation inherit
  33. Read ahead sectors auto
  34. - currently set to 8192
  35. Block device 253:0
  36. --- Logical volume ---
  37. LV Path /dev/storage/lvo
  38. LV Name lvo
  39. VG Name storage
  40. LV UUID 6fvmrj-VCNZ-1OVo-ENZg-R7q2-vQ7f-1LYPuF
  41. LV Write Access read/write
  42. LV Creation host, time localhost.localdomain, 2021-02-01 09:31:42 +0800
  43. LV Status available
  44. # open 0
  45. LV Size 148.00 MiB
  46. Current LE 37
  47. Segments 1
  48. Allocation inherit
  49. Read ahead sectors auto
  50. - currently set to 8192
  51. Block device 253:2

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。

  1. [root@localhost ~]# mkfs.ext4 /dev/storage/lvo
  2. mke2fs 1.42.9 (28-Dec-2013)
  3. 文件系统标签=
  4. OS type: Linux
  5. 块大小=1024 (log=0)
  6. 分块大小=1024 (log=0)
  7. Stride=0 blocks, Stripe width=0 blocks
  8. 38000 inodes, 151552 blocks
  9. 7577 blocks (5.00%) reserved for the super user
  10. 第一个数据块=1
  11. Maximum filesystem blocks=33816576
  12. 19 block groups
  13. 8192 blocks per group, 8192 fragments per group
  14. 2000 inodes per group
  15. Superblock backups stored on blocks:
  16. 8193, 24577, 40961, 57345, 73729
  17. Allocating group tables: 完成
  18. 正在写入inode表: 完成
  19. Creating journal (4096 blocks): 完成
  20. Writing superblocks and filesystem accounting information: 完成
  21. [root@localhost ~]# mkdir /mnt/lvo
  22. [root@localhost ~]# mount /dev/storage/lvo /mnt/lvo
  23. [root@localhost ~]# df -h
  24. 文件系统 容量 已用 可用 已用% 挂载点
  25. /dev/mapper/centos-root 17G 1.3G 16G 8% /
  26. devtmpfs 898M 0 898M 0% /dev
  27. tmpfs 910M 0 910M 0% /dev/shm
  28. tmpfs 910M 9.5M 901M 2% /run
  29. tmpfs 910M 0 910M 0% /sys/fs/cgroup
  30. /dev/sda1 1014M 146M 869M 15% /boot
  31. tmpfs 182M 0 182M 0% /run/user/0
  32. /dev/mapper/storage-lvo 140M 1.6M 128M 2% /mnt/lvo
  33. [root@localhost ~]# echo "/dev/storage/lvo /mnt/lvo ext4 defaults 0 0" >> /etc/fstab

扩容逻辑卷

Linux e2fsck命令用于检查使用 Linux ext 档案系统的 partition 是否正常工作(检验ext系列文件系统正确性)

第1步:把上一个实验的逻辑卷lvo扩容至290M

  1. [root@localhost ~]# umount /mnt/lvo
  2. [root@localhost ~]# lvextend -L 290M /dev/storage/lvo
  3. Rounding size to boundary between physical extents: 292.00 MiB.
  4. Size of logical volume storage/lvo changed from 148.00 MiB (37 extents) to 292.00 MiB (73 extents).
  5. Logical volume storage/lvo successfully resized.
  6. [root@localhost ~]# e2fsck -f /dev/storage/lvo
  7. e2fsck 1.42.9 (28-Dec-2013)
  8. 第一步: 检查inode,块,和大小
  9. 第二步: 检查目录结构
  10. 3步: 检查目录连接性
  11. Pass 4: Checking reference counts
  12. 5步: 检查簇概要信息
  13. /dev/storage/lvo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks

第2步:检查文件系统完整性,并重置硬盘容量

  1. [root@localhost ~]# e2fsck -f /dev/storage/lvo
  2. e2fsck 1.42.9 (28-Dec-2013)
  3. 第一步: 检查inode,块,和大小
  4. 第二步: 检查目录结构
  5. 3步: 检查目录连接性
  6. Pass 4: Checking reference counts
  7. 5步: 检查簇概要信息
  8. /dev/storage/lvo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks
  9. [root@localhost ~]# resize2fs /dev/storage/lvo
  10. resize2fs 1.42.9 (28-Dec-2013)
  11. Resizing the filesystem on /dev/storage/lvo to 299008 (1k) blocks.
  12. The filesystem on /dev/storage/lvo is now 299008 blocks long.

第3步:重新挂载硬盘设备并查看挂载状态

  1. [root@localhost ~]# mount -a
  2. [root@localhost ~]# df -h
  3. 文件系统 容量 已用 可用 已用% 挂载点
  4. /dev/mapper/centos-root 17G 1.3G 16G 8% /
  5. devtmpfs 898M 0 898M 0% /dev
  6. tmpfs 910M 0 910M 0% /dev/shm
  7. tmpfs 910M 9.5M 901M 2% /run
  8. tmpfs 910M 0 910M 0% /sys/fs/cgroup
  9. /dev/sda1 1014M 146M 869M 15% /boot
  10. tmpfs 182M 0 182M 0% /run/user/0
  11. /dev/mapper/storage-lvo 279M 2.1M 259M 1% /mnt/lvo

小结:逻辑卷在物理硬盘和文件系统之间的逻辑层,且由下而上顺序不可变。所以扩容时,卸载后先扩容逻辑卷lvextend,然后查看文件系统完整性并充值硬盘容量,最后挂载。(umount -> lvextend -> e2fsck -> resize2fs -> mount)

缩小逻辑卷

第1步:检查文件系统完整性

[root@localhost ~]# e2fsck -f /dev/storage/lvo
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/storage/lvo: 11/74000 files (0.0% non-contiguous), 15507/299008 blocks
[root@localhost ~]# resize2fs /dev/storage/lvo 120M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/lvo to 122880 (1k) blocks.
The filesystem on /dev/storage/lvo is now 122880 blocks long.

第2步:把逻辑卷lvo容量缩小到120M

[root@localhost ~]# resize2fs /dev/storage/lvo 120M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/lvo to 122880 (1k) blocks.
The filesystem on /dev/storage/lvo is now 122880 blocks long.

[root@localhost ~]# lvreduce -L 120M /dev/storage/lvo
  WARNING: Reducing active logical volume to 120.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce storage/lvo? [y/n]: y
  Size of logical volume storage/lvo changed from 292.00 MiB (73 extents) to 120.00 MiB (30 extents).
  Logical volume storage/lvo successfully resized.

第3步:重新挂载文件系统并查看系统状态

[root@localhost ~]# mount -a
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   17G  1.3G   16G    8% /
devtmpfs                 898M     0  898M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M  9.5M  901M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/sda1               1014M  146M  869M   15% /boot
tmpfs                    182M     0  182M    0% /run/user/0
/dev/mapper/storage-lvo  113M  1.6M  103M    2% /mnt/lvo

小结:缩容时,先检查文件系统并重置容量,在缩小逻辑卷大小,最后挂载。
(umount -> e2fsck -> resize2fs -> lvreduce -> mount)

逻辑卷快照

LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷
设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。
快照卷仅一次有效,一旦执行还原操作后立即会被删除。

原理
拍摄快照的一瞬间系统会记录下逻辑卷在这个时间点的状态、数据等,此刻拍摄的快照像一张白纸。

lvm源卷 快照卷
7BC%TS2{8VJS0LR6IF79C2P.pngPR[JO98MQ3WEY_RI1]FXXFL.png
经过一段时间lvm源卷的数据发生改变,如1、2修改为了A、B,此时原本的数据1、2会转移到快照卷里。恢复快照的原理就是将源卷和快照进行合并,源卷里在拍摄快照时没有改变的数据+快照里的数据,就恢复到初始状态。

修改后的lvm源卷 快照卷
ZIP]H99I]K1T)~8B7A_DNTR.png7}XHUU4)(4Z~YZLRVRRG{7O.png
准备:
查看逻辑卷组状态

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               storage
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               9.99 GiB
  PE Size               4.00 MiB
  Total PE              2558
  Alloc PE / Size       30 / 120.00 MiB
  Free  PE / Size       2528 / <9.88 GiB
  VG UUID               ZpHrGj-08fc-eSzO-Syfq-tMDq-O7CQ-xzWi9w

接下来往逻辑卷挂载的目录中写入一个文件

[root@localhost ~]# echo "hello world" > /mnt/lvo/readme.txt
[root@localhost ~]# ls -l /mnt/lvo
总用量 14
drwx------. 2 root root 12288 2月   1 09:32 lost+found
-rw-r--r--. 1 root root    12 2月   1 11:50 readme.txt

第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小。
另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。

[root@localhost ~]# lvcreate -L 120M -s -n SNAP /dev/storage/lvo
  Logical volume "SNAP" created.
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/storage/lvo
  LV Name                lvo
  VG Name                storage
  LV UUID                6fvmrj-VCNZ-1OVo-ENZg-R7q2-vQ7f-1LYPuF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-02-01 09:31:42 +0800
  LV snapshot status     source of
                         SNAP [active]
  LV Status              available
  # open                 1
  LV Size                120.00 MiB
  Current LE             30
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/storage/SNAP
  LV Name                SNAP
  VG Name                storage
  LV UUID                gc5Icr-CJ6R-vXNA-zp4A-1ByC-O6IS-bY0JEh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-02-01 12:00:15 +0800
  LV snapshot status     active destination for lvo
  LV Status              available
  # open                 0
  LV Size                120.00 MiB
  Current LE             30
  COW-table size         120.00 MiB
  COW-table LE           30
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5

第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存
储空间占的用量(Allocated to snapshot)上升了,这就是因为修改前的数据被转移到了快照卷里。

[root@localhost ~]# dd if=/dev/zero of=/mnt/lvo/files count=1 bs=100M
记录了1+0 的读入
记录了1+0 的写出
104857600字节(105 MB)已复制,3.41547 秒,30.7 MB/秒
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/storage/lvo
  LV Name                lvo
  VG Name                storage
  LV UUID                6fvmrj-VCNZ-1OVo-ENZg-R7q2-vQ7f-1LYPuF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-02-01 09:31:42 +0800
  LV snapshot status     source of
                         SNAP [active]
  LV Status              available
  # open                 1
  LV Size                120.00 MiB
  Current LE             30
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/storage/SNAP
  LV Name                SNAP
  VG Name                storage
  LV UUID                gc5Icr-CJ6R-vXNA-zp4A-1ByC-O6IS-bY0JEh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-02-01 12:00:15 +0800
  LV snapshot status     active destination for lvo
  LV Status              available
  # open                 0
  LV Size                120.00 MiB
  Current LE             30
  COW-table size         120.00 MiB
  COW-table LE           30
  Allocated to snapshot  83.71%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5

第3步:恢复快照,对逻辑卷进行快照还原操作。在此之前先卸载。

[root@localhost ~]# umount /mnt/lvo
[root@localhost ~]# lvconvert --merge /dev/storage/SNAP
  Merging of volume storage/SNAP started.
  storage/lvo: Merged: 24.70%
  storage/lvo: Merged: 100.00%

第4步:快照卷会自动被删除,我们发现刚创建的100M垃圾文件也被清除了。

[root@localhost ~]# mount -a
[root@localhost ~]# ls /mnt/lvo
lost+found  readme.txt

删除逻辑卷

第1步:取消逻辑卷与目录的挂在关联,删除配置文件中永久生效的设备参数。

[root@localhost ~]# umount /mnt/lvo
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Dec 20 15:35:12 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=9dc50366-0deb-4a11-bacf-244e2b0a39c0 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

第2步:删除逻辑卷设备,需输入y来确认

[root@localhost ~]# lvremove /dev/storage/lvo
Do you really want to remove active logical volume storage/lvo? [y/n]: y
  Logical volume "lvo" successfully removed

第3步:删除卷组,直接输入卷组名即可,不用设备的绝对路径

[root@localhost ~]# vgremove storage
  Volume group "storage" successfully removed

第4步:删除物理卷设备

[root@localhost ~]# pvremove /dev/sdb /dev/sdc
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.