我的外接设备突然坏了。虽然我不能确定,但它可能没有那么严重。
我刚刚尝试使用 ddrescue 将其恢复,直接恢复到一个大分区。
sudo dd if=/dev/sdb of=/dev/sda3 bs=4096 conv=notrunc,noerror,sync
它运行了几个小时,显示已复制了 160 bg。我没有制作映像,只是将 sdb 复制到 sda3。
虽然我没有听到任何噪音,但圆盘灯始终亮着。
因此,运行后我发现我保存到的分区丢失了标签并声称是空的。以下是信息,sda3 是我保存到的分区:
sudo fdisk -lu
Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders, total 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0005901e
Device Boot Start End Blocks Id System
/dev/sda1 2048 4294655 2146304 82 Linux swap / Solaris
/dev/sda2 * 4294656 1172654030 584179687+ 83 Linux
/dev/sda3 1172654080 3907028991 1367187456 83 Linux
Note: sector size is 4096 (not 512)
在 Gparted 中,系统提示我此分区上的超级块已损坏。它确实提供了为分区分配新 UUID 的选项,但我尚未尝试过。
所以我现在不知道该怎么办,转移完成了吗?数据在这个分区上吗?
我认为在传输时安装了坏驱动器,我没有收到警告,所以没有注意到。我想我可以再复制一份光盘,但我确实想在这里小心一点。我有什么值得处理的东西吗?我能以某种方式进入这个驱动器吗?我知道扇区大小因 dd 而发生了变化,而且外部的错误现在出现在分区上。
但如何访问它?我应该制作一张图片吗?任何建议都将不胜感激。
答案1
dd
终止后立即检查 的结果echo $?
。必须是0
!检查 的输出是否有明显错误。我在问题中dd
没有看到 的大小。/dev/sdb
指定没有分区号的设备文件不会复制分区,而是复制整个设备(包括分区表)。要么您知道要恢复哪个分区,即指定/dev/sdaX
为if
的参数dd
,要么制作整个设备的图像(更好的想法),将其安装在循环设备下,例如使用 查找下一个空闲循环设备losetup -f
,使用它losetup /dev/loopY /path/to/image.img
并让内核识别分区,其中kpartx /dev/loopYp?
应该?
是您想要恢复的分区的编号,如问题中所述。
根据磁盘损坏的严重程度,即进一步读取是否会对其造成更大的损坏,以及存储设备上的空间大小,制作原始文件或副本的图像(结果将是副本的副本,但这可能会防止读取时损坏原件)。
加快速度/dev/sdb
:当您使用的副本时/dev/sda3
(仅在必要时使用),如果/dev/sdb
仅为 160 GB( 的末尾/dev/sdb
和 的末尾之间的差值/dev/sda3
),则您正在复制大量无用的数据。如果您想跳过该步骤,请告知仅复制dd
的长度和参数(在这种情况下是必读内容)。/dev/sdb
bs
count
man dd
也许有一种方法可以通过一些调整来告诉内核/dev/sda3/
包含分区表,但我认为这相当棘手且具有实验性。
答案2
制作图像是个好主意。数据中可能存在漏洞。但是一旦有了图像,就可以重新使用它。
- fsck,如果失败,请重试。
将分区复制到分区,将磁盘复制到磁盘。
- 不要将 sdb 复制到 sda3,这是“磁盘到分区”,不正常。
如果您确实复制到更大的区域,并且 fsck 正常,则这可能是最好的选择,但您仍然可以从图像中挖掘十六进制和文本。(甚至可能是 jpeg)。
如果一切运行正常,并且您已移至更大的设备,则可以增加分区大小并“扩大文件系统以填充分区”。