我正在尝试从 RAID1 中的一个驱动器中恢复数据。首先介绍一些背景知识。
RAID1 由 2 个磁盘(/dev/sde
和/dev/sdf
)组成。它是大约 6 年前使用 mdadm 构建的。最近几个月,mdadm 和 mdstat 开始报告 RAID 已降级:
$ sudo /sbin/mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Nov 29 11:41:44 2016
Raid Level : raid1
Array Size : 2930135488 (2794.39 GiB 3000.46 GB)
Used Dev Size : 2930135488 (2794.39 GiB 3000.46 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sun Jul 3 07:39:36 2022
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : k2:0 (local to host k2)
UUID : 4b8ef2c5:0f0e077b:a188f0e1:4c98a3dc
Events : 85310
Number Major Minor RaidDevice State
0 8 80 0 active sync /dev/sdf
- 0 0 1 removed
$ sudo cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdf[0]
2930135488 blocks super 1.2 [2/1] [U_]
bitmap: 19/22 pages [76KB], 65536KB chunk
unused devices: <none>
为了修复 RAID,我只需重新添加丢失的驱动器:
$ sudo mdadm /dev/md0 --re-add /dev/sde
在过去的几个月里,我多次运行过这个命令,没有任何问题。mdadm 可以正常运行几个星期,然后它会报告状态下降,然后我重新添加磁盘。
不幸的是,前几天,当我尝试重新添加磁盘时,出现大量错误,并且 RAID 无法启动。
因此目前,我有 2 个不属于任何 RAID 的磁盘:
- 磁盘 1 是“更健康”的磁盘(未从 RAID 中删除的磁盘),具有最新的数据。
- 磁盘 2 是从 RAID 中删除的磁盘,可能存在问题,并且由于 RAID 性能下降了几个星期,因此该磁盘已经有几周没有更新了。
我在新机箱上用全新的磁盘创建了全新的 RAID1。我想将数据从更健康、更新的磁盘(磁盘 1)传输到新的 RAID 上。我将磁盘 1 插入新机箱,但无论如何,我似乎无法安装该磁盘。
磁盘 1 目前位于/dev/sdb
新盒子上。以下是fdisk
和gdisk
的报告。
$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 2.73 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: ST3000DM001-1ER1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 98416A55-4676-458F-8130-2E221561239D
Device Start End Sectors Size Type
/dev/sdb1 34 2081 2048 1M Microsoft LDM metadata
/dev/sdb2 2082 262177 260096 127M Microsoft reserved
/dev/sdb3 262178 5860533134 5860270957 2.7T Microsoft LDM data
Partition 1 does not start on physical sector boundary.
Partition 2 does not start on physical sector boundary.
Partition 3 does not start on physical sector boundary.
$ sudo gdisk -l /dev/sdb
GPT fdisk (gdisk) version 1.0.8
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 5860533168 sectors, 2.7 TiB
Model: ST3000DM001-1ER1
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 98416A55-4676-458F-8130-2E221561239D
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 8-sector boundaries
Total free space is 0 sectors (0 bytes)
Number Start (sector) End (sector) Size Code Name
1 34 2081 1024.0 KiB 4201 LDM metadata partition
2 2082 262177 127.0 MiB 0C01 Microsoft reserved ...
3 262178 5860533134 2.7 TiB 4200 LDM data partition
“LDM 数据分区”标签很奇怪。时间太久了,我记不清从哪里得到这个磁盘了,但这绝对是 RAID1 中状况较好的磁盘。
无论如何,我尝试使用显而易见的方法安装驱动器:
$ sudo mount /dev/sdb /mnt/hdd
mount: /mnt/hdd: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error.
$ sudo mount /dev/sdb3 /mnt/hdd
mount: /mnt/hdd: wrong fs type, bad option, bad superblock on /dev/sdb3, missing codepage or helper program, or other error.
接下来,我探测磁盘以查看其上有什么类型的文件系统:
$ sudo fsck -N /dev/sdb
[/usr/sbin/fsck.ext2 (1) -- /dev/sdb] fsck.ext2 /dev/sdb
我尝试了使用 -t 选项(例如 -t ext2 和 -t ext4)和 sdb[1-3] 的各种组合的 mount 命令,但没有成功。
我也尝试使用该磁盘创建一个新的 RAID,但没有成功。
$ sudo mdadm --assemble --readonly /dev/md1 /dev/sdb
mdadm: Cannot assemble mbr metadata on /dev/sdb
mdadm: /dev/sdb has no superblock - assembly aborted
没有超级块值得担心。我只能想象,当我前几天尝试重新添加丢失的驱动器时,它被吹走了(见上文)。
由于磁盘标签提到了 LDM,我认为我可以尝试 ldmtool:
$ sudo ldmtool create all
[]
我现在有点不知所措。一个想法是使用 dd 将磁盘克隆到我的新 RAID 上。由于 RAID 是 ext4 文件系统,也许 dd 会复制我可以使用的数据?也许像这样?
$ sudo dd if=/dev/sdb3 of=/dev/md0 bs=100M conv=sync,noerror status=progress
关于如何将数据从磁盘 1 传输到新的 RAID,还有其他想法/建议吗?