我曾想过使用 RAID 阵列中的多个外部磁盘驱动器来构建 Raspberry Pi 文件服务器。首先,我只有一个 1TB 磁盘,因此我在该磁盘上设置了一个 raid1 阵列,以便以后添加其他驱动器。
最后,这被证明是一个坏主意,并且不太适合我的用例,所以现在我想将磁盘转换回“正常”磁盘。我已按照此操作https://superuser.com/questions/971549/how-to-convert-a-software-raid-1-partition-to-non-raid-partition我觉得这正是我想要的。我猜不是,因为现在我的磁盘似乎无法挂载。
我现在有什么选择?有办法恢复我的数据吗?
我将在这里粘贴在将超级块归零之前运行的各种命令的输出。
$ sudo cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0]
976595904 blocks super 1.2 [1/1] [U]
bitmap: 0/8 pages [0KB], 65536KB chunk
unused devices: <none>
$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 5 14:02:15 2020
Raid Level : raid1
Array Size : 976595904 (931.35 GiB 1000.03 GB)
Used Dev Size : 976595904 (931.35 GiB 1000.03 GB)
Raid Devices : 1
Total Devices : 1
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Mon Apr 19 11:46:30 2021
State : clean
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : raspberrypi:0 (local to host raspberrypi)
UUID : a1cd3f87:6165ec4a:d68c7589:708a0fe3
Events : 74
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
$ sudo fdisk -l
...
Disk /dev/sda: 931.48 GiB, 1000170586112 bytes, 1953458176 sectors
Disk model: Elements 2621
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: gpt
Disk identifier: C70BB0D7-644F-4911-B379-A3729BB61C3D
Device Start End Sectors Size Type
/dev/sda1 2048 1953458142 1953456095 931.5G Linux filesystem
Disk /dev/md0: 931.35 GiB, 1000034205696 bytes, 1953191808 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
$ sudo mdadm --stop /dev/md0
mdadm: stopped /dev/md0
$ sudo mdadm --zero-superblock /dev/sda1
$ sudo mount /dev/sda1 /mnt/ext
mount: /mnt/ext: wrong fs type, bad option, bad superblock on /dev/sda1, missing codepage or helper program, or other error.
答案1
由于 RAID 超级块最初是在磁盘开始处创建的,因此真正的数据是在之后才开始的。
通常,这就是您想要的,因为它可以确保对磁盘的任何访问都通过 RAID,并且集合保持一致,但这也意味着 RAID 的块 0 不是磁盘的块 0。
所以这意味着需要移动数据。这可以就地完成,dd
因为您要将块从后面移动到前面,但如果该过程被中断,您可能会丢失数据,而且这是不可逆的,因为dd
不能以相反的顺序工作,您需要将块移向磁盘的末端。
此时我会问自己是否值得付出努力。单磁盘 RAID1 的开销是内核在经过良好优化的代码路径中为每个请求添加偏移量。对您来说,最简单的解决方法是使用该--assume-clean
选项重新创建 RAID。
答案2
最后,我设法使用 TestDisk 程序恢复了我的 ext4 分区。 https://www.cgsecurity.org/wiki/TestDisk
我没有恢复 RAID 设置,但所有数据都已保存。