损坏磁盘阵列及修复
在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变。
[root@rhel8-server RAID]# mdadm /dev/md0 -f /dev/nvme0n3
首先我们手动损坏一块硬盘
mdadm: set /dev/nvme0n3 faulty in /dev/md0
[root@rhel8-server RAID]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Jan 15 22:41:06 2022
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Jan 16 00:32:30 2022
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : rhel8-server:0 (local to host rhel8-server)
UUID : 9fd06c28:af2e0d36:eb1a09bb:9fc11b9b
Events : 23
Number Major Minor RaidDevice State
0 259 3 0 active sync set-A /dev/nvme0n2
- 0 0 1 removed
2 259 5 2 active sync set-A /dev/nvme0n4
3 259 6 3 active sync set-B /dev/nvme0n5
1 259 4 - faulty /dev/nvme0n3
在RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/RAID目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到RAID磁盘阵列中。
[root@rhel8-server ~]# mdadm /dev/md0 -a /dev/nvme0n3 添加新的磁盘
mdadm: added /dev/nvme0n3
[root@rhel8-server ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Jan 15 22:41:06 2022
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Jan 16 00:38:13 2022
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 20% complete
Name : rhel8-server:0 (local to host rhel8-server)
UUID : 9fd06c28:af2e0d36:eb1a09bb:9fc11b9b
Events : 34
Number Major Minor RaidDevice State
0 259 3 0 active sync set-A /dev/nvme0n2
4 259 4 1 spare rebuilding /dev/nvme0n3
2 259 5 2 active sync set-A /dev/nvme0n4
3 259 6 3 active sync set-B /dev/nvme0n5
此时发现新添加的硬盘正在重构 ,最后咱们可以 mount -a 来把刚刚的挂载挂上去
磁盘阵列+备份盘
为了避免多个实验之间相互发生冲突,我们需要保证每个实验的相对独立性,为此需要大家自行将虚拟机还原到初始状态。
部署RAID 5磁盘阵列时,至少需要用到3块硬盘,还需要再加一块备份硬盘,所以总计需要在虚拟机中模拟4块硬盘设备
现在创建一个RAID 5磁盘阵列+备份盘。在下面的命令中,参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。当查看/dev/md0(即RAID 5磁盘阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了。
[root@Rhel8-server ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4 /dev/nvme0n5
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@Rhel8-server ~]# mdadm -D /dev/md0 此时我们查看状态 发现有一块备份盘
/dev/md0:
Version : 1.2
Creation Time : Sun Jan 16 00:49:59 2022
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Jan 16 00:51:43 2022
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : Rhel8-server:0 (local to host Rhel8-server)
UUID : 979697a4:91ab01f9:0c473946:eae30a37
Events : 18
Number Major Minor RaidDevice State
0 259 3 0 active sync /dev/nvme0n2
1 259 4 1 active sync /dev/nvme0n3
4 259 5 2 active sync /dev/nvme0n4
3 259 6 - spare /dev/nvme0n5
[root@Rhel8-server ~]# mkfs.ext4 /dev/md0
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 10477056 4k blocks and 2621440 inodes
Filesystem UUID: 49cb7391-3773-4b16-b440-05e58bc8590f
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
[root@Rhel8-server ~]# mkdir /RAID
[root@Rhel8-server ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
[root@Rhel8-server ~]# cat /etc/fstab
[root@Rhel8-server ~]# mount -a
[root@Rhel8-server ~]# mdadm /dev/md0 -f /dev/nvme0n3 手动损坏一块硬盘
mdadm: set /dev/nvme0n3 faulty in /dev/md0
[root@Rhel8-server ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Jan 16 00:49:59 2022
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Jan 16 01:02:49 2022
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 10% complete
Name : Rhel8-server:0 (local to host Rhel8-server)
UUID : 979697a4:91ab01f9:0c473946:eae30a37
Events : 24
Number Major Minor RaidDevice State
0 259 3 0 active sync /dev/nvme0n2
3 259 6 1 spare rebuilding /dev/nvme0n5
4 259 5 2 active sync /dev/nvme0n4
1 259 4 - faulty /dev/nvme0n3
备份硬盘自动顶上 开始重构。
磁盘管理
分区: 将磁盘划分为多个逻辑上的存储单元,这些单元称之为分区,对不同的分区,执行不同的功能
为了让系统能够识别和管理物理设备上的不同分区,需要在物理设备前加上一些数据用于记录分区的情况,这些数据就是分区表数据,目前分区表有两种主流的格式:
MBR
分区类型: 主分区 扩展分区 逻辑分区
限制:最多只有四个主分区,而且硬盘最大是2TB
管理的硬盘大小不能超过2T
有主分区和扩展分区两种,不管是哪种分区,总数不能超过4个分区
扩展分区内部可以逻辑上划分多个区域,但是在分区表中都算在一个分区内
如果作为系统盘,必须要设置一个激活分区,用于存放系统的引导文件
GPT:提供使用全局唯一的GUID来识别磁盘和分区
提供分区表备份功能,主GPT位于磁盘头部,备份GPT位于磁盘尾部
限制:最多128个分区 磁盘最大8ZIB
分区工具 : fdisk(适合MBR) gdisk (适合GPT) parted (全适合)
实验1使用parted来做磁盘分区
首先从vmware加入一块nvme的硬盘到虚拟机上
[root@192 ~]# lsblk 首先查看增加的这块硬盘的名称
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 6.6G 0 rom /run/media/root/RHEL-8-0-0-BaseOS-x86_64
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
nvme0n2 259:3 0 20G 0 disk
通过命令查看,硬盘已经存在 名字叫nvme0n2
使用分区工具parted
parted的操作都是实时生效的,小心使用 !!!!
实验1使用parted来做磁盘分区
首先从VMware加入一块nvme的磁盘到rhel虚拟机上
[root@example ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 6.6G 0 rom /run/media/root/RHEL-8-0-0-BaseOS-x86_64
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
nvme0n2 259:3 0 20G 0 disk
通过命令查看,磁盘已经存在 名字叫nvme0n2
注意磁盘的位置在/dev/目录下
使用分区工具parted
[root@example dev]# parted /dev/nvme0n2
GNU Parted 3.2
Using /dev/nvme0n2
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition
quit exit program
rescue START END rescue a lost partition near START and END
resizepart NUMBER END resize partition NUMBER
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU Parted
首先因为我们这块磁盘没有定义磁盘类型
(parted) print
Error: /dev/nvme0n2: unrecognised disk label
Model: NVMe Device (nvme)
Disk /dev/nvme0n2: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
磁盘报错,因为没有选择磁盘类型
(parted) mklabel
New disk label type? msdos 使用mklabel,把这块磁盘类型变成msdos(MBR) 或者gpt
(parted) print
Model: NVMe Device (nvme)
Disk /dev/nvme0n2: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
此时我们已经选好了磁盘类型,print可以查看磁盘的相关配置,接下来可以开始做分区
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? xfs
Start? 1M
End? 2048M
检查分区是否完成
(parted) print
Model: NVMe Device (nvme)
Disk /dev/nvme0n2: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 2048MB 2047MB primary xfs lba
接着可以创建第二块磁盘
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? ext2
Start? 2049M
End? 10241M
(parted) print
Model: NVMe Device (nvme)
Disk /dev/nvme0n2: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 2048MB 2047MB primary
2 2049MB 10.2GB 8193MB primary ext2 lba
如何删除磁盘
rm Number 即可直接把一块分区删除
rm 1
rm 2
quit退出
关于parted操作命令:
cp [FROM-DEVICE] FROM-MINOR TO-MINOR #将文件系统复制到另一个分区
help [COMMAND] #打印通用求助信息,或关于 COMMAND 的信息
mklabel 标签类型 #创建新的磁盘标签 (分区表)
mkfs MINOR 文件系统类型 #在 MINOR 创建类型为“文件系统类型”的文件系统
mkpart 分区类型 [文件系统类型] 起始点 终止点 #创建一个分区
mkpartfs 分区类型 文件系统类型 起始点 终止点 #创建一个带有文件系统的分区
move MINOR 起始点 终止点 #移动编号为 MINOR 的分区
name MINOR 名称 #将编号为 MINOR 的分区命名为“名称”
print [MINOR] #打印分区表,或者分区
quit #退出程序
rescue 起始点 终止点 #挽救临近“起始点”、“终止点”的遗失的分区
resize MINOR 起始点 终止点 #改变位于编号为 MINOR 的分区中文件系统的大小
rm MINOR #删除编号为 MINOR 的分区
select 设备 #选择要编辑的设备
set MINOR 标志 状态 #改变编号为 MINOR 的分区的标志
实验2使用fdisk来做磁盘分区
fdisk不是实时的,最后一定要输入w命令保存,所以Be careful before using the write command。
首先可以fdisk -l 查看所有磁盘的状态
[root@example dev]# fdisk /dev/nvme0n2 使用fdisk来创建磁盘
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.
Command (m for help): m 输入m来获取命令帮助
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
首先要查看一下目前这块磁盘的分区
Command (m for help): p
Disk /dev/nvme0n2: 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: 0xba92ef52
接着开始创建分区
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): 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/nvme0n2: 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: 0xba92ef52
Device Boot Start End Sectors Size Id Type
/dev/nvme0n2p1 2048 4196351 4194304 2G 83 Linux
分区1已结创建成功,就下来创建一个10G的主分区2
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (4196352-41943039, default 4196352):
Last sector, +sectors or +size{K,M,G,T,P} (4196352-41943039, default 41943039): +10G
Created a new partition 2 of type 'Linux' and of size 10 GiB.
Command (m for help): p
Disk /dev/nvme0n2: 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: 0xba92ef52
Device Boot Start End Sectors Size Id Type
/dev/nvme0n2p1 2048 4196351 4194304 2G 83 Linux
/dev/nvme0n2p2 4196352 25167871 20971520 10G 83 Linux
分区2也创建成功
分区的删除:
Command (m for help): d
Partition number (1,2, default 2): 1
Partition 1 has been deleted.
Command (m for help): d
Selected partition 2
Partition 2 has been deleted.
注意:fdisk是不会把分区直接做成文件系统的,fdisk做出来的分区需要手动做成文件系统
[root@192 ~]# mkfs.ext4 /dev/nvme0n2p1
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 1310720 4k blocks and 327680 inodes
Filesystem UUID: a9ee1dee-0997-497f-8684-8b218dcf42e0
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
我们也可以修改一个分区的文件系统(格式化命令)
注意:里面所有内容全都没了
[root@192 ~]# mkfs.xfs -f /dev/nvme0n2p1
meta-data=/dev/nvme0n2p1 isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0