我的一个朋友有一个由两个 500GB 硬盘组成的 RAID 0 阵列(Windows - NTFS - 预装戴尔),其中一个似乎有坏扇区。因此,我从 Ubuntu Live Disk(15.04)启动 PC,并尝试使用 mdadm 组装阵列以挽救数据(因为在 Windows 上它总是会坏)。
RAID 上有 3 个分区:
- 首先在 /dev/sda Windows Boot [100MB]
- 我猜第二个是戴尔恢复分区 [100GB])
- 第三个在 /dev/sda 和 /dev/sdb 上(总共约 850GB,应该是 NTFS 分区 Windows C:\)
再次列出所有内容:
$ sudo mdadm --examine /dev/sda
/dev/sda:
Magic : Intel Raid ISM Cfg Sig.
Version : 1.0.00
Orig Family : f3069b3e
Family : f3069b3e
Generation : 00006a1b
Attributes : All supported
UUID : b0ad0525:0ddce192:803168da:22a1ffe4
Checksum : c280a1b0 correct
MPB Sectors : 1
Disks : 2
RAID Devices : 1
[ARRAY0]:
UUID : 69bc365d:4feceb32:e1d6c70a:c5d22a9a
RAID Level : 0
Members : 2
Slots : [__]
Failed disk : 1
This Slot : ?
Array Size : 1953536000 (931.52 GiB 1000.21 GB)
Per Dev Size : 976768264 (465.76 GiB 500.11 GB)
Sector Offset : 0
Num Stripes : 3815500
Chunk Size : 128 KiB
Reserved : 0
Migrate State : idle
Map State : normal
Dirty State : clean
Disk00 Serial : 5QM21AYL
State : active failed
Id : 00000000
Usable Size : 976766862 (465.76 GiB 500.10 GB)
Disk01 Serial : 5QM220MP
State : active failed
Id : 00010000
Usable Size : 976766862 (465.76 GiB 500.10 GB)
我对 RST 和 mdadm 不太熟悉,因此我使用 Google 搜索并尝试:
$ sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb --force
mdadm: Marking array /dev/md0 as 'clean'
mdadm: Container /dev/md0 has been assembled with 2 drives
进而:
$ sudo mount -t ntfs /dev/md0 /home/olddata/
Failed to read bootsector (size=0)
Failed to sync device /dev/md0: Input/output error
Failed to mount '/dev/md0': Invalid argument
The device '/dev/md0' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
谁能向我解释我的定义有什么错误并指导我走正确的道路?
编辑:
附加信息:
$ sudo fdisk -l
Disk /dev/loop0: 1 GiB, 1101672448 bytes, 2151704 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 465,8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc8000000
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 206847 204800 100M 7 HPFS/NTFS/exFAT
/dev/sda2 206848 245762047 245555200 117,1G 7 HPFS/NTFS/exFAT
/dev/sda3 245762048 1953531903 1707769856 814,3G 7 HPFS/NTFS/exFAT
Disk /dev/sdb: 465,8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
编辑2:
@psusi:所以如果我理解了你所说的话,那么设备上的 assemble 命令是正确的启动方式:
$ sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb --force
mdadm: Marking array /dev/md0 as 'clean'
mdadm: Container /dev/md0 has been assembled with 2 drives
但接下来该去哪儿呢?
$ cat /proc/mdstat
Personalities : [raid0]
md0 : inactive sda[1](S) sdb[0](S)
6306 blocks super external:imsm
unused devices: <none>
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465,8G 0 disk
├─sda1 8:1 0 100M 0 part
├─sda2 8:2 0 117,1G 0 part
└─sda3 8:3 0 348,6G 0 part
sdb 8:16 0 465,8G 0 disk
sr0 11:0 1 1,1G 0 rom /cdrom
loop0 7:0 0 1G 1 loop /rofs
答案1
首先,分区的是阵列,而不是单个驱动器。您不得尝试访问可能出现在单个驱动器上的任何分区。相反,您应该在 RAID 设备上安装正确的分区。此外,英特尔 fakeraid 将驱动器组装成一个“容器”,然后将其细分为单个 RAID 阵列。看来您已经激活了容器,我相信这会自动激活它包含的任何其他阵列,但它们不是/dev/md0
。 cat /proc/mdstat
查看哪些阵列处于活动状态,或者您可以查阅lsblk
,它是其他阵列之一(或该阵列上的分区,例如/dev/md1p1
),应该包含您要安装的文件系统。