我有一个Linux软件Raid6阵列(mdadm)。我将其从 6x4TB 磁盘(16TB 可用)增加到 7x4TB(20TB 可用)。重塑过程顺利,但当我执行 resize2fs 时,我遇到了众所周知的 EXT4 16TB 文件系统限制问题。我检查过,文件系统没有 64 位标志。因此,为了回收我刚刚添加到阵列中的额外驱动器,我这样做了:
johnny@debian:~$ sudo resize2fs /dev/md0 16000G
johnny@debian:~$ sudo mdadm --grow /dev/md0 --array-size=16000G
johnny@debian:~$ sudo mdadm --grow /dev/md0 --raid-devices=6 --backup-file=/tmp/backup
注意备份文件位置。这很快就会变得很重要,因为我使用的是 Debian。
所以事情进展顺利,缓慢但有效。进度达到了 3.7%,并且速度慢得像爬行一样。我以为这是因为我在同一时间重塑了其他一些数组。当其他工作完成而这项工作没有加快时,我真的很担心。因为它说需要几年时间才能完成,所以我决定重新启动,看看它是否会加快速度,所以我重新启动了系统。
这是不好的事情开始发生的时候......
我使用的是 Debian,据我所知,当系统启动时 /tmp 文件夹会被清除,因此我的重塑备份文件丢失了。另外,因为我的 /etc/fstab 文件正在尝试挂载 md0,但它现在没有组装,所以系统几次无法启动。我从 live CD 开始修复 fstab 文件并使系统恢复正常。
当我解决这个问题后,系统就启动了,这是我第一次看到 md0 不是简单地自行组装并继续重塑。恐慌袭来……
我没有以下命令的输出,但我设法找到了我输入的命令。简要解释接下来发生的事情......
johnny@debian:~$ sudo mdadm --assemble /dev/md0
johnny@debian:~$ sudo mdadm --assemble --force /dev/md0
johnny@debian:~$ sudo mdadm --assemble --force /dev/md0 --backup-file=/tmp/backup
第一个命令失败了,所以我尝试了 --force 选项,它也失败了,但错误消息告诉我失败是因为它需要 --backup-file 选项,所以我运行了第三个命令。我预计备份文件仍然存在,但事实并非如此,因为它位于 /tmp 文件夹中并且已被删除。但这似乎并没有造成任何问题,因为阵列已组装完毕。
md0 现在的样子如下。请注意标记为“已移除”的磁盘。我怀疑这是被移除的磁盘 sdj1。
johnny@debian:~$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Jan 11 09:59:42 2013
Raid Level : raid6
Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
Used Dev Size : 3906887168 (3725.90 GiB 4000.65 GB)
Raid Devices : 6
Total Devices : 6
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sat Mar 5 20:45:56 2016
State : clean, degraded, reshaping
Active Devices : 6
Working Devices : 6
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Reshape Status : 3% complete
Delta Devices : -1, (7->6)
Name : BigRaid6
UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
Events : 4339739
Number Major Minor RaidDevice State
11 8 224 0 active sync /dev/sdo
2 0 0 2 removed
6 8 80 2 active sync /dev/sdf
7 8 176 3 active sync /dev/sdl
12 8 16 4 active sync /dev/sdb
8 8 32 5 active sync /dev/sdc
9 8 128 6 active sync /dev/sdi
这是目前重塑的进度。请注意,它完全停留在 0K/秒。
johnny@debian:~$ cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid6 sdo[11] sdi[9] sdc[8] sdb[12] sdl[7] sdf[6]
15627548672 blocks super 1.2 level 6, 512k chunk, algorithm 2 [6/5] [U_UUUU]
[>....................] reshape = 3.7% (145572864/3906887168) finish=284022328345.0min speed=0K/sec
bitmap: 5/30 pages [20KB], 65536KB chunk
unused devices: <none>
以下是仍在阵列中的各个光盘。
johnny@debian:~$ sudo mdadm --examine /dev/sd[oflbci]
/dev/sdb:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x5
Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
Name : BigRaid6
Creation Time : Fri Jan 11 09:59:42 2013
Raid Level : raid6
Raid Devices : 6
Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
Unused Space : before=262064 sectors, after=688 sectors
State : clean
Device UUID : 99b0fbcc:46d619bb:9ae96eaf:840e21a4
Internal Bitmap : 8 sectors from superblock
Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
Delta Devices : -1 (7->6)
Update Time : Sat Mar 5 20:45:56 2016
Checksum : fca445bd - correct
Events : 4339739
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 4
Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x5
Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
Name : BigRaid6
Creation Time : Fri Jan 11 09:59:42 2013
Raid Level : raid6
Raid Devices : 6
Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
Unused Space : before=262064 sectors, after=688 sectors
State : clean
Device UUID : b8d49170:06614f82:ad9a38a4:e9e06da5
Internal Bitmap : 8 sectors from superblock
Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
Delta Devices : -1 (7->6)
Update Time : Sat Mar 5 20:45:56 2016
Checksum : 5d867810 - correct
Events : 4339739
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 5
Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdf:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x5
Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
Name : BigRaid6
Creation Time : Fri Jan 11 09:59:42 2013
Raid Level : raid6
Raid Devices : 6
Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
Unused Space : before=262064 sectors, after=688 sectors
State : clean
Device UUID : dd56062c:4b55bf16:6a468024:3ca6bfd0
Internal Bitmap : 8 sectors from superblock
Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
Delta Devices : -1 (7->6)
Update Time : Sat Mar 5 20:45:56 2016
Checksum : 59045f87 - correct
Events : 4339739
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 2
Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdi:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x5
Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
Name : BigRaid6
Creation Time : Fri Jan 11 09:59:42 2013
Raid Level : raid6
Raid Devices : 6
Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
Unused Space : before=262064 sectors, after=688 sectors
State : clean
Device UUID : 92831abe:86de117c:710c368e:8badcef3
Internal Bitmap : 8 sectors from superblock
Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
Delta Devices : -1 (7->6)
Update Time : Sat Mar 5 20:45:56 2016
Checksum : dd2fe2d1 - correct
Events : 4339739
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 6
Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdl:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x5
Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
Name : BigRaid6
Creation Time : Fri Jan 11 09:59:42 2013
Raid Level : raid6
Raid Devices : 6
Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
Unused Space : before=262064 sectors, after=688 sectors
State : clean
Device UUID : 8404647a:b1922fed:acf71f64:18dfd448
Internal Bitmap : 8 sectors from superblock
Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
Delta Devices : -1 (7->6)
Update Time : Sat Mar 5 20:45:56 2016
Checksum : 358734b4 - correct
Events : 4339739
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 3
Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdo:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x5
Array UUID : 45747bdc:ba5a85fe:ead35e14:24c2c7b2
Name : BigRaid6
Creation Time : Fri Jan 11 09:59:42 2013
Raid Level : raid6
Raid Devices : 6
Avail Dev Size : 7813775024 (3725.90 GiB 4000.65 GB)
Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
Used Dev Size : 7813774336 (3725.90 GiB 4000.65 GB)
Data Offset : 262144 sectors
Super Offset : 8 sectors
Unused Space : before=262064 sectors, after=688 sectors
State : clean
Device UUID : d7e84765:86fb751a:466ab0de:c26afc43
Internal Bitmap : 8 sectors from superblock
Reshape pos'n : 15045257216 (14348.28 GiB 15406.34 GB)
Delta Devices : -1 (7->6)
Update Time : Sat Mar 5 20:45:56 2016
Checksum : c3698023 - correct
Events : 4339739
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 0
Array State : A.AAAAA ('A' == active, '.' == missing, 'R' == replacing
这里是 /dev/sdj1,它曾经是阵列中唯一不是“整个磁盘”成员的成员。这是在重塑过程中从阵列中删除的一个。我怀疑仍然需要完成重塑,尽管它当前不是数组的成员,因为它具有重塑之前的数据。
johnny@debian:~$ sudo mdadm --examine /dev/sdj1
mdadm: No md superblock detected on /dev/sdj1.
所以这是我的问题...
1.我无法完成重塑。
2. 无法挂载阵列。当我尝试时,我明白了。
johnny@debian:~$ sudo mount /dev/md0 /media/BigRaid6
mount: wrong fs type, bad option, bad superblock on /dev/md0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
johnny@debian:~$ sudo dmesg | tail
[42446.268089] sd 15:0:0:0: [sdk]
[42446.268091] Add. Sense: Unrecovered read error - auto reallocate failed
[42446.268092] sd 15:0:0:0: [sdk] CDB:
[42446.268093] Read(10): 28 00 89 10 bb 00 00 04 00 00
[42446.268099] end_request: I/O error, dev sdk, sector 2299575040
[42446.268131] ata16: EH complete
[61123.788170] md: md1: data-check done.
[77423.597923] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)
[77839.250590] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)
[78525.085343] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)
我确信如果重塑完成,安装就会成功,所以这可能是最重要的。仅供参考,这个阵列上的数据太大,无法备份,所以如果我丢失了它,数据就消失了。请帮忙!
编辑1:
我可以花 1000 美元(或更多)并获得足够的磁盘来复制所有内容,但我需要能够安装阵列才能正常工作。
另外,我刚刚注意到,在尝试安装阵列时收到的“错误几何形状”错误消息中包含一些感兴趣的信息。
[146181.331566] EXT4-fs (md0): bad geometry: block count 4194304000 exceeds size of device (3906887168 blocks)
设备的大小 3906887168 恰好是 md0 数组大小 15627548672 的 1/4。来自“mdadm --detail /dev/md0”
Array Size : 15627548672 (14903.59 GiB 16002.61 GB)
我不知道 4194304000 数字从何而来...但这是否意味着阵列的大小适合这些磁盘?或者这些大小不考虑 mdadm 元数据? 4194304000 是否包含元数据?
我可以发誓,在重塑开始之前,我尝试了几次以获得正确的尺寸,所以我认为一切都很好。也许我错了。
答案1
您的错误已经出现在第一个命令中,16000GiB
这根本不是 6x4TB 磁盘上的错误,甚至16000GB
可能是一个延伸,因为您丢失了一些mdadm
元数据等空间。最后的错误消息与这种情况非常相似(bad geometry
,文件系统认为设备提供的更大,并且文件系统绝对恨那)。
所以你现在面临着很多问题:
- 你的文件系统太大
- 你的心理医生被卡在了一半
- 您的至少一个磁盘出现故障 (
/dev/sdk
) - 你的备份文件丢失了
- 可能的文件系统不一致(显然)
解决你的问题的方法不是让收缩以某种方式完成,而是在不损坏的情况下恢复到之前的状态......这可能仍然是有可能实现的,因为幸运的是收缩还没有进展到很大程度。
在这种情况下我会
- 停止 RAID 并确保没有其他任何东西启动它(禁用
udev
自动组装规则等) - 使用覆盖文件使硬盘只读 (需要额外的备用磁盘用于临时存储)
- 尝试使用所述覆盖重新创建 RAID
一般来说,重新创建 RAID 是一个非常非常糟糕的主意,因为它几乎总是会出错。不过,我认为在你的情况下,它可能比尝试以任何其他方式逆转收缩过程造成的损害更小。在 7 磁盘 RAID 6 中,该16GiB
区域可能仍然未受影响...假设文件系统在 RAID 收缩时处于空闲状态。否则您会看到更多的文件系统不一致问题。
重新创建 RAID 时,您必须获得全部正确的变量:元数据版本、数据偏移、raid 级别、raid 布局、块大小、磁盘顺序……并且您必须通过将冗余磁盘保留为丢失来防止重新同步。
可能是这样的:
mdadm --create /dev/md0 --assume-clean \
--metadata=1.2 --data-offset=128M --level=6 --layout=ls --chunk=512 \
--raid-devices=7 missing missing /dev/mapper/overlay-{sdf,sdl,sdb,sdc,sdi}
没有保证,我自己显然没有尝试过。
验证其有效后,您可以将更改提交到磁盘(应用经验证可在不覆盖的情况下工作的步骤)。然后这一次,resize2fs
文件系统正确(14G
应该可以工作),然后缩小 RAID 并希望它不会再次卡住。可能不需要备份文件mdadm --grow
,如果您确实使用备份文件,请确保不要丢失它。