一、破坏mbr表并修复
(1)备份分区表信息
[root@CentOS8 ~]#dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446 [root@CentOS8 ~]#ll /data/dpt.img -rw-r--r--. 1 root root 64 Apr 20 18:49 /data/dpt.img [root@CentOS8 ~]#scp !* 10.0.0.207:/data
(2)破环分区表
[root@CentOS8 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446 [root@CentOS8 ~]#hexdump -C -n 512 /dev/sda -v [root@CentOS8 ~]#fdisk -l [root@CentOS8 ~]#reboot

(3)恢复
进入rescue并配置网络 sh-4.4# ip a a 10.0.0.8/24 dev ens33 sh-4.4# ping 10.0.0.207 sh-4.4# scp 10.0.0.207:/data/dpt.img . sh-4.4# ls -l dpt.img -rw-r--r--. 1 root root 64 Apr 20 19:10 dpt.img sh-4.4# dd if=dpt.img of=/dev/sda bs=1 seek=446 sh-4.4# reboot
二、总结RAID的各个级别及其组合方式和性能的不同。
-
RAID 解析
1.RAID 0
(1)将几块磁盘并行组合,横向写数据
(2)并发IO,写数据最快
缺点:不提供数据冗余,如果其中一块磁盘废掉,则数据全毁
详细:条带深度大时,一次IO 只能从一块磁盘上读取,无性能提升。要在某种程度上提升性能,需要减小条带深度。
2.RAID 1
(1)一块磁盘写,另一块作为备份,也在相同的位置写。
(2)当一块磁盘废掉或者磁盘某区域坏掉,则读取另外一个磁盘。
(3)写性能等于最低那块硬盘的写性能。
优点:
(1)提供初步数据保护
(2)虽然额外多了一个操作,但是写速度也很快
缺点:
速度太慢,一个写另一个也必须写
与RAID 0 的不同:
RAID 0 没有数据保护措施, RAID 1 数据有两份
3.RAID 2
(1)每两块数据盘就有一块校验盘(海明校验码)
(2)当数据损坏时通过校验码可恢复损坏磁盘上的数字,每次只能传输 2 路数据,因数据盘就两块。
(3)并存并取
缺点:1)数据存储时数据位被强行打散在两块磁盘上,每次读取数据都要两块磁盘联动
2)利用海明码开销太大
详细:
4 块数据盘, 3 块校验盘。假设 RAID 2 条带大小为4b (1b*4 块),控制器接收到 IO 的数据之后第一块磁盘写入1 5 9 13 等位,第二块磁盘写入2 6 10 14
等位,第三第四块磁盘相同,此时全盘读写,数据物理不连续,逻辑连续,导致对非事务性IO 效率低下。适合连续,大块IO 的情况
与RAID 0 的不同:
不能并发,每次IO 都占据了所有磁盘;每次都保证所有磁盘运行
4.RAID 3
(1)只留一块校验盘,将数据每一位之间做异或XOR 运算,任何一个扇区损坏通过剩余未和校验位一同进行异或运算,得到丢失位, 8 位一起校验则得到损坏的一个字节。
(2)条带深度小,将IO 分成小块每个块4KB ,让每个磁盘都有机会存储这些小块,这样多磁盘并行读写,性能高。
(3)XOR 只能判断数据是否有误,不能修正数据
缺点:校验盘会成为热点盘;每次IO 都需要牵动所有磁盘,和RAID 一样,不适合并发IO
详细:
每一个条带设计为OS 系统块的大小,深度随磁盘数量而定,最小为 1 个扇区;每个条带一般为OS 系统块长度,写数据时按数据块分散到各个磁盘。
优化方案 RAID 30 采用8 个数据盘, 2 个校验盘可以支持2 个IO 并发。
与RAID 2 的不同:
RAID 2 对扇区进行分散, RAID 3 保留了扇区的物理连续, 以一个或多个扇区为单位来分散数据。
5.RAID 4
(1)为了实现并发IO,需要保证有空闲的磁盘未被IO 占用,以便其他的IO进行访问。
(2)如果IO 块小于RAID 3 的条带深度(横向写),则数据纵向写,只放在一个磁盘上。
缺点:
校验盘无法并发,每次都读写,会成为热点盘,损坏几率大;写速度很慢
6.RAID 5
(1)是RAID 0 和RAID 1 的折中方案。
(2)将校验盘打散到各个盘之中,并发IO 可以同时访问校验盘,克服了校验盘不能并发成为热点盘的缺点。
缺点:写惩罚高,根本原因在于每次扇区都要产生其校验区写入校验盘; 每一次写都要先读出老数据, 然后读校验数据, 然后写新数据和校验数据; 只能坏一块磁盘
详细:
校验segment 循环分布在相邻条带上。为保证并发IO ,将条带做的较大,以保证每次IO 数据不会占满整个条带,造成其他IO 等待。要保证高并发率,否则会转成读改写,写惩罚高。
7.RAID 6
(1)为了解决两块数据盘损坏无法恢复的情况
(2)布尔运算两个方程式, x XOR y = 1 ,Ax XOR Bx = 0 ,求解
缺点:比RAID 5 多两个操作,多读一个校验数据,计算后还要写一次
-
整条写、重构写和读改写
1.整条写
每个条带上的segment 都更新,不需要额外的读写操作,写性能最好
2.重构写
当需要写入的磁盘数目超过阵列磁盘的一半时采取该方式
(1)从不需要修改的segment 中读取原来的数据,再和本条带中所有需要修改的segment 上的新数据一起计算XOR 校验值
(2)将新的segment 数据和没有更新过的segment 数据以及新的XOR 校验值一起写入
例如:
数据盘为8 块,某个时刻一个IO 只更新了一个条带的6 个segment ,剩余两个没有更新。在重构写模式下,会将没有更新的两个segment 数据读出,和需要更行的前6 个segment 计算出校验数据, 然后数据和校验信息一起写入磁盘
与整条写的比较:
多出读segment 数据操作和写校验数据操作
3.读改写
当需要写入的磁盘数目不超过一半时采取
(1)从需要修改的segment 中读取旧数据,再从条带上读取旧的奇偶校验值(读)
(2)根据旧数据、旧校验值和需要修改的segment 上的新数据计算这个条带上的新校验值(改)
(3)写入新的数据和校验值(写)
三、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统 ext4,卷标为TEST,
要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项
1、添加一块20G的硬盘并扫描
[root@CentOS8 ~]#echo '- - -' > /sys/class/scsi_host/host2/scan [root@CentOS8 ~]#lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 50G 0 part /data ├─sda3 8:3 0 4G 0 part [SWAP] ├─sda4 8:4 0 1K 0 part └─sda5 8:5 0 80G 0 part / sdb 8:16 0 20G 0 disk sr0 11:0 1 7G 0 rom
2、对硬盘/dev/sdb进行分区,大小为2G
[root@CentOS8 ~]#fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x7dfaecad.
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7dfaecad
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +2G
Created a new partition 1 of type 'Linux' and of size 2 GiB.
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7dfaecad
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@CentOS8 ~]#fdisk -l /dev/sdb
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7dfaecad
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
3、创建文件系统块大小为2048byte,预留1%可用空间,文件系统 ext4,卷标为TEST
[root@CentOS8 ~]#mke2fs -t ext4 -b 2048 -m 1 -L TEST /dev/sdb1 mke2fs 1.45.6 (20-Mar-2020) Creating filesystem with 1048576 2k blocks and 131072 inodes Filesystem UUID: 8e6ed606-e250-48f7-8e63-dd5a8e08da2a Superblock backups stored on blocks: 16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done [root@CentOS8 ~]#lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 ccb9e34d-a43a-4276-a697-d8ce684cd699 /boot ├─sda2 xfs 759de453-b2ff-4553-8e01-e830d2f2468f /data ├─sda3 swap 84faeb9d-3694-40bb-b0c9-f55047d09799 [SWAP] ├─sda4 └─sda5 xfs 19cfb9c8-bd59-4c52-8403-70527758bf86 / sdb └─sdb1 ext4 TEST 8e6ed606-e250-48f7-8e63-dd5a8e08da2a
4、设置开机自动挂载
[root@CentOS8 ~]#blkid /dev/sdb1 /dev/sdb1: LABEL="TEST" UUID="8e6ed606-e250-48f7-8e63-dd5a8e08da2a" TYPE="ext4" PARTUUID="7dfaecad-01" [root@CentOS8 ~]#echo "UUID=8e6ed606-e250-48f7-8e63-dd5a8e08da2a /test ext4 defaults 0 0" >> /etc/fstab;cat /etc/fstab [root@CentOS8 ~]#mkdir /test;mount -a;lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 ccb9e34d-a43a-4276-a697-d8ce684cd699 /boot ├─sda2 xfs 759de453-b2ff-4553-8e01-e830d2f2468f /data ├─sda3 swap 84faeb9d-3694-40bb-b0c9-f55047d09799 [SWAP] ├─sda4 └─sda5 xfs 19cfb9c8-bd59-4c52-8403-70527758bf86 / sdb └─sdb1 ext4 TEST 8e6ed606-e250-48f7-8e63-dd5a8e08da2a /test sr0 iso9660 CentOS-8-1-1911-x86_64-dvd 2020-01-03-21-42-40-00
5、查看是否有acl权限
[root@CentOS8 ~]#dumpe2fs -h /dev/sdb1 Default mount options: user_xattr acl
四、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小 为16MB,
而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
1、添加硬盘并识别
[root@CentOS8 ~]#lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 50G 0 part /data ├─sda3 8:3 0 4G 0 part [SWAP] ├─sda4 8:4 0 1K 0 part └─sda5 8:5 0 80G 0 part / sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 2G 0 part /test sdc 8:32 0 15G 0 disk sdd 8:48 0 5G 0 disk sr0 11:0 1 7G 0 rom
2、创建pv
[root@CentOS8 ~]#pvcreate /dev/sdc /dev/sdd [root@CentOS8 ~]#pvs PV VG Fmt Attr PSize PFree /dev/sdc lvm2 --- 15.00g 15.00g /dev/sdd lvm2 --- 5.00g 5.00g [root@CentOS8 ~]#pvdisplay "/dev/sdc" is a new physical volume of "15.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc VG Name PV Size 15.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID GNtOUt-wkOL-y1zp-WqnQ-5Yya-TcIK-fjBW7Y "/dev/sdd" is a new physical volume of "5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdd VG Name PV Size 5.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID wS0exJ-G9zc-4Xlu-xqet-ESFy-Toql-fFiP3r
3、创建vg名称为testvg,并指定pe大小为16m
[root@CentOS8 ~]#vgcreate -s 16M testvg /dev/sdc /dev/sdd [root@CentOS8 ~]#vgs VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- <19.97g <19.97g [root@CentOS8 ~]#vgdisplay --- Volume group --- VG Name testvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size <19.97 GiB PE Size 16.00 MiB Total PE 1278 Alloc PE / Size 0 / 0 Free PE / Size 1278 / <19.97 GiB VG UUID eJGHGb-LHdR-I9Br-hwzM-1FsI-Aw2H-8MzYdn
4、创建lv名称为testlv,从testvg获取大小为5g的空间
[root@CentOS8 ~]#lvcreate -n testlv -L 5G testvg [root@CentOS8 ~]#lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-a----- 5.00g [root@CentOS8 ~]#lvdisplay --- Logical volume --- LV Path /dev/testvg/testlv LV Name testlv VG Name testvg LV UUID a9advS-AVsz-WiGY-YNLV-6GIa-BWgP-9ZNXuF LV Write Access read/write LV Creation host, time CentOS8, 2021-04-22 10:18:20 +0800 LV Status available # open 0 LV Size 5.00 GiB Current LE 320 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0 映射关系 [root@CentOS8 ~]#ll /dev/testvg/testlv lrwxrwxrwx. 1 root root 7 Apr 22 10:18 /dev/testvg/testlv -> ../dm-0 [root@CentOS8 ~]#ll /dev/mapper/testvg-testlv lrwxrwxrwx. 1 root root 7 Apr 22 10:18 /dev/mapper/testvg-testlv -> ../dm-0
5、创建/users并挂载
[root@CentOS8 ~]#mkfs.ext4 /dev/testvg/testlv [root@CentOS8 ~]#blkid /dev/mapper/testvg-testlv: UUID="d52c722c-378f-4636-937a-6cbe08c497fc" TYPE="ext4" [root@CentOS8 ~]#echo "UUID=d52c722c-378f-4636-937a-6cbe08c497fc /users ext4 defaults 0 0" >> /etc/fstab;cat /etc/fstab [root@CentOS8 ~]#mkdir /users;mount -a;df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 967M 0 967M 0% /dev tmpfs 983M 0 983M 0% /dev/shm tmpfs 983M 9.1M 974M 1% /run tmpfs 983M 0 983M 0% /sys/fs/cgroup /dev/sda5 80G 4.8G 76G 7% / /dev/sda2 50G 390M 50G 1% /data /dev/sda1 976M 123M 787M 14% /boot tmpfs 197M 4.0K 197M 1% /run/user/0 /dev/sdb1 2.0G 9.1M 2.0G 1% /test /dev/mapper/testvg-testlv 4.9G 20M 4.6G 1% /users