web-dev-qa-db-ja.com

圧縮ディスクイメージをマウントする方法

ディスクイメージを作成し、compressgzip/xz/etcでそれを圧縮解除せずに直接マウントする方法はありますか?

私が使ったと言う

Sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz

最初に非圧縮コピーを作成せずに元のイメージをマウントするにはどうすればよいですか?

または私が使用しました

Sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz

また、ディスクには複数のパーティションがありますが、それはそれを難し​​くしますか?

ディスク全体の非圧縮イメージでは、kpartx以降のlosetupのバージョンと-Pフラグを使用して、パーティションごとにループを作成する必要があります。

しかし、圧縮されたイメージをマウント/ロセットアップ/読み込む方法はありますか?

Gzip/xzで機能しない場合、これで機能する圧縮方法はありますか?


Qの重複に関する注意

現在提案されている複製

圧縮を使用しない、およびは重複ではありません

mountは、それ自体で圧縮イメージをマウントしません。

10
Xen2050

NBDサーバーを取得して、非圧縮バージョンの.gzまたは.xzファイルを「提供」することができました。圧縮ファイル全体を非常に頻繁に読み取る必要があるかどうかはわかりませんが(これまでのところ、ramの小さなファイルでのみテストされています)、少なくとも非圧縮コピー全体を抽出することなく動作します。

「オンザフライ」でgz/xz圧縮ddイメージを表示する

  1. Nbdkitとクライアントをインストールする

    apt install nbdkit nbd-client
    
  2. デモ「dd」スタイルファイルの作成-extファイルシステムを含む空の50MファイルとZip(テストのみのオプション)

    fallocate -l 50M 50m
    mkfs.ext3 -v 50m
    

    次に、gzipまたはxzで圧縮します

    gzip -vk9 50m
    xz -v9k 50m
    

    注:--block-size=16MiBxzオプションを使用すると、ランダムアクセスのパフォーマンスが向上しますが、圧縮が低下します(1%になる可能性があります)。 nbdkitのxzプラグインの説明 を参照してください。

  3. 圧縮イメージでサーバーを実行する

    nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-gzip-plugin.so file=~/Downloads/50m.gz
    

    またはxzの場合

    nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-xz-plugin.so file=~/Downloads/50m.xz
    

    --no-forkはサーバーに通知します "バックグラウンドにフォークしない"。そのため、エラーメッセージが表示され、CTRL-Cで強制終了する少し楽。

    -vは、特に読み取り中に、あまりにも多くのステータスメッセージを表示する場合があります。

  4. クライアントを実行(別の端末/ウィンドウで)

    Sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
    

    -noforkは上記の-no-forkに似ていますが、CTRL-Cでクライアントを殺すnotkill <pid>、またはSudo kill <pid>。 CTRL-Cでサーバーを終了すると、サーバーとクライアントの両方が停止しました。

  5. /dev/nbd0が非圧縮画像と同一になったことを確認します

    $ Sudo diff -s /dev/nbd0 ~/Downloads/50m
    Files /dev/nbd0 and /home/user/Downloads/50m are identical
    

    /dev/nbd0は、非圧縮イメージと同じように使用できるようになりました。マウント、読み取り/コピーdd、またはkpartxpartprobevgscan/vgchangeなどを使用してください!

nixおよびLinuxのCristian Ciupit に感謝しますが、プラグインを見つけてすべてをまとめるには少し掘り下げました。

6
Xen2050

squashfsを使用して、ディスクイメージを圧縮してからマウントできます。

ディスクイメージを作成する

ディスクイメージをまだ取得していない場合は、ddを使用して作成します。

dd if=/dev/sda1 of=/tmp/sda1.img bs=4M

Squashfsで画像を圧縮する

squashfsをインストールします。

apt-get install squashfs-tools

画像を圧縮します。

mksquashfs /tmp/sda1.img /tmp/sda1.squash.img

または圧縮をストリーミングします(一時的なddファイルは必要ありません)

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

buntuForums.orgのterminator14 への賛辞。定義/説明:

  • empty-dir-「ソース」ディレクトリ。基本的に、私たちの場合、mksquashfsの入力引数形式を満たすための空のディレクトリのみです。
  • squash.img-出力squashfsファイルの宛先とファイル名
  • sda_backup.img-squashfsファイル内のddバックアップの名前
  • f-sda_backup.imgが(ディレクトリ、ブロックデバイス、または文字デバイスではなく)通常のファイルであることを指定します
  • 444-squashfsイメージ内のsda_backup.imgファイルの権限
  • root root-squashfsイメージ内のsda_backup.imgファイルのUIDおよびGID。 10進数または名前で指定できます
  • dd if=/dev/sda bs=4M-バックアップするデバイスの読み取りに使用されるddコマンド

イメージをマウントする

最初にsquashfsイメージをマウントします。

mkdir /mnt/squash
mount /tmp/sda1.squash.img /mnt/squash

これにより、マウントする非圧縮ディスクイメージが表示されます。

mkdir /mnt/sda1
mount /mnt/squash/sda1.img /mnt/sda1

または、フルドライブイメージ(パーティション)の場合、losetupを使用してddイメージをループデバイスに接続し(オプション)、その後kpartx -aまたはpartprobeを使用してパーティションを見つけて分離し、デバイスを分離します。LVMがある場合はvgscan/vgchange -ay

9
Eborbob

ここに私のやり方がありますが、これに相当するコンソールを知らないでください、

  • フォルダをisoに圧縮します。 enter image description here
  • .isoDisk Image Mounterファイルをマウントします。 enter image description here
  • 多田圧縮されたisoを解凍せずに開きます。 enter image description here
0
hellozee