it-swarm-eu.dev

Je možné připojit komprimovaný dd obraz gzip za běhu?

Líbí se mi vytvořit zálohu obrazu poprvé, když zálohuji systém. Po této první době používám rsync k přírůstkovým zálohám.

Moje obvyklá záloha obrazu je následující:

Připojte a vynulujte prázdné místo:

dd if=/dev/zero of=temp.dd bs=1M

rm temp.dd

umount a dd disk při jeho komprese

dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz

abych vrátil systém zpět do normálu, obvykle udělám

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

To je opravdu jednoduché a umožňuje to ušetřit 'celý disk', ale opravdu jen ušetřit použitý prostor.

Tady je problém. Řekněme, že to dělám výše, ale ne na čistém systému, a nechci dostat rsync zálohy dostatečně brzy a existují soubory, které chci získat, které jsou na obrázku. Řekněme, že nemám úložný prostor, abych skutečně rozbalil a dd obraz na disk, ale chci ho připojit, aby z něj byly jednotlivé soubory .... Je to možné?

Normálně by člověk nekomprimoval dd obraz, který vám umožní připojit obrázek pouze pomocí -o loop... ale tohle není můj případ ...

Nějaké návrhy pro montáž komprimovaného obrazu za běhu?

Použil bych AVFS k 'připojit' soubor gz a pak připojil interní dd.img práci (nemyslím si to ... ale bude třeba ověřit. ..)?

72
g19fanatic

Závisí to na tom, zda je obraz disku celý obraz disku, nebo jen oddíl.

Mytí oddílů

Pokud je disk v dobrém provozním stavu, získáte lepší kompresi, pokud prázdné místo na disku vymýváte nulami. Pokud disk selže, tento krok přeskočte.

Pokud zobrazujete celý disk, budete chtít umýt každý oddíl na disku.

POZORNĚNÍ: Buďte opatrní, chcete nastavit of na soubor v připojeném oddílu, NEJDŮLEŽITĚJŠÍ SEKCE!

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

Vytvoření obrazu oddílu

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

Kde sda je název zařízení a 1 je číslo oddílu. Podle toho upravte svůj systém, pokud chcete obrazovat jiné zařízení nebo oddíl.

Vytvoření obrazu celého disku

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

Kde sda je název zařízení. Pokud chcete obrazovat jiné zařízení, upravte podle toho svůj systém.

Komprese

Vytvořte obrázek „squashfs“, který obsahuje úplný nekomprimovaný obraz.

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

Streamování komprese

Chcete-li se vyhnout vytvoření samostatného dočasného souboru v plné velikosti disku, můžete streamovat do obrazu squashfs.

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

Připojení obrazu komprimovaného oddílu

Nejprve připojte obraz squashfs a poté připojte bitovou kopii uloženou v připojeném obrazu squashfs.

mkdir squash_mount
Sudo mount squash.img squash_mount

Nyní máte komprimovaný obrázek připojený, připojte samotný obrázek (to je uvnitř obrazu squashfs)

mkdir compressed_image
Sudo mount squash_mount/sda1_backup.img compressed_image

Nyní je váš obrázek připojen pod compressed_image.

ÚPRAVA: Pokud chcete v tomto bodě jednoduše obnovit bitovou kopii disku na oddíl (místo připojení k procházení/čtení obsahu), stačí dd obrázek na squash_mount/sda1_backup.img do cíle místo provádění mount.

Připojení obrazu komprimovaného úplného disku

To vyžaduje, abyste použili balíček s názvem kpartx. kpartx vám umožňuje připojit jednotlivé oddíly do celého obrazu disku.

Sudo apt-get install kpartx

Nejprve připojte váš rozdrcený oddíl, který obsahuje celý obraz disku

mkdir compressed_image
Sudo mount squash.img compressed_image

Nyní musíte vytvořit zařízení pro každý z diskových oddílů v plném obrazu disku:

Sudo kpartx -a compressed_image/sda_backup.img

Tím vytvoříte zařízení pro oddíly v plném obrazu disku na /dev/mapper/loopNpP kde [~ # ~] n [~ # ~] je číslo přiřazené zařízení zpětné smyčky a [~ # ~] p [~ # ~] je číslo oddílu. Například: /dev/mapper/loop0p1.

Nyní máte možnost připojit jednotlivé oddíly do celého obrazu disku:

mkdir fulldisk_part1
Sudo mount /dev/mapper/loop0p1 fulldisk_part1
71
doug65536

Zkuste archivemount

[email protected]:/backup# archivemount windows-2003-S.gz /target/
Unrecognized archive format
[email protected]:/backup# archivemount -o formatraw windows-2003-S.gz /target/
Calculating uncompressed file size. Please wait.
[email protected]:/backup# ls /target/
data
[email protected]:/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 je systém souborů založený na pojistkách pro varianty Unixu, včetně Linuxu. Jeho účelem je připojit archivy (tj. Tar, tar.gz, atd.) K bodu připojení, kde je lze číst nebo zapisovat jako u jakéhokoli jiného systému souborů. Díky tomu je přístup k obsahu archivu, který může být komprimován, transparentní pro jiné programy, aniž by byl dekomprimován.

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

Po připojení archivu můžete použít obsah jako běžný soubor. Možná získejte tabulku oddílů nebo převeďte obrázek pomocí nástrojů qemu.

squashfs užitečné pro bootování z obrazu, ale mnohem složitější pro zálohování.

18
eri

Pokud je obrázek pouze pro čtení, můžete také použít nbdkit ( man page ) a jeho xz plugin (xz by měl poskytovat lepší kompresi a časy náhodného přístupu než gzip).

Vytvořte obrázek komprimovaného oddílu

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

A --block-size Možnost 16 MiB by měla poskytovat dobrý výkon s náhodným přístupem.

Poznámka: Můžete použít alternativní kompresní programy xz, například pixz , které poskytují paralelní kompresi, pouze se ujistěte, že rozdělí výstup do více malých bloků, jinak nbdkit musí dekomprimovat velké množství dat. Například od září 2015 pxz toto nepodporuje.

Podávejte s nbdkit

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

Připojte se k serveru NBD)

nbd-client 127.0.0.1 10809 /dev/nbd0 -nofork

Připojte jej jen pro čtení

mount -o ro /dev/nbd0 sda1

Až bude hotovo

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

Zastavte nbdkit stisknutím Ctrl+C (nebo s zabít ).

16
Cristian Ciupitu

Tato odpověď doplňuje odpověď Cristiana Ciupit . Pokud používáte kompresi xz s přiměřenou velikostí bloku, můžete získat přístup k obrazu disku pomocí guestfish nebo jiného libguestfs nástroje, jako je tento:

nbdkit xz file=disk.img.xz --run 'guestfish --format=raw -a $nbd -i'

[~ # ~] update [~ # ~] : Protože xz již není plugin, ale stal se filtrem, příkaz je nyní:

nbdkit file disk.img.xz --filter xz --run 'guestfish --format=raw -a $nbd -i'
11
Rich

Spíš ne. Nemůžete opravdu hledat konkrétní blok v komprimovaném souboru, aniž byste nejprve dekomprimovali celou věc, což ztěžuje použití komprimovaného obrazu jako blokového zařízení.

Dalo by se použít něco jako dump a restore (nebo tar, opravdu), to vše ve formátu streamingu ... takže můžete přistupovat k jednotlivým souborům efektivním skenováním nekomprimovaný proud. Znamená to, že pokud je požadovaný soubor na konci komprimovaného archivu, můžete čekat dlouho, ale nevyžaduje to, abyste vše skutečně rozbalili na disk.

Použití tar pro zálohy se může zdát trochu staromódní, ale získáte velkou flexibilitu.

8
larsks

Další dodatek k odpověď Cristiana Ciupit :

Pokud použijete nbdkit k připojení úplného obrazu disku (vs. obrázek diskového oddílu), možná budete muset zadat velikost bloku ( velikost sektoru disku), když se připojujete k serveru NBD), protože je výchozí 1024 bajtů. Použít 512 bajtů místo:

nbd-client 127.0.0.1 /dev/nbd0 -b 512 -n

Poté se disk zobrazí jako /dev/nbd0, a měli byste mít možnost zobrazit tabulku oddílů pomocí fdisk -l. Oddíly však ještě nelze připojit - Pomocí kpartx (od odpověď doug65536 ) vytvořte zařízení pro oddíly, např .:

kpartx -arv /dev/nbd0

Konečně se oddíly objeví v /dev/mapper/ a můžete je připojit jako obvykle. Nezapomeňte použít režim jen pro čtení (-o ro), protože plugin xz podporuje pouze čtení:

mount -o ro /dev/mapper/nbd0p3 /mnt
3
friederbluemle