swa*_*log 6 linux raid software-raid mdadm hard-drive-recovery
当我尝试在它自己的 SSD 上安装 Windows 7 时,我的问题发生了。我使用的具有软件 RAID 系统知识的 Linux 操作系统位于我在安装前断开连接的 SSD 上。这样 Windows(或我)就不会无意中搞砸了。
然而,回想起来,愚蠢的是,我让 RAID 磁盘保持连接状态,认为 Windows 不会如此荒谬,以至于弄乱了它认为只是未分配空间的 HDD。
男孩是我错了!将安装文件复制到 SSD 后(如预期和需要的那样),它还ntfs
在其中一个 RAID 磁盘上创建了一个分区。既意外又完全不受欢迎!
.
我SSD
再次更改了s,并在 linux 中启动。mdadm
像以前一样组装阵列似乎没有任何问题,但是如果我尝试挂载阵列,则会收到错误消息:
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
Run Code Online (Sandbox Code Playgroud)
dmesg
:
EXT4-fs (md0): ext4_check_descriptors: Block bitmap for group 0 not in group (block 1318081259)!
EXT4-fs (md0): group descriptors corrupted!
Run Code Online (Sandbox Code Playgroud)
然后我用来qparted
删除新创建的ntfs
分区,/dev/sdd
以便它与其他三个匹配/dev/sd{b,c,e}
,并请求与我的阵列重新同步echo repair > /sys/block/md0/md/sync_action
这花了大约 4 个小时,完成后,dmesg
报告:
md: md0: requested-resync done.
Run Code Online (Sandbox Code Playgroud)
在 4 小时的任务后有点简短,但我不确定其他日志文件的存在位置(我似乎也搞砸了我的 sendmail 配置)。在任何情况下:根据 未报告任何更改mdadm
,一切检查。
mdadm -D /dev/md0
仍然报告:
Version : 1.2
Creation Time : Wed May 23 22:18:45 2012
Raid Level : raid6
Array Size : 3907026848 (3726.03 GiB 4000.80 GB)
Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon May 26 12:41:58 2014
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 4K
Name : okamilinkun:0
UUID : 0c97ebf3:098864d8:126f44e3:e4337102
Events : 423
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
Run Code Online (Sandbox Code Playgroud)
尝试挂载它仍然报告:
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
Run Code Online (Sandbox Code Playgroud)
和dmesg
:
EXT4-fs (md0): ext4_check_descriptors: Block bitmap for group 0 not in group (block 1318081259)!
EXT4-fs (md0): group descriptors corrupted!
Run Code Online (Sandbox Code Playgroud)
我有点不确定从哪里开始,尝试“看看它是否有效”对我来说有点太冒险了。这是我建议我应该尝试做的:
告诉mdadm
说/dev/sdd
(在一个窗口写进)是不可靠了,假装它是最近重新推出的阵列,并重建基础上,其他三个驱动器的内容。
我的假设也可能完全错误,ntfs
分区的创建/dev/sdd
和随后的删除已经改变了一些无法通过这种方式修复的东西。
我的问题: 求助,我该怎么办?如果我应该按照我的建议去做,我该怎么做?通过阅读文档等,我认为可能:
mdadm --manage /dev/md0 --set-faulty /dev/sdd
mdadm --manage /dev/md0 --remove /dev/sdd
mdadm --manage /dev/md0 --re-add /dev/sdd
Run Code Online (Sandbox Code Playgroud)
但是,文档示例建议/dev/sdd1
,这对我来说似乎很奇怪,因为就 linux 而言,那里没有分区,只有未分配的空间。也许没有这些命令将无法工作。
也许在--re-add
. 就像是:
sfdisk -d /dev/sdb | sfdisk /dev/sdd
Run Code Online (Sandbox Code Playgroud)
额外的问题: 为什么 Windows 7 安装会做一些如此st...潜在危险的事情?
我继续并标记/dev/sdd
为有故障,并从阵列中删除它(不是物理上的):
# mdadm --manage /dev/md0 --set-faulty /dev/sdd
# mdadm --manage /dev/md0 --remove /dev/sdd
Run Code Online (Sandbox Code Playgroud)
但是,不允许尝试 --re-add :
# mdadm --manage /dev/md0 --re-add /dev/sdd
mdadm: --re-add for /dev/sdd to /dev/md0 is not possible
Run Code Online (Sandbox Code Playgroud)
--add
,很好。
# mdadm --manage /dev/md0 --add /dev/sdd
Run Code Online (Sandbox Code Playgroud)
mdadm -D /dev/md0
现在报告状态clean, degraded, recovering
,和/dev/sdd
作为spare rebuilding
。
/proc/mdstat
显示恢复进度:
md0 : active raid6 sdd[4] sdc[1] sde[3] sdb[0]
3907026848 blocks super 1.2 level 6, 4k chunk, algorithm 2 [4/3] [UU_U]
[>....................] recovery = 2.1% (42887780/1953513424) finish=348.7min speed=91297K/sec
Run Code Online (Sandbox Code Playgroud)
nmon
还显示预期输出:
?sdb 0% 87.3 0.0| > |?
?sdc 71% 109.1 0.0|RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR > |?
?sdd 40% 0.0 87.3|WWWWWWWWWWWWWWWWWWWW > |?
?sde 0% 87.3 0.0|> ||
Run Code Online (Sandbox Code Playgroud)
到目前为止看起来不错。交叉我的手指另外五个多小时:)
恢复/dev/sdd
完成,dmesg
输出:
[44972.599552] md: md0: recovery done.
[44972.682811] RAID conf printout:
[44972.682815] --- level:6 rd:4 wd:4
[44972.682817] disk 0, o:1, dev:sdb
[44972.682819] disk 1, o:1, dev:sdc
[44972.682820] disk 2, o:1, dev:sdd
[44972.682821] disk 3, o:1, dev:sde
Run Code Online (Sandbox Code Playgroud)
尝试mount /dev/md0
报告:
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
Run Code Online (Sandbox Code Playgroud)
并在dmesg
:
[44984.159908] EXT4-fs (md0): ext4_check_descriptors: Block bitmap for group 0 not in group (block 1318081259)!
[44984.159912] EXT4-fs (md0): group descriptors corrupted!
Run Code Online (Sandbox Code Playgroud)
我不确定现在该怎么做。建议?
的输出dumpe2fs /dev/md0
:
dumpe2fs 1.42.8 (20-Jun-2013)
Filesystem volume name: Atlas
Last mounted on: /mnt/atlas
Filesystem UUID: e7bfb6a4-c907-4aa0-9b55-9528817bfd70
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 244195328
Block count: 976756712
Reserved block count: 48837835
Free blocks: 92000180
Free inodes: 243414877
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 791
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
RAID stripe width: 2
Flex block group size: 16
Filesystem created: Thu May 24 07:22:41 2012
Last mount time: Sun May 25 23:44:38 2014
Last write time: Sun May 25 23:46:42 2014
Mount count: 341
Maximum mount count: -1
Last checked: Thu May 24 07:22:41 2012
Check interval: 0 (<none>)
Lifetime writes: 4357 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: e177a374-0b90-4eaa-b78f-d734aae13051
Journal backup: inode blocks
dumpe2fs: Corrupt extent header while reading journal super block
Run Code Online (Sandbox Code Playgroud)
mdadm
我对首先使用该磁盘组装阵列感到有点惊讶,但这是另一个故事了。不幸的是,您的阵列可能不再处于可恢复状态。
Linux 软件 raid 假定阵列是健康的(干净的),除非磁盘控制器发出读或写错误信号,如 Linux raid wiki上所述。驱动程序假设因为磁盘上存储了大量冗余数据,并且硬盘和控制器之间的链接也使用了错误检测。
因此,您的情况(在 RAID6 模式下)的四种情况甚至无法读取奇偶校验块。
覆盖您的一个磁盘(从磁盘的角度来看)是一个完全有效的请求,并且由您的磁盘完成,没有错误。
现在,当您请求使用包含损坏数据的磁盘重建阵列时,您只需将损坏的数据传播到整个阵列即可。
正确的做法是将驱动器设置为故障,然后将其添加回阵列。阵列将在安全状态下重建。
归档时间: |
|
查看次数: |
454 次 |
最近记录: |