誤ったジオメトリ:ブロック数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上記のデータ提供)、私には効果がありませんでした(サイズはすでにこのようなものであると主張しています)。

私にとっては、次の2つのステップで問題を解決しました。

  1. e2fsck -y -f nand_2016_06_02.imgy(最初にエラーがあるかどうかを確認できます。エラーがなければ必要ありません。)
  2. testdisk nand_2016_06_02.img、メニュー(続き›(パーティションテーブル)なし›詳細→画像の作成)に進み、testdiskに画像を作成させます。

image.ddtestdisk(名前)で作成された画像は完全にインストールされます。

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

(ext4であることを知っており、誤って修正しないように読み取り専用でマウントすることを明示的に望んでいますmyrescue -r 1000 -b 4096 /dev/sdf2 sdpart2.img。 8GBパーティションの場合、約24時間かかります。

関連情報