littlebat@learndiary:~$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): g
Created a new GPT disklabel (GUID: DD83BD1C-0C54-D749-9449-CE6720FD93F5).
The old dos signature will be removed by a write command.
Command (m for help): n
Partition number (1-128, default 1):
First sector (2048-16777182, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-16777182, default 16777182): +8092M
Created a new partition 1 of type 'Linux filesystem' and of size 7.9 GiB.
Command (m for help): t
Selected partition 1
Partition type (type L to list all types): 29
Changed type of partition 'Linux filesystem' to 'Linux RAID'.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
littlebat@learndiary:~$
然后,我们如上篇日记一样用 mdadm 创建一个 RAID10 软阵列。主要命令如下:
sudo mdadm --create --verbose --level=10 --raid-devices=4 /dev/md/r10a1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u
sudo mkfs.ext4 -L R10P /dev/md/r10a1
sudo mkdir /mnt/tmp -v
sudo mount /dev/md/r10a1 /mnt/tmp -v
sudo cp /usr/src /mnt/tmp/ -a # 复制一些测试数据到阵列上面的文件系统中
ls /mnt/tmp
sudo du -sh /mnt/tmp
二、阵列大小及阵列成员使用大小
首先查看阵列信息如下:
littlebat@learndiary:~$ sudo mdadm --detail /dev/md/r10a1
/dev/md/r10a1:
Version : 1.2
Creation Time : Sun Apr 17 18:21:11 2022
Raid Level : raid10
Array Size : 16562176 (15.79 GiB 16.96 GB)
Used Dev Size : 8281088 (7.90 GiB 8.48 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Apr 17 18:27:39 2022
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : learndiary:r10a1 (local to host learndiary)
UUID : 48fb1616:db1a15f8:9ca99ea4:1b32a56d
Events : 17
Number Major Minor RaidDevice State
0 8 17 0 active sync set-A /dev/sdb1
1 8 33 1 active sync set-B /dev/sdc1
2 8 49 2 active sync set-A /dev/sdd1
3 8 65 3 active sync set-B /dev/sde1
然后,用 fdisk 查看相关设备大小:
littlebat@learndiary:~$ sudo fdisk -l | grep dev | grep -v sda
Disk /dev/sdb: 8 GiB, 8589934592 bytes, 16777216 sectors
/dev/sdb1 2048 16574463 16572416 7.9G Linux RAID
Disk /dev/sdc: 8 GiB, 8589934592 bytes, 16777216 sectors
/dev/sdc1 2048 16574463 16572416 7.9G Linux RAID
Disk /dev/sdd: 8 GiB, 8589934592 bytes, 16777216 sectors
/dev/sdd1 2048 16574463 16572416 7.9G Linux RAID
Disk /dev/sde: 8 GiB, 8589934592 bytes, 16777216 sectors
/dev/sde1 2048 16574463 16572416 7.9G Linux RAID
Disk /dev/md127: 15.8 GiB, 16959668224 bytes, 33124352 sectors
其中,阵列信息里有2个参数是这里要讨论的,如下:
Array Size : 16562176 (15.79 GiB 16.96 GB)
Used Dev Size : 8281088 (7.90 GiB 8.48 GB)
(首发地址:学习日记 https://www.learndiary.com/2022/04/linux-mdadm-raid10-2/ )
我在前面一则日记中在 VirtualBox Deepin Linux 虚拟机里演示一下用 mdadm 创建 RAID10 软陈列。今天补充一些我觉得在使用 RAID10 软阵列时值得注意的事项。包括:磁盘分区、阵列成员大小、添加阵列成员命令 --add 和 --re-add 区别及添加阵列成员顺序。测试的环境是 VirtualBox 里面的 Deepin 20.5 Linux,内核版本 5.10.101,mdadm – V4.1 – 2018-10-01。视频演示地址:
https://www.bilibili.com/video/BV1rB4y127KT?share_source=copy_web一、磁盘分区
尽管一块磁盘可以不分区直接作为阵列成员,但强烈推荐使用分区并使用GPT分区类型。并且,在分区时,在磁盘末尾留下约100MiB的未分配空间。这是因为在 RAID10 中,当需要替换损坏的磁盘时,新换上的阵列成员容量必须大于或等于原来的,不分区且未留未分配空间的话,如果新换上的磁盘恰好比原来的磁盘小一点点,替换就会失败。
使用 GPT 分区是因为大多数阵列用户使用的磁盘会大于 2TiB,而老式的 MBR 分区表不支持大于 2TiB 的分区。
这里使用4块8GiB大小的虚拟磁盘。都使用 fdisk 分区,分区表选择 GPT,分区大小选择 8092M(MiB),分区类型选 ID 为 29 的 Linux RAID,末尾留 100MiB 不分配。
示例如下:
然后,我们如上篇日记一样用 mdadm 创建一个 RAID10 软阵列。主要命令如下:
二、阵列大小及阵列成员使用大小
首先查看阵列信息如下:
然后,用 fdisk 查看相关设备大小:
其中,阵列信息里有2个参数是这里要讨论的,如下:
Array Size : 16562176 (15.79 GiB 16.96 GB)
Used Dev Size : 8281088 (7.90 GiB 8.48 GB)
“Array Size”就是阵列大小,这里是165621761024=16,959,668,224 bytes,跟 fdisk 报告的 /dev/md127 的一致。 “Used Dev Size”就是阵列成员使用大小,这个大小在 RAID10 中指成员容量最小的那个容量大小,在这里,我们每个阵列成员都是一样的大小,即是 82810881024=8,479,834,112 bytes。fdisk 报告的阵列成员分区大小是 16572416*512=8,485,076,992 bytes。前者比后者要小 5MiB,我猜测应该是阵列成员组成阵列的过程中额外的消耗。
下面,我们通过一个测试来再次验证一下 “Used Dev Size” 的含义。我们把阵列删除,重建一个 RAID10 阵列,前3个阵列成员分区大小不变,第4个成员使用前面在磁盘末尾留的那个未分配完空间中的 90MiB 的分区。看看建成的阵列的“Array Size”和“Used Dev Size”如何。
然后,执行 fdisk /dev/sde,增加第2个分区,类型仍为 ID 是 29 的“Linux RAID”,大小是90M(MiB)。
然后,以 /dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde2 为成员组建 RAID10 软阵列。