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


12

私は、ディスクイメージを作成し、場合に圧縮して、それをGZIP / XZ /などがそれを解凍せずに直接最初にマウントする方法はありますか?

私が使用したと言います

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

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

または私は使用しました

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

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

ディスク全体の非圧縮イメージを使用してから、kpartxまたはそれより新しいバージョンlosetup-Pフラグを使用すると、パーティションごとにループが作成されます。

しかし、圧縮されたイメージをマウント/ losetup /読み取りする方法はありますか?

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


重複Qに関する注意

現在提案されている複製

圧縮を使用せず重複ではありません

mount 圧縮されたイメージを単独でマウントすることはありません。


間違いなく可能だと言えるでしょう。しかし、手順は2つの外付けHDDにあるため、どのようにatmであるかを伝えることはできません。現在、どちらにもアクセスできますが、動作することをお知らせします。回答がありましたら、その時点で返答します(それまでに誰も投稿していません)。
UTF-8


1
@ UTF-8ありがとうございます。FYI、当初の目標はほぼ空だか、容易に圧縮データをたくさん持っているドライブ/パーティションの小さいバックアップを作成し、余分なデータをたくさん書いたり、それを抽出するために、空き領域のトンを必要とせずにそれを読むことができるようにすることです
Xen2050 2016年


2
@ bodhi.zazen許して?多分私は明確にする必要があります、マウント画像を自動的に解凍しないので、このQはaskubuntu.com/questions/69363の複製ではありません(たぶん私は冗談を逃した、おそらく解凍が唯一の答えではない:)
Xen2050

回答:


10

を使用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'

賛辞UbuntuForums.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別のデバイスにパーティションを見つける&分離するために、あるいはvgscan/ vgchange -ayLVMがあるかどう。


2
一時的なプレーンddファイルが不要になるように、オンザフライのsquashfs情報をいくつか追加しました。squashfsを使用した優れた回答、よりパイプに適したxz / gz形式を実行しない
Xen2050

複数のパーティションを含むフルディスクイメージでも同様に機能しますか?
friederbluemle 2017年

フルディスクについてはこちらをご覧ください:unix.stackexchange.com/questions/31669/...
HackerBoss

ファイルシステムの種類に応じて、必要とするかもしれないマウントro,noloadオプションを、とても好き:mount -o ro,noload /mnt/squash/sda1.img /mnt/sda1
HackerBoss

7

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

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

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

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

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

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

    gzip -vk9 50m
    xz -v9k 50m
    

    注:xzオプションを使用--block-size=16MiBすると、ランダムアクセスのパフォーマンスが向上しますが、圧縮率が低下します(おそらく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サーバー告げる「バックグラウンドにforkしないでください」少し楽である可能性のあるエラーメッセージを見て&CTRL-Cでそれを殺すようにします。

    -v 特に読むときに、あまりにも多くのステータスメッセージが表示される可能性があります。

  4. クライアントを実行(別のターミナル/ウィンドウで)

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

    これ-nofork-no-fork上記と似ていますが、CTRL-C 、、またはでクライアントを強制終了できませんでした。CTRL-Cでサーバーを終了すると、サーバーとクライアントの両方が停止しました。kill <pid>sudo kill <pid>

  5. それは守って/dev/nbd0今UN-圧縮された画像と同じです

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

    /dev/nbd0これで、非圧縮イメージと同じように使用できます。読み込み/コピーをして、取り付けられたdd、または使用kpartxpartprobevgscan/ vgchange、など!

UnixとLinuxのCristian Ciupituに感謝しますが、プラグインを見つけてすべてを組み合わせるには少し掘り下げる必要がありました。


Fedora 31ではnbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xz、同じクライアントコマンド
EkriirkE

Ubuntuのxenial 16.04 LTSは、上nbdkit 1.1.11 で使用される古いNBDプロトコル、新しいNBDプロトコルから異なり、使用しnbd-client 3.13ていますが、3.10の前に、例えばNBD-クライアントバージョンを使用してCA nbd-client 3.8 from Ubuntu precise 12.04 old LTS[セキュリティのためにローカルでのみ使用古いバージョンを!]
user1742529

0

これが私のやり方ですが、これと同等のコンソールはわかりませんが、

  • フォルダーをISOに圧縮します。 ここに画像の説明を入力してください
  • .isoファイルをマウントしますDisk Image Mounterここに画像の説明を入力してください
  • 多田圧縮されたisoを解凍せずに開きます。 ここに画像の説明を入力してください

4
この方法は実際にデータを圧縮しますか?圧縮を使用しないプレーンなiso9660画像(file-roller経由?)を使用しているようです。私はすべてゼロの100MBファイル(dd if=/dev/zeroおよびファイルローラー)で試してみましたが、実際には362kのデータが追加されます(私が想定しているオーバーヘッド)。おかげで、アイデアは正しい軌道に乗っています
Xen2050

申し訳ありませんが、圧縮技術についてはまったくわかりませんが、他の圧縮形式を試す場合は、ファイルローラーを使用してそれを一覧表示することもできますが、そのファイルを読みたい場合は、その特定のファイルのみを抽出する必要があります。
hellozee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.