Linuxでは、パーティションテーブルなしでパーティションを手動でマウントする

Linuxでは、パーティションテーブルなしでパーティションを手動でマウントする

パーティションテーブルを使用して、Linuxでパーティションテーブルをプログラムでマウントしようとしています。

Lostupを使用して破損したドライブのパーティション(パーティションテーブルが削除された状態)をバックアップにマウントできることを確認するために、これまでに行った作業は次のとおりです。ここで開始と終了のセクタを見つけることができると仮定します。

次のコマンドを使用して、2つのパーティションを持つ新しいファイルを作成しました。

sudo dd if=/dev/zero of=backup.img bs=1M count=100

sudo fdisk backup.imgbackup.img2つのパーティションに分けて、sudo fdisk -lu backup.img次のように表示されます。

Device   Boot  Start   End   Sectors   Size Id   Type
backup.img1       2048  104447  102400    50M 83   Linux
backup.img2     104448  204799  100352    49M 83   Linux

存在しないパーティションテーブルを使用してパーティションをマウントできるかどうかをテストしているので、ここにあるパーティションはパーティションext3です。ext4losetup

それからこれを試しました。

sudo losetup -r -o 1048576 /dev/loop0 backup.img効果があり、後で行うことができますsudo mount /dev/loop0 /mnt/test

ただし、パーティションテーブルを持たない生イメージがあると仮定するため、パーティションテーブルを手動で提供する必要があります。また、ディスクがさらに破損する可能性があるため、既存のバックアップを混乱させたくありません。

sudo losetup -o 1048576 --sizelimit 52428288 /dev/loop0 backup.img働く

ただし、次のようにループデバイスをインストールしようとすると

sudo mount /dev/loop0 /mnt/test、それは言わない

mount: /mnt/test: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program or other error

サイズ制限を提供しましたが、losetupパーティションが認識されないのはなぜですか?

ここで何か抜けましたか?

ベストアンサー1

理論的には、ループデバイスの設定に使用するコマンドには何の問題もありません。私のビルドスクリプトで同様のものを使用して画像を生成します。

私の意見では、誤ってテストイメージの形式を誤って指定して、extファイルシステムを元のサイズより大きくしたようです。

ループデバイスはファイルの一部を指すブロックデバイスであり、パーティションテーブルについては何も知りません。同様に、パーティションは、ディスク上の場所を説明するテーブルエントリを含むディスクのセクションにすぎません。

分割ブロックデバイスを取得する最も簡単な方法は、パーティションテーブルを使用することです。しなければならないすべてのディスクに存在します。

イメージにすでにパーティションテーブルがある場合は、実際にLinuxにラウンドロビンパーティションを追加するように依頼できます。

loop_device=$(losetup --show -f my image.img)
partx -a $loop_device

これにより、たとえばデバイスセットが作成されます/dev/loop2 /dev/loop2p1 /dev/loop2p2。これにより、オフセットを計算するのに苦労する必要がなくなります。

おすすめ記事