RAID(独立冗余磁盘阵列)
常见raid级别
RAID 0
如果要存储数据12345678 ,1357存储在disk1上,2468存储在disk2上。![3[NH]XA`RL9SDN(I]P_{7_C.png](/uploads/projects/u427629@ge071f/7592b49cd4f61c811400d136a3cbc5cb.png)
- 读取速率提高
- 没有数据冗余性
- 最少需要两块硬盘组合
-
RAID 1
如果要存1357这四份数据,会将同样的数据存入不同的盘中。
![N4H03_R$$]9KPTKR8{(L@O0.png](/uploads/projects/u427629@ge071f/86835865b28bd4a24a4674d186495b02.png)
读写速率提高
- 具有数据冗余性
- 最少需要两块磁盘
-
RAID 5
如果要存四份数据A、B、C、D,有N块磁盘,将每份数据分成N-1份分别存入不同磁盘,例如:A1、A2、A3 ,然后通过A1、A2、A3计算出来一个Ap存入最后一块盘。
![O9H{6I]NRMDS2%J{KEYFRAN.png](/uploads/projects/u427629@ge071f/4ee04b283205b7b93402a5572b93b01b.png)
具有数据安全性
- 读写速率提高
- 最少需要三块盘
-
RAID 10
如果要存储数据1234567,结合RAID 1存储和RAID 0存储(内层RAID 1,外层RAID 0)

读写速率提高
- 具有数据冗余性
-
RAID 01
先使用RAID 0存储,再使用RAID 1存储

读写速率提高
- 具有数据冗余性
- 有效存储空间N/2块盘
案例一
组件RAID 10阵列
- 添加四块磁盘

- 使用 madam 命令创建软件磁盘阵列
madam常用参数及作用
| 参数 | 作用 |
|---|---|
| -a | 创建模式:是否自动为其创建设备文件 管理模式:添加新硬盘到已有磁盘阵列(如果阵列缺少工作硬盘,则新增加硬盘直接转为工作硬盘;如果阵列不缺工作硬盘,则作为热备磁盘) |
| -n | 指定设备数量 |
| -l | 指定RAID级别 |
| -C | 创建磁盘阵列 |
| -v | 显示过程 |
| -f | 模拟磁盘损坏 |
| -r | 移除磁盘 |
| -Q | 查看摘要信息 |
| -D | 查看详细信息 |
| -S | 停止RAID磁盘阵列 |
| -x | 指定备份盘数量 |
[root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sdemdadm: layout defaults to n2mdadm: layout defaults to n2mdadm: chunk size defaults to 512Kmdadm: size set to 20954112Kmdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.
把制作好的RAID磁盘阵列格式化为ext4
[root@localhost ~]# mkfs.ext4 /dev/md0mke2fs 1.42.9 (28-Dec-2013)Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)Stride=128 blocks, Stripe width=256 blocks2621440 inodes, 10477056 blocks523852 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=2157969408320 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,4096000, 7962624Allocating group tables: doneWriting inode tables: doneCreating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: done
创建挂载点,把硬盘设备进行挂在操作。
[root@localhost ~]# mkdir /RAID[root@localhost ~]# mount /dev/md0 /RAID/[root@localhost ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/centos-root 17G 1.1G 16G 7% /devtmpfs 898M 0 898M 0% /devtmpfs 910M 0 910M 0% /dev/shmtmpfs 910M 9.6M 901M 2% /runtmpfs 910M 0 910M 0% /sys/fs/cgroup/dev/sda1 1014M 146M 869M 15% /boottmpfs 182M 0 182M 0% /run/user/0/dev/md0 40G 49M 38G 1% /RAID
查看/dev/md0磁盘阵列详细信息,并把挂在信息写入配置文件,使其永久生效。
[root@localhost ~]# mdadm -D /dev/md0/dev/md0:Version : 1.2Creation Time : Mon Apr 15 17:43:04 2019Raid Level : raid10Array Size : 41908224 (39.97 GiB 42.91 GB)Used Dev Size : 20954112 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Mon Apr 15 17:44:14 2019State : active, resyncingActive Devices : 4Working Devices : 4Failed Devices : 0Spare Devices : 0Layout : near=2Chunk Size : 512KConsistency Policy : resyncResync Status : 66% completeName : localhost.localdomain:0 (local to hostlocalhost.localdomain)UUID : 9b664b1c:ab2b2fb6:6a00adf6:6167ad51Events : 15Number Major Minor RaidDevice State0 8 16 0 active sync set-A /dev/sdb1 8 32 1 active sync set-B /dev/sdc2 8 48 2 active sync set-A /dev/sdd3 8 64 3 active sync set-B /dev/sde[root@localhost ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
小结:创建->格式化->挂载->查看信息/写入配置文件
损坏磁盘阵列及修复
在确认一块物理盘损坏而不能正常工作时,可以通过mdadm命令将这块物理盘从阵列中移除。我们可以通过 -f 参数模拟这一情况,再查看RAID磁盘阵列状态。
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdbmdadm: set /dev/sdb faulty in /dev/md0[root@localhost ~]# mdadm -D /dev/md0/dev/md0:Version : 1.2Creation Time : Thu Apr 18 09:25:38 2019Raid Level : raid10Array Size : 41908224 (39.97 GiB 42.91 GB)Used Dev Size : 20954112 (19.98 GiB 21.46 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Thu Apr 18 09:28:24 2019State : clean, degradedActive Devices : 3Working Devices : 3Failed Devices : 1Spare Devices : 0Layout : near=2Chunk Size : 512KConsistency Policy : resyncName : localhost.localdomain:0 (local to hostlocalhost.localdomain)UUID : 09c273ff:77fa1bc2:84a934f1:b924fa6eEvents : 27Number Major Minor RaidDevice State- 0 0 0 removed1 8 32 1 active sync set-B /dev/sdc2 8 48 2 active sync set-A /dev/sdd3 8 64 3 active sync set-B /dev/sde0 8 16 - faulty /dev/sdb
sdb已经故障,只有三块盘正在工作。在RAID 10阵列中,损坏一块硬盘并不影响磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/mnt/raid10目录中正常地创建或删除文件。
我们先移除故障盘,然后模拟重启系统,换上新的硬盘,将新的硬盘添加到磁盘阵列中。
[root@localhost ~]# umount /mnt/raid10/[root@localhost ~]# mdadm /dev/md0 -r /dev/sdbmdadm: hot removed /dev/sdb from /dev/md0[root@localhost ~]# mdadm /dev/md0 -a /dev/sdbmdadm: added /dev/sdb[root@localhost ~]# mdadm -D /dev/md0/dev/md0:Version : 1.2Creation Time : Sun Jan 31 11:37:40 2021Raid Level : raid10Array Size : 10475520 (9.99 GiB 10.73 GB)Used Dev Size : 5237760 (5.00 GiB 5.36 GB)Raid Devices : 4Total Devices : 4Persistence : Superblock is persistentUpdate Time : Sun Jan 31 11:56:52 2021State : clean, degraded, recoveringActive Devices : 3Working Devices : 4Failed Devices : 0Spare Devices : 1Layout : near=2Chunk Size : 512KConsistency Policy : resyncRebuild Status : 50% completeName : localhost.localdomain:0 (local to host localhost.localdomain)UUID : 03f2fb89:0839dd5b:74e726d0:5d4e435eEvents : 32Number Major Minor RaidDevice State4 8 16 0 spare rebuilding /dev/sdb1 8 32 1 active sync set-B /dev/sdc2 8 48 2 active sync set-A /dev/sdd3 8 64 3 active sync set-B /dev/sde[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磁盘
阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了。
[root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sdemdadm: layout defaults to left-symmetricmdadm: layout defaults to left-symmetricmdadm: chunk size defaults to 512Kmdadm: size set to 5237760Kmdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.[root@localhost ~]# mdadm -D /dev/md0/dev/md0:Version : 1.2Creation Time : Sun Jan 31 23:42:35 2021Raid Level : raid5Array Size : 10475520 (9.99 GiB 10.73 GB)Used Dev Size : 5237760 (5.00 GiB 5.36 GB)Raid Devices : 3Total Devices : 4Persistence : Superblock is persistentUpdate Time : Sun Jan 31 23:43:16 2021State : cleanActive Devices : 3Working Devices : 4Failed Devices : 0Spare Devices : 1Layout : left-symmetricChunk Size : 512KConsistency Policy : resyncName : localhost.localdomain:0 (local to host localhost.localdomain)UUID : 242d84e0:b8e7a688:5e8c510e:8ff89c57Events : 18Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc4 8 48 2 active sync /dev/sdd3 8 64 - spare /dev/sde
将部署好的RAID 5磁盘阵列格式化为ext4格式,然后写入配置文件、挂载到目录上,之后就可以使用了。
[root@localhost ~]# mkfs.ext4 /dev/md0mke2fs 1.42.9 (28-Dec-2013)文件系统标签=OS type: Linux块大小=4096 (log=2)分块大小=4096 (log=2)Stride=128 blocks, Stripe width=256 blocks655360 inodes, 2618880 blocks130944 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=215167795280 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632Allocating group tables: 完成正在写入inode表: 完成Creating journal (32768 blocks): 完成Writing superblocks and filesystem accounting information: 完成[root@localhost ~]# echo "/dev/md0 /mnt/raid5 ext4 defaults 0 0" >> /etc/fstab[root@localhost ~]# mkdir /mnt/raid5[root@localhost ~]# mount -a
通过 -f 命令模拟sdb损坏,将其移除磁盘阵列,迅速查看磁盘阵列状态,会发现备用盘自动转换为工作盘准备加入到磁盘阵列中。
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdbmdadm: set /dev/sdb faulty in /dev/md0[root@localhost ~]# mdadm -D /dev/md0/dev/md0:Version : 1.2Creation Time : Sun Jan 31 23:42:35 2021Raid Level : raid5Array Size : 10475520 (9.99 GiB 10.73 GB)Used Dev Size : 5237760 (5.00 GiB 5.36 GB)Raid Devices : 3Total Devices : 4Persistence : Superblock is persistentUpdate Time : Sun Jan 31 23:46:43 2021State : clean, degraded, recoveringActive Devices : 2Working Devices : 3Failed Devices : 1Spare Devices : 1Layout : left-symmetricChunk Size : 512KConsistency Policy : resyncRebuild Status : 31% completeName : localhost.localdomain:0 (local to host localhost.localdomain)UUID : 242d84e0:b8e7a688:5e8c510e:8ff89c57Events : 24Number Major Minor RaidDevice State3 8 64 0 spare rebuilding /dev/sde1 8 32 1 active sync /dev/sdc4 8 48 2 active sync /dev/sdd0 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技术
[root@localhost ~]# pvcreate /dev/sdb /dev/sdcPhysical volume "/dev/sdb" successfully created.Physical volume "/dev/sdc" successfully created.
第2步:将两块硬盘加入到storage卷组中,然后查看卷组状态。
[root@localhost ~]# vgcreate storage /dev/sdb /dev/sdcVolume group "storage" successfully created[root@localhost ~]# vgdisplay--- Volume group ---VG Name centosSystem IDFormat lvm2Metadata Areas 1Metadata Sequence No 3VG Access read/writeVG Status resizableMAX LV 0Cur LV 2Open LV 2Max PV 0Cur PV 1Act PV 1VG Size <19.00 GiBPE Size 4.00 MiBTotal PE 4863Alloc PE / Size 4863 / <19.00 GiBFree PE / Size 0 / 0VG UUID JpwX64-A0g9-9KQI-66mw-aHCt-t87g-hSpHNJ--- Volume group ---VG Name storageSystem IDFormat lvm2Metadata Areas 2Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 2Act PV 2VG Size 9.99 GiBPE Size 4.00 MiBTotal PE 2558Alloc PE / Size 0 / 0Free PE / Size 2558 / 9.99 GiBVG UUID ZpHrGj-08fc-eSzO-Syfq-tMDq-O7CQ-xzWi9w
第3步:切割出一个约为150MB的逻辑卷设备。
这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。
第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷。
另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使
用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。
[root@localhost ~]# lvcreate -n lvo -l 37 storageLogical volume "lvo" created.[root@localhost ~]# lvdisplay--- Logical volume ---LV Path /dev/centos/swapLV Name swapVG Name centosLV UUID dBdf6n-w000-61XH-8Rpy-Gx7E-3pFI-rjQVM0LV Write Access read/writeLV Creation host, time localhost, 2020-12-20 15:35:11 +0800LV Status available# open 2LV Size 2.00 GiBCurrent LE 512Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:1--- Logical volume ---LV Path /dev/centos/rootLV Name rootVG Name centosLV UUID 11e11J-MnO5-ZfTG-emOq-pHF1-igRc-Jsw8xbLV Write Access read/writeLV Creation host, time localhost, 2020-12-20 15:35:11 +0800LV Status available# open 1LV Size <17.00 GiBCurrent LE 4351Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:0--- Logical volume ---LV Path /dev/storage/lvoLV Name lvoVG Name storageLV UUID 6fvmrj-VCNZ-1OVo-ENZg-R7q2-vQ7f-1LYPuFLV Write Access read/writeLV Creation host, time localhost.localdomain, 2021-02-01 09:31:42 +0800LV Status available# open 0LV Size 148.00 MiBCurrent LE 37Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:2
第4步:把生成好的逻辑卷进行格式化,然后挂载使用。
[root@localhost ~]# mkfs.ext4 /dev/storage/lvomke2fs 1.42.9 (28-Dec-2013)文件系统标签=OS type: Linux块大小=1024 (log=0)分块大小=1024 (log=0)Stride=0 blocks, Stripe width=0 blocks38000 inodes, 151552 blocks7577 blocks (5.00%) reserved for the super user第一个数据块=1Maximum filesystem blocks=3381657619 block groups8192 blocks per group, 8192 fragments per group2000 inodes per groupSuperblock backups stored on blocks:8193, 24577, 40961, 57345, 73729Allocating group tables: 完成正在写入inode表: 完成Creating journal (4096 blocks): 完成Writing superblocks and filesystem accounting information: 完成[root@localhost ~]# mkdir /mnt/lvo[root@localhost ~]# mount /dev/storage/lvo /mnt/lvo[root@localhost ~]# df -h文件系统 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root 17G 1.3G 16G 8% /devtmpfs 898M 0 898M 0% /devtmpfs 910M 0 910M 0% /dev/shmtmpfs 910M 9.5M 901M 2% /runtmpfs 910M 0 910M 0% /sys/fs/cgroup/dev/sda1 1014M 146M 869M 15% /boottmpfs 182M 0 182M 0% /run/user/0/dev/mapper/storage-lvo 140M 1.6M 128M 2% /mnt/lvo[root@localhost ~]# echo "/dev/storage/lvo /mnt/lvo ext4 defaults 0 0" >> /etc/fstab
扩容逻辑卷
Linux e2fsck命令用于检查使用 Linux ext 档案系统的 partition 是否正常工作(检验ext系列文件系统正确性)
第1步:把上一个实验的逻辑卷lvo扩容至290M
[root@localhost ~]# umount /mnt/lvo[root@localhost ~]# lvextend -L 290M /dev/storage/lvoRounding size to boundary between physical extents: 292.00 MiB.Size of logical volume storage/lvo changed from 148.00 MiB (37 extents) to 292.00 MiB (73 extents).Logical volume storage/lvo successfully resized.[root@localhost ~]# e2fsck -f /dev/storage/lvoe2fsck 1.42.9 (28-Dec-2013)第一步: 检查inode,块,和大小第二步: 检查目录结构第3步: 检查目录连接性Pass 4: Checking reference counts第5步: 检查簇概要信息/dev/storage/lvo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks
第2步:检查文件系统完整性,并重置硬盘容量
[root@localhost ~]# e2fsck -f /dev/storage/lvoe2fsck 1.42.9 (28-Dec-2013)第一步: 检查inode,块,和大小第二步: 检查目录结构第3步: 检查目录连接性Pass 4: Checking reference counts第5步: 检查簇概要信息/dev/storage/lvo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks[root@localhost ~]# resize2fs /dev/storage/lvoresize2fs 1.42.9 (28-Dec-2013)Resizing the filesystem on /dev/storage/lvo to 299008 (1k) blocks.The filesystem on /dev/storage/lvo is now 299008 blocks long.
第3步:重新挂载硬盘设备并查看挂载状态
[root@localhost ~]# mount -a[root@localhost ~]# df -h文件系统 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root 17G 1.3G 16G 8% /devtmpfs 898M 0 898M 0% /devtmpfs 910M 0 910M 0% /dev/shmtmpfs 910M 9.5M 901M 2% /runtmpfs 910M 0 910M 0% /sys/fs/cgroup/dev/sda1 1014M 146M 869M 15% /boottmpfs 182M 0 182M 0% /run/user/0/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源卷 快照卷
![PR[JO98MQ3WEY_RI1]FXXFL.png](/uploads/projects/u427629@ge071f/f5fd662bbdca35a9231663a6ae6085e0.png)
经过一段时间lvm源卷的数据发生改变,如1、2修改为了A、B,此时原本的数据1、2会转移到快照卷里。恢复快照的原理就是将源卷和快照进行合并,源卷里在拍摄快照时没有改变的数据+快照里的数据,就恢复到初始状态。
修改后的lvm源卷 快照卷![ZIP]H99I]K1T)~8B7A_DNTR.png](/uploads/projects/u427629@ge071f/159eaa9e5306f03672ae9467dcbf8573.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.
