システムを初めてバックアップするときに、イメージバックアップを作成するのが好きです。この後、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
システムを通常の状態に戻すには、通常、
gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
これは非常に簡単で、「ドライブ全体」を節約できますが、使用済みスペースを節約できます。
ここに問題があります。上記を実行しますが、クリーンなシステムではなく、rsyncバックアップがすぐに実行されず、アクセスしたいファイルがイメージ上にあるとします。イメージを実際に解凍してドライブにddするためのストレージスペースがないが、イメージをマウントして個々のファイルをそこから取り出したいとします。これは可能ですか?
通常は、ddイメージを圧縮しないため、-o loop
...を使用してイメージをマウントできますが、これは私のケースではありません...
その場で圧縮されたimgをマウントするための提案はありますか?
[〜#〜] avfs [〜#〜] を使用してgzファイルを「マウント」し、内部のdd.img作業をマウントします(そうは思いませんが...確認が必要です)。 ..)?
これは、ディスクイメージが完全なディスクイメージであるか、単にパーティションであるかによって異なります。
ディスクの状態が良好な場合、ディスクの空のスペースをゼロで洗浄すると、圧縮率が向上します。ディスクに障害が発生している場合は、この手順をスキップしてください。
ディスク全体をイメージングする場合は、ディスク上の各パーティションをウォッシュする必要があります。
注意:マウントされたパーティションの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
_の下にマウントされました。
編集:この時点でディスクイメージをパーティションに単に復元したい場合は(マウントして内容を参照/読み取るのではなく)、__($ var] _のイメージを_squash_mount/sda1_backup.img
_のイメージではなく、宛先に単にdd
mount
を実行しています。
これには、kpartxと呼ばれるパッケージを使用する必要があります。 kpartxを使用すると、個々のパーティションをフルディスクイメージにマウントできます。
_Sudo apt-get install kpartx
_
最初に、完全なディスクイメージを含む圧縮されたパーティションをマウントします。
_mkdir compressed_image
Sudo mount squash.img compressed_image
_
次に、フルディスクイメージのパーティションごとにデバイスを作成する必要があります。
_Sudo kpartx -a compressed_image/sda_backup.img
_
これにより、_/dev/mapper/loopNpP
_のフルディスクイメージにパーティションのデバイスが作成されます。ここで、[〜#〜] n [〜#〜]はループバックデバイスに割り当てられた番号です、および[〜#〜] p [〜#〜]はパーティション番号です。例:_/dev/mapper/loop0p1
_。
これで、完全なディスクイメージに個々のパーティションをマウントする方法ができました。
_mkdir fulldisk_part1
Sudo mount /dev/mapper/loop0p1 fulldisk_part1
_
試す 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はイメージからの起動には便利ですが、バックアップには非常に複雑です。
画像がread-onlyの場合、 nbdkit ( man page )およびその xz plugin (xzは、より優れた圧縮とランダムアクセス時間を提供する必要がありますgzip)。
dd if=/dev/sda1 bs=16M | xz -9 --block-size=16MiB - > sda1.img.xz
--block-size
オプションの16 MiBは、優れたランダムアクセスパフォーマンスを提供します。
注:並列圧縮を提供する pixz などの代替xz圧縮プログラムを使用できます。出力が複数の小さなブロック、それ以外の場合nbdkitは、大量のデータを解凍する必要があります。たとえば、2015年9月現在、 pxz はこれをサポートしていません。
nbdkit --no-fork --user nobody --group nobody -i 127.0.0.1 \
xz file=sda1.img.xz
nbd-client 127.0.0.1 10809 /dev/nbd0 -nofork
mount -o ro /dev/nbd0 sda1
umount /dev/nbd0
nbd-client -d /dev/nbd0
を押してnbdkitを停止します Ctrl+C (またはkillを使用)。
この答えは Cristian Ciupituの答え を補完します。 If妥当なブロックサイズでxz圧縮を使用する場合、 guestfish または他の を使用してディスクイメージにアクセスできますlibguestfs このようなツール:
nbdkit xz file=disk.img.xz --run 'guestfish --format=raw -a $nbd -i'
[〜#〜] update [〜#〜]:xzはプラグインではなくなったため、フィルターになっているため、コマンドは次のようになります。
nbdkit file disk.img.xz --filter xz --run 'guestfish --format=raw -a $nbd -i'
あんまり。最初に全体を解凍しないと、圧縮ファイル内の特定のブロックをシークできないため、圧縮イメージをブロックデバイスとして使用することが困難になります。
dump
やrestore
(または実際にはtar
)のようなものを使用できます。これらはすべてストリーミング形式を使用しています...非圧縮ストリーム。つまり、必要なファイルが圧縮アーカイブの最後にある場合、待機するのに長い時間がかかる可能性がありますが、実際にすべてをディスクに解凍する必要はありません。
バックアップにtar
を使用するのは少し時代遅れに思えるかもしれませんが、柔軟性が大幅に向上します。
nbdkit
を使用してフルディスクイメージ(vs.パーティションイメージ)をマウントする場合、ブロックサイズ( NBDサーバーに接続するとき、デフォルトでは1024
バイトになるため、ディスクのセクターサイズ)。代わりに512
バイトを使用するには:
nbd-client 127.0.0.1 /dev/nbd0 -b 512 -n
その後、ディスクは/dev/nbd0
として表示され、fdisk -l
を使用してパーティションテーブルを表示できるはずです。ただし、パーティションはまだマウントできません-kpartx
( doug65536の回答 から)を使用して、パーティション用のデバイスを作成します。例:
kpartx -arv /dev/nbd0
最後に、パーティションが/dev/mapper/
に表示され、通常どおりにマウントできます。 xzプラグインは読み取りのみをサポートするため、必ず読み取り専用モード(-o ro
)を使用してください。
mount -o ro /dev/mapper/nbd0p3 /mnt