mdadm raid 6 阵列减少错误无法为 /dev/sda1 设置 new_offset

mdadm raid 6 阵列减少错误无法为 /dev/sda1 设置 new_offset

我尝试将 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 设备重塑任务有用。

相关内容