我试图了解以下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
给出上述数据),但这对我来说也不起作用(声称尺寸已经如此)。
对我来说,以下两个步骤解决了这个问题:
e2fsck -y -f nand_2016_06_02.img
(你可以先检查一下y
是否有任何错误——如果没有,则不需要)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 小时)