gzipで圧縮されたdd画像を動的にマウントできますか?

gzipで圧縮されたdd画像を動的にマウントできますか?

システムを初めてバックアップするときにイメージバックアップを作成したいと思います。最初から、rsync増分バックアップを実行しました。

私の一般的なイメージのバックアップは次のとおりです。

  • 空のスペースをインストールしてゼロにします。

    dd if=/dev/zero of=temp.dd bs=1M
    rm temp.dd
    
  • ddドライブのマウント解除と圧縮

    dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c  > /mnt/sda1/hda.ddimg.gz
    
  • システムを再び正常に戻すには、通常、次の手順を実行します。

    gzip -dc /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
    

これは非常に簡単で、「フルドライブ」を保存できますが、実際には使用されているスペースだけを節約するだけです。

それが問題だ。上記の作業を行いましたが、きれいなシステムでは実行せず、rsyncバックアップ速度が十分に高速ではなく、アクセスしたいイメージにファイルがあるとします。実際にdd画像を解凍してドライブに保存するための記憶領域はありませんが、画像をマウントして個々のファイルをインポートしたいとします...これは可能ですか?

通常、人々は画像を圧縮しませんdd。これにより、次のようにイメージをインストールできます...-o loopしかし、私の場合はそうではありません...

インスタントで圧縮されたimgをインストールするための提案はありますか?

使用するAVFSgzファイルを「インストール」してから内部dd.imgをインストールすると動作します(そうではないと思いますが…確認が必要です…)?

答え1

ディスクイメージが完全なディスクイメージであるか、それとも単純なパーティションかによって異なります。

パーティションのクリーニング

ディスクが正常に動作している場合、ディスクの空き領域をゼロにクリーンアップすると圧縮性能が向上します。ディスクに障害が発生した場合は、この手順をスキップしてください。

ディスク全体をイメージングする場合は、ディスク上のすべてのパーティションをクリーンアップする必要があります。

警告する:気をつけて、君もofそうしたい文書マウントされたパーティションではパーティション自体ではありません!

mkdir image_source
sudo mount /dev/sda1 image_source
dd if=/dev/zero of=image_source/wash.tmp bs=4M
rm image_source/wash.tmp
sudo umount image_source

パーティションイメージの作成

mkdir image
sudo dd if=/dev/sda1 of=image/sda1_backup.img bs=4M

sdaデバイス名、および1パーティション番号です。他のデバイスやパーティションをミラーリングするには、システムに合わせて調整してください。

フルディスクイメージの作成

mkdir image
sudo dd if=/dev/sda of=image/sda_backup.img bs=4M

sdaデバイス名はどこにありますか?他のデバイスを画像化するには、システムに合わせて調整します。

圧縮

圧縮されていない完全な画像を含む「squashfs」画像を作成します。

sudo apt-get install squashfs-tools
mksquashfs image squash.img

ストリーミングメディア圧縮

ディスク全体のサイズを占める別の一時ファイルを作成したくない場合は、イメージにストリーミングできますsquashfs

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

圧縮パーティションイメージのマウント

  • まずsquashfs、イメージをマウントしてから、マウントされたイメージに保存されているパーティションイメージをマウントしますsquashfs
    mkdir squash_mount
    sudo mount squash.img squash_mount
    
  • これで、圧縮された画像をマウントしたので、画像自体(つまりsquashfs画像の内側)をマウントします。
    mkdir compressed_image
    sudo mount squash_mount/sda1_backup.img compressed_image
    
  • これで画像がにインストールされましたcompressed_image

編集:この時点でディスクddイメージをパーティションに復元するには(コンテンツを参照または読み取るためにマウントする代わりに)。squash_mount/sda1_backup.imgmount

圧縮されたフルディスクイメージのマウント

これには、というパッケージを使用する必要がありますkpartxkpartxディスクイメージ全体に個々のパーティションをマウントできます。

sudo apt-get install kpartx
  • まず、ディスクイメージ全体を含む圧縮パーティションをマウントします。

    mkdir compressed_image
    sudo mount squash.img compressed_image
    
  • これで、ディスクイメージ全体の各パーティションのデバイスを作成する必要があります。

    sudo kpartx -a compressed_image/sda_backup.img
    

    これにより、ディスクイメージ全体にパーティション用のデバイスが作成されます。/dev/mapper/loopNpPNループバックデバイスに割り当てられた番号。Pはパーティション番号です(例:  /dev/mapper/loop0p1この番号を見つけることができます。N出力からlosetup --list。最後に生成されたループバックデバイスは最大値を持つ必要があります。N 数字。

  • これで、ディスクイメージ全体に個々のパーティションをマウントできます。

    mkdir fulldisk_part1
    sudo mount /dev/mapper/loop0p1 fulldisk_part1
    

答え2

努力するarchivemount

root@srv1:/backup# archivemount windows-2003-S.gz /target/
Unrecognized archive format

root@srv1:/backup# archivemount -o formatraw windows-2003-S.gz /target/
Calculating uncompressed file size. Please wait.

root@srv1:/backup# ls /target/
data

root@srv1:/backup# file /target/data
/target/data: DOS/MBR boot sector; partition 1 : ID=0x7, start-CHS (0x0,1,1), end-CHS (0x3ff,254,63), startsector 63, 58717512 sectors, extended partition table (last)

archivemountは、Linuxを含むUnixバリアントのためのFUSEベースのファイルシステムです。その目的は、アーカイブ(tar、tar.gzなど)を他のファイルシステムと同じように読み書きできるマウントポイントにマウントすることです。これにより、解凍することなく、潜在的に圧縮されたアーカイブコンテンツに透過的にアクセスできます。

http://linuxaria.com/howto/how-to-mounts-an-archive-for-access-as-a-file-system

アーカイブがインストールされると、その内容は通常のファイルのように使用できます。パーティションテーブルをインポートするか、qemuツールを使用してイメージを変換してマウントすることもできます。

squashfsはイメージから起動するのに便利ですが、バックアップは非常に複雑です。

答え3

画像が次の場合読み取り専用また、使用することができますNBDキットマニュアルページ)そしてxzフィルタ(xzはgzipよりも優れた圧縮時間とランダムアクセス時間を提供する必要があります)。必要な場合一時的に書き込みアクセス、(書き込み時のコピー)フィルタが役に立ちます。

圧縮パーティションイメージの作成

dd if=/dev/sda1 bs=16M | xz -9 --block-size=16MiB > sda1.img.xz

16MiBオプションは--block-size優れたランダムアクセス性能を提供する必要があります。

注:次の代替xzコンプレッサーを使用できます。ピクセル並列圧縮を提供します。出力を小さな塊に分割することを確認してください。そうでなければNBDキット大量のデータを解凍する必要があります。たとえば、2015年9月現在、ピクセルこれはサポートされていません。

nbdkitで使用

nbdkit --no-fork --user nobody --group nobody -i 127.0.0.1 \
       --filter xz file sda1.img.xz

NBDサーバーに接続

nbd-client 127.0.0.1 10809 /dev/nbd0 -nofork

読み取り専用でマウントしてください。

mount -o ro /dev/nbd0 sda1

終わった後

umount /dev/nbd0
nbd-client -d /dev/nbd0

止めるNBDキットCtrl+をC押す殺す)。

答え4

まさか。最初にファイル全体を解凍しないと、圧縮ファイル内の特定のブロックが実際に見つからないため、圧縮された画像をブロックデバイスとして使用することは困難です。

dumprestore(または実際には)などのものを使用できます。すべてストリーム形式を使用するため、圧縮tarされていないストリームを効果的にスキャンして単一のファイルにアクセスできます。つまり、必要なファイルが圧縮されたアーカイブの末尾にある場合は、長い時間を待つ必要がありますが、実際にすべてをディスクに解凍する必要はありません。

バックアップにはややtar昔ながらのように見えますが、柔軟性に優れています。

関連情報