错误的几何结构:块计数 967424 超出设备大小(415232 块)

错误的几何结构:块计数 967424 超出设备大小(415232 块)

我试图了解以下mount命令我做错了什么。

从这里获取以下文件:

img只需从以下位置下载文件即可这里

然后我验证了md5sum上游页面的正确性:

$ md5sum nand_2016_06_02.img
3ad5e53c7ee89322ff8132f800dc5ad3  nand_2016_06_02.img

这是file必须要说的:

$ file nand_2016_06_02.img 
nand_2016_06_02.img: x86 boot sector; partition 1: ID=0x83, starthead 68, startsector 4096, 3321856 sectors, extended partition table (last)\011, code offset 0x0

因此,让我们检查该映像的第一个分区的开始位置:

$ /sbin/fdisk -l nand_2016_06_02.img

Disk nand_2016_06_02.img: 1.6 GiB, 1702887424 bytes, 3325952 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
Disklabel type: dos
Disk identifier: 0x0212268d

Device               Boot Start     End Sectors  Size Id Type
nand_2016_06_02.img1       4096 3325951 3321856  1.6G 83 Linux

就我而言单位尺寸是第512章, 和开始4096,这意味着偏移量位于字节处2097152。在这种情况下,以下内容应该有效,但事实并非如此:

$ mkdir /tmp/img
$ sudo mount -o loop,offset=2097152 nand_2016_06_02.img /tmp/img/
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

并且,dmesg 揭示:

$ dmesg | tail
[ 1632.732163] loop: module loaded
[ 1854.815436] EXT4-fs (loop0): mounting ext2 file system using the ext4 subsystem
[ 1854.815452] EXT4-fs (loop0): bad geometry: block count 967424 exceeds size of device (415232 blocks)

未列出任何解决方案这里为我工作:

  • 调整2fs大小或者,
  • 软盘

我错过了什么?


我尝试过的其他一些实验:

$ dd bs=2097152 skip=1 if=nand_2016_06_02.img of=trunc.img

这导致:

$ file trunc.img 
trunc.img: Linux rev 1.0 ext2 filesystem data (mounted or unclean), UUID=960b67cf-ee8f-4f0d-b6b0-2ffac7b91c1a (large files)

同样的故事也是如此:

$ sudo mount -o loop trunc.img /tmp/img/
mount: wrong fs type, bad option, bad superblock on /dev/loop2,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

我无法使用,resize2fs因为我需要e2fsck先运行:

$ /sbin/e2fsck -f trunc.img 
e2fsck 1.42.9 (28-Dec-2013)
The filesystem size (according to the superblock) is 967424 blocks
The physical size of the device is 415232 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort<y>? yes

答案1

一旦提取了您感兴趣的文件系统(使用dd),只需调整文件大小(967424*4096=3962568704):

$ truncate -s 3962568704 trunc.img

然后简单地说:

$ sudo mount -o loop trunc.img /tmp/img/
$ sudo find /tmp/img/
/tmp/img/
/tmp/img/u-boot-spl.bin
/tmp/img/u-boot.img
/tmp/img/root.ubifs.9
/tmp/img/root.ubifs.4
/tmp/img/root.ubifs.5
/tmp/img/root.ubifs.7
/tmp/img/root.ubifs.2
/tmp/img/root.ubifs.6
/tmp/img/lost+found
/tmp/img/root.ubifs.3
/tmp/img/boot.ubifs
/tmp/img/root.ubifs.0
/tmp/img/root.ubifs.1
/tmp/img/root.ubifs.8

另一个更简单的解决方案是直接截断原始 img 文件:

$ truncate -s 3964665856 nand_2016_06_02.img
$ sudo mount -o loop,offset=2097152 nand_2016_06_02.img /tmp/img/

其中 3962568704 + 2097152 = 3964665856

答案2

作为truncate这个答案没有解决问题,我又尝试了一些。在某个地方resize2fs我发现用于修复图像的建议(resize2fs <image> <size>例如,resize2fs nand_2016_06_02.img 3779M给出上述数据),但这对我来说也不起作用(声称尺寸已经如此)。

对我来说,以下两个步骤解决了这个问题:

  1. e2fsck -y -f nand_2016_06_02.img(你可以先检查一下y是否有任何错误——如果没有,则不需要)
  2. testdisk nand_2016_06_02.img,浏览菜单(继续 ›(分区表)无 › 高级 › 映像创建)并让 testdisk 创建映像。

由 testdisk 创建的映像(名称为image.dd)完美安装:

sudo mount image.dd /tmp/img -t ext4 -o loop,ro

(我知道它是 ext4,并且我明确希望它以只读方式安装,以免意外修改它 - 在我的情况下,它不是下载的图像,而是一张“抢救”的 SD 卡,它已经放弃了我,数据是用myrescue -r 1000 -b 4096 /dev/sdf2 sdpart2.img,对于有 1014 个坏块的 8 GB 分区大约需要 24 小时)

相关内容