我有一个我的主分区()的图像/dev/sda3
,它是我使用“dd”命令创建的。
dd if=/dev/sda3 of=/path/to/disk.img
我通过 gparted 删除了主分区,以便扩大我的/dev/root
分区。然后我重新创建了/dev/sda3
分区,该分区比我备份到映像的分区要小。
我想知道,因为我有一个 2TB 的外置硬盘,是否可以将我的备份映像挂载到外置硬盘上,然后将文件复制到目录中/home
。由于外置硬盘已经处于“挂载状态”,我不确定在挂载设备上挂载是否是个好主意。
- 我正在运行 Slackware 13.37 (64 位)。
- 所有分区上均使用 ext4。
- 使用 gparted live cd 调整根分区的大小。
我试过了:
mount -t ext4 /path/to/disk.img /mng/image -o loop
它给了我一个 fs 错误(错误的 fs 类型、错误的选项、dev/loop/0 上的错误超级块)
然后我就这么做了
dmesg | tail
输出:
EXT4-fs (loop0):几何形状不良:块数 29009610 超出了设备大小(1679229 个块)
我不知道该怎么办,我想/home
从我备份的图像中恢复我的数据。
[更新]: * disk.image 位于我的 USB 16GB 闪存驱动器上。映像大小约为 6GB。映像是从已删除的分区创建的,该分区大约有 100GB,现在已减少到 80GB 左右。
[更新]:我今天尝试过这个: LQWiki: 一些 dd 示例 说:
您不会想通过将分区表从较大的驱动器写入较小的驱动器来告诉驱动器它比实际更大。驱动器的前 63 个扇区是空的,除了扇区 1,即 MBR。
dd if=/dev/sda skip=2 of=/dev/sdb seek=2 bs=4k conv=noerror
然后我尝试挂载/dev/sda3
到/home
。
dmesg | tail
输出错误“组描述符损坏!”
然后我尝试:
fsck.ext4 -y -f /dev/sda3
它输出大量的已修复问题和以光速下降的数百万个数字。
之后我成功挂载/dev/sda3
到/home
,但主目录中没有任何数据。只有一个名为“lost+found”的目录,也是空的。
答案1
您可以跳过第一步,只需:
sudo losetup /dev/loop0 /path/to/disk.img
mkdir /mnt/image
sudo mount /path/to/disk.img /mnt/image
答案2
我知道这是一个老问题,但我两天前遇到了同样的问题,并且能够在一定程度上解决这个问题。
此问题基本上发生在 ext2/3/4 文件系统映像因某种原因未完全复制到映像文件时,本质上会造成末尾部分数据丢失。因此,您将无法恢复原始映像中存在的所有文件,除非奇迹般地没有文件数据存储在映像的丢失部分中。
就我而言,我无法挂载映像,但有一个实用程序可以扫描 ext2/3/4 文件系统映像并将所有找到的文件转储到指定位置:
bash$ losetup -f ./corrupted.img # mounts to /dev/loop0
bash$ sudo debugfs -c /dev/loop0
debugfs: rdump / /path/to/dump/files/
debugfs: quit
这转储命令接受两个参数:路径里面损坏的映像以递归方式扫描文件,以及在本机文件系统上保存文件的路径。任何无法恢复的文件都将创建为 0 字节大小。
由于 debugfs 以 root 身份运行,您可能需要 chown 文件。
答案3
尝试将文件截断为超出的块数,然后重新挂载。
在您的情况中:
EXT4-fs(loop0):几何形状不良:块数29009610超出了缺陷的大小(1679229 块)
truncate -o -s 29009610 /path/to/disk.img
mount -o loop /path/to/disk.img /mng/image
弗拉维奥