パーティションテーブルを使用して、Linuxでパーティションテーブルをプログラムでマウントしようとしています。
Lostupを使用して破損したドライブのパーティション(パーティションテーブルが削除された状態)をバックアップにマウントできることを確認するために、これまでに行った作業は次のとおりです。ここで開始と終了のセクタを見つけることができると仮定します。
次のコマンドを使用して、2つのパーティションを持つ新しいファイルを作成しました。
sudo dd if=/dev/zero of=backup.img bs=1M count=100
sudo fdisk backup.img
backup.img
2つのパーティションに分けて、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
です。ext4
losetup
それからこれを試しました。
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
。これにより、オフセットを計算するのに苦労する必要がなくなります。