ディスクイメージを作成し、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で機能しない場合、これで機能する圧縮方法はありますか?
現在提案されている複製
圧縮を使用しない、およびは重複ではありません。
mount
は、それ自体で圧縮イメージをマウントしません。
NBDサーバーを取得して、非圧縮バージョンの.gzまたは.xzファイルを「提供」することができました。圧縮ファイル全体を非常に頻繁に読み取る必要があるかどうかはわかりませんが(これまでのところ、ramの小さなファイルでのみテストされています)、少なくとも非圧縮コピー全体を抽出することなく動作します。
Nbdkitとクライアントをインストールする
apt install nbdkit nbd-client
デモ「dd」スタイルファイルの作成-extファイルシステムを含む空の50MファイルとZip(テストのみのオプション)
fallocate -l 50M 50m
mkfs.ext3 -v 50m
次に、gzipまたはxzで圧縮します
gzip -vk9 50m
xz -v9k 50m
注:--block-size=16MiB
のxz
オプションを使用すると、ランダムアクセスのパフォーマンスが向上しますが、圧縮が低下します(1%になる可能性があります)。 nbdkitのxzプラグインの説明 を参照してください。
圧縮イメージでサーバーを実行する
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
は、特に読み取り中に、あまりにも多くのステータスメッセージを表示する場合があります。
クライアントを実行(別の端末/ウィンドウで)
Sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
-nofork
は上記の-no-fork
に似ていますが、CTRL-Cでクライアントを殺すnot、kill <pid>
、またはSudo kill <pid>
。 CTRL-Cでサーバーを終了すると、サーバーとクライアントの両方が停止しました。
/dev/nbd0
が非圧縮画像と同一になったことを確認します
$ Sudo diff -s /dev/nbd0 ~/Downloads/50m
Files /dev/nbd0 and /home/user/Downloads/50m are identical
/dev/nbd0
は、非圧縮イメージと同じように使用できるようになりました。マウント、読み取り/コピーdd
、またはkpartx
、partprobe
、vgscan
/vgchange
などを使用してください!
nixおよびLinuxのCristian Ciupit に感謝しますが、プラグインを見つけてすべてをまとめるには少し掘り下げました。
squashfs
を使用して、ディスクイメージを圧縮してからマウントできます。
ディスクイメージをまだ取得していない場合は、dd
を使用して作成します。
dd if=/dev/sda1 of=/tmp/sda1.img bs=4M
squashfs
をインストールします。
apt-get install squashfs-tools
画像を圧縮します。
mksquashfs /tmp/sda1.img /tmp/sda1.squash.img
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
。