我尝试将 mdadm raid6 阵列的大小从 10 减少到 8。
所以我按照以下步骤操作:
pi@raspbian-x64:~ $ sudo mdadm --grow /dev/md0 --raid-devices=8
mdadm: this change will decrease the size of the array.
use --grow --array-size first to truncate array.
e.g. mdadm --grow /dev/md0 --array-size 2928887808
pi@raspbian-x64:~ $ sudo mdadm --grow /dev/md0 --array-size 2928887808
pi@raspbian-x64:~ $ sudo mdadm --grow /dev/md0 --raid-devices=8
mdadm: Cannot set new_offset for /dev/sda1
您知道为什么 mdadm 无法为 /dev/sda1 设置 new_offset 吗?
这是我的数组的详细信息(使用命令后):
pi@raspbian-x64:~ $ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue May 11 07:47:04 2021
Raid Level : raid6
Array Size : 2928887808 (2793.21 GiB 2999.18 GB)
Used Dev Size : 488147968 (465.53 GiB 499.86 GB)
Raid Devices : 10
Total Devices : 8
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Mon Jul 18 02:18:12 2022
State : clean, degraded
Active Devices : 8
Working Devices : 8
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : bitmap
Name : pi1:0
UUID : 4314f81c:4b2f90a0:db6089d4:c5958ee0
Events : 147618
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
- 0 0 3 removed
10 8 65 4 active sync /dev/sde1
9 8 82 5 active sync /dev/sdf2
8 8 81 6 active sync /dev/sdf1
- 0 0 7 removed
7 8 2 8 active sync /dev/sda2
6 8 1 9 active sync /dev/sda1
目前,RAID 阵列中有 46% 的可用空间。因此将阵列减少到 8 个设备应该没问题。
更新1:
我想将设备数量从 10 减少到 7:
newSize = devSize * (totalWantedDeviceCount - raid6deviceIntegrityCount)
newSize = 488147968 * (7 - 2)
newSize = 2440739840 (instead of 3905183744)
所以我设法减小 RAID 阵列文件系统的大小:
sudo resize2fs /dev/md0 2440739840K
(我必须用 修复许多错误sudo e2fsck -f /dev/md0 -y
)
接下来,我减小了 mdadm 中 RAID 阵列的大小:
sudo mdadm --grow /dev/md0 --array-size 2440739840
有效 :
pi@raspbian-x64:~ $ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue May 11 07:47:04 2021
Raid Level : raid6
Array Size : 2440739840 (2327.67 GiB 2499.32 GB)
Used Dev Size : 488147968 (465.53 GiB 499.86 GB)
Raid Devices : 10
Total Devices : 10
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Mon Aug 15 20:57:47 2022
State : clean
Active Devices : 10
Working Devices : 10
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : bitmap
Name : pi1:0
UUID : 4314f81c:4b2f90a0:db6089d4:c5958ee0
Events : 205009
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 33 1 active sync /dev/sdc1
2 8 81 2 active sync /dev/sdf1
5 8 129 3 active sync /dev/sdi1
10 8 113 4 active sync /dev/sdh1
11 8 49 5 active sync /dev/sdd1
8 8 97 6 active sync /dev/sdg1
4 8 17 7 active sync /dev/sdb1
7 8 66 8 active sync /dev/sde2
6 8 65 9 active sync /dev/sde1
我尝试删除 3 个设备,但收到相同的错误:
pi@raspbian-x64:~ $ sudo mdadm --grow /dev/md0 --raid-devices=7
mdadm: Cannot set new_offset for /dev/sda1
更新2:
我没有设法减小数组大小,所以我不得不销毁它并从头开始重新创建一个新数组......
更新3:
我创建了一个脚本来帮助生成必要的命令来运行,以使用 Qbert-Pacman 技巧减小 RAID 阵列的大小:github上的脚本。
让我知道它是否对任何人都有效。
答案1
我希望这些信息有用。在尝试将 raid4 阵列从 8 个 SSD 驱动器减少到 4 个 SSD 驱动器时,我遵循了您记录的相同步骤。
减小了 ext4 文件系统的大小。 调整大小2fs /文件系统2929890816
减小了 mdadm raid4 阵列的大小。 mdadm -G /dev/md0 --数组大小 2929890816
尝试将 mdadm raid4 设备从 8 个 SSD 驱动器减少到 4 个 SSD 驱动器,并收到相同的错误 (mdadm:无法为 /dev/sdX 设置 new_offset)。 mdadm -G /dev/md0 -l4 -n4
我通过添加附加选项来分配备份文件以在重塑过程中保存临时数据来解决此问题。先前的命令已替换为以下命令,解决了 mdadm raid4 收缩问题。
mdadm -G /dev/md0 -l4 -n4 --备份文件 /var/tmp/md0-backup
备份文件已创建并使用大约 10752k 来保存临时数据。执行命令后会出现以下附加输出,以确认备份文件的分配和使用情况。
mdadm:需要备份10752K的临界区。
希望此信息对未来的 mdadm 设备重塑任务有用。