分区表已损坏(USB 闪存驱动器)

分区表已损坏(USB 闪存驱动器)

这是 8 GB 的 Patriot 拇指驱动器,我经常使用它来存储大量数据。今天,它被检测到了,但是所有数据都消失了:编辑至少一些数据仍然存在,但分区表已经消失了)


编辑@Sathya(感谢)以下是相关输出sudo fdisk -l

Disk /dev/sdc: 8019 MB, 8019509248 bytes
247 heads, 62 sectors/track, 1022 cylinders
Units = cylinders of 15314 * 512 = 7840768 bytes

Disk /dev/sdc doesn't contain a valid partition table

它看起来像是 /dev/sdc,有 8 GB...并且没有分区表。

我尝试挂载 /dev/sdc (然后dmesg | tail):

/media> sudo mount /dev/sdc mytmp
mount: wrong fs type, bad option, bad superblock on /dev/sdc,
       missing codepage or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

/media> dmesg | tail
[   24.300000]  sdc: unknown partition table
[   24.320000] sd 2:0:0:0: Attached scsi removable disk sdc
[   24.370000] usb-storage: device scan complete
[   26.870000] EXT2-fs error (device sdc): ext2_check_descriptors: Block bitmap for group 1 not in group (block 0)!
[   26.870000] EXT2-fs: group descriptors corrupted!
[   50.420000] unhashed dentry being revalidated: .DCOPserver_eeepc-brendanma__0
[   50.430000] unhashed dentry being revalidated: .DCOPserver_eeepc-brendanma__0
[   50.430000] unhashed dentry being revalidated: .DCOPserver_eeepc-brendanma__0
[ 5565.470000] EXT2-fs error (device sdc): ext2_check_descriptors: Block bitmap for group 1 not in group (block 0)!
[ 5565.470000] EXT2-fs: group descriptors corrupted!

编辑@Col: 来自 testdisk 的结果

Disk /dev/sdc - 8013 MB / 7642 MiB - CHS 1022 247 62
Current partition structure:
     Partition                  Start        End    Size in sectors

Partition sector doesn't have the endmark 0xAA55

我点击后[proceed],它显示:

Structure: Ok.


Keys A: add partition, L: load backup, Enter: to continue

“结构:确定。”似乎令人放心……“A:添加分区”会让我的旧数据可访问吗(如果它仍然存在),还是会创建一个新的、新鲜的分区?

另一个选择是“ [ MBR Code ] Write TestDisk MBR code to first sector”——这样做会更好吗?


编辑我发现至少我的一些数据仍然在闪存驱动器上,通过使用下面的方法,并在 less 中搜索英文文本(例如“ the ”):

cat /dev/sde | tr -cd '\11\12\40\1540-\176' | less

(由于我今天连接了一些额外的驱动器,驱动器从“/dev/sdb”更改为“/dev/sde”)。我了解到“/dev/sde1”将是第一个分区;而“/dev/sde”是整个驱动器。因为 unix 将这些设备视为文件,所以您可以在它们上使用所有普通的 unix 文件命令,例如cat,然后像任何其他数据流一样处理它们。以上tr删除了不可打印的字符(“\40”是空格,我想保留它)。在 less 中,您可以使用“/”进行搜索,类似于 Vim。

我怎样才能恢复我的数据(假设它仍然在那里)?如果只是分区表损坏,是否有标准的“分区恢复工具”?有没有办法在不删除所有内容的情况下“重新分区”?

答案1

可能需要在设备上运行 testdisk,听起来您的分区表可能已经弹出。Testdisk 应该能够恢复您的数据。

答案2

别担心,您的数据并没有丢失 --- 无论图形界面上显示的是什么,您关于磁盘未安装的说法都是对的。

您可以通过执行以下操作(以 root 身份)来挂载它,例如:

mount /dev/sdb1 /media/Patriot\ Memory

思考sdb1的是你的 USB 记忆棒——它可能是sdc1sdd1

答案3

虽然可以重建分区表,但您首先应该做的是获取设备映像。您可以根据dd if=/dev/sdb of=~/memstick.img需要更改路径来执行此操作。

完成后,运行相簿,应该能够提取其中的所有文件。如果您已获得所需的一切,请格式化该记忆棒并重新启动,如果没有,您可以尝试进一步的数据恢复。

答案4

救援是您需要的工具。根据您发布的输出,我认为您无法通过其他任何方式挽救分区表并访问数据测试磁盘ETC。

http://www.forensicswiki.org/wiki/Ddrescue

救援是一款数据恢复工具。它将数据从一个文件或块设备(硬盘、光驱等)复制到另一个文件或块设备,在发生读取错误时尽力挽救数据。

ddrescue 的基本操作是全自动的。也就是说,您不必等待错误、停止程序、阅读日志、以反向模式运行它等。

如果您使用 ddrescue 的日志文件功能,数据恢复将非常高效(仅读取所需的块)。您还可以随时中断恢复,稍后在同一点恢复。

Ddrescue 在输入中发现坏扇区时不会将零写入输出,并且不会在未要求时截断输出文件。因此,每次在同一个输出文件上运行它时,它都会尝试填补空白,而不会清除已挽救的数据。

如果您有文件、光盘等的两个或更多个损坏的副本,并且使用相同的输出文件对所有副本逐个运行 ddrescue,则您可能会获得完整且无错误的文件。这是因为不同输入文件的相同位置出现损坏区域的可能性非常低。使用日志文件,只会从第二个和后续副本中读取所需的块。

相关内容