我正在尝试使用 ddrescue 恢复崩溃的 2TB 驱动器。它已经运行了一个多星期,刚刚接近尾声,显然空间不足,并出现以下错误:
ddrescue: write error: No space left on device
我当时复制的是一块空白的 2TB 硬盘,所以我猜不同制造商的实际硬盘空间可能有所不同。硬盘没有满,崩溃时只使用了大约 600GB,只有 20 个错误,总计 254MB,所以我猜我实际上拥有恢复的磁盘映像中的大部分数据。
当我尝试使用此命令安装映像时:
sudo mount -o loop,ro,offset=0 rimage /mnt/resc
它失败了,并且在 dmesg 中显示:
[999150.073373] EXT4-fs (loop0): bad geometry: block count 488378646 exceeds size of device (480723271 blocks)
1)有没有办法编辑图像的块数,以便我可以安装它?
2)如果是这样,那么是否可以随后缩小磁盘映像的分区大小?
答案1
磁盘空间问题
您的恢复目标可能用尽了磁盘空间,因为您正在写入目标文件系统上的映像文件,而文件系统有开销。您可能--sparse
已经能够通过中的标志来解决磁盘空间问题ddrescue
。
我强烈建议尝试创建另一个图像,避免空间问题,这一次要么使用更大的硬盘,要么使用ddrescue --sparse
。
实际上,您可以使用ddrescue
覆盖整个恢复目标硬盘,跳过文件系统。如果恢复目标硬盘是/dev/sdc
,则您可以指示ddrescue
写入该硬盘,而不是rimage
。恢复目标硬盘随后会表现得像故障硬盘的克隆,只是减去了不可恢复的部分。
调整设备图像大小
如果ddrescue
映像应该是整个故障驱动器,请运行此命令,并将其替换/dev/sdb
为故障驱动器的设备路径:
sudo blockdev --getsize64 /dev/sdb
获取输出(例如)并使用以下方法500107862016
调整恢复映像的大小:/path/to/rimage
truncate
truncate -s 500107862016 /path/to/rimage
警告:截断为小于
/path/to/rimage
将要导致数据丢失。确保检查当前的大小
/path/to/rimage
并du -b --apparent-size /path/to/image
确认返回的大小小于blockdev
给您的大小。
现在,恢复的图像将呈现mount.ext4
预期的完整尺寸。
调整分区映像的大小
如果您在故障驱动器中的分区上运行ddrescue
,请使用此命令来获取分区的大小,并/dev/sdb1
用分区的设备路径替换:
sudo blockdev --getsize64 /dev/sdb1
然后获取输出(例如)并使用以下方法500106788864
调整恢复映像的大小:/path/to/rimage
truncate
truncate -s 500106788864 /path/to/rimage
警告:截断为小于
/path/to/rimage
将要导致数据丢失。确保检查当前的大小
/path/to/rimage
并du -b --apparent-size /path/to/image
确认返回的大小小于blockdev
给您的大小。