第七周

一、破坏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


请使用浏览器的分享功能分享到微信等