gzip 압축 dd 이미지를 즉석에서 마운트 할 수 있습니까? bs=64K |

시스템을 처음 백업 할 때 이미지 백업을 만드는 것이 좋습니다. 처음으로 rsync를 사용하여 증분 백업을 수행합니다.

일반적인 이미지 백업은 다음과 같습니다.

빈 공간을 마운트하고 0으로 만듭니다.

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 이미지를 압축하지 않으므로 다음을 사용하여 이미지를 마운트 할 수 -o loop있지만 … 내 경우는 아닙니다 …

압축 된 img를 즉시 장착하기위한 제안 사항이 있습니까?

AVFS 를 사용하여 gz 파일을 ‘마운트’한 다음 내부 dd.img 작업을 마운팅 할 것입니까?



답변

디스크 이미지가 전체 디스크 이미지인지 아니면 파티션인지에 따라 다릅니다.

파티션 세척

디스크의 상태가 양호하면 디스크의 빈 공간을 0으로 씻으면 더 나은 압축을 얻을 수 있습니다. 디스크에 문제가 있으면이 단계를 건너 뛰십시오.

전체 디스크를 이미징하는 경우 디스크의 각 파티션을 씻어야합니다.

주의 : 파티션 항목이 아니라 마운트 된 파티션 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.

편집 :이 시점에서 디스크 이미지를 파티션에 복원하여 내용을 찾아보고 읽지 않고 단순히 이미지를 복원 하려면 대상 대신 dd이미지를 squash_mount/sda1_backup.img수행하십시오 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

답변

이미지가 읽기 전용 인 경우 nbdkit ( man page ) 및 해당 xz 플러그인 을 사용할 수도 있습니다 (xz는 gzip보다 더 나은 압축 및 임의 액세스 시간을 제공해야 함).

압축 파티션 이미지 생성

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

--block-size16 MIB 정보 옵션은 좋은 랜덤 액세스 성능을 제공한다.

참고 : 병렬 압축을 제공하는 pixz 와 같은 대체 xz 압축 프로그램을 사용할 수 있습니다 . 출력을 여러 개의 작은 블록으로 분할해야합니다. 그렇지 않으면 nbdkit 이 많은 데이터를 압축 해제해야합니다. 예를 들어 2015 년 9 월 현재 pxz 는이를 지원하지 않습니다.

nbdkit으로 제공

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

NBD 서버에 연결

nbd-client 127.0.0.1 10809 /dev/nbd0 -nofork

읽기 전용으로 마운트

mount -o ro /dev/nbd0 sda1

완료되면

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

+ (또는 kill ) 를 눌러 nbdkit 을 중지하십시오 .CtrlC


답변

시험 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는 이미지에서 부팅하는 데 유용하지만 백업에는 훨씬 복잡합니다.


답변

이 답변은 Cristian Ciupitu의 답변을 보완 합니다. 적당한 블록 크기로 xz 압축을 사용하는 경우 guestfish 또는 다음과 같은 다른 libguestfs 도구를 사용하여 디스크 이미지에 액세스 할 수 있습니다 .

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

답변

실제로는 아닙니다. 압축을 풀지 않고 압축 파일에서 특정 블록을 찾을 수 없으므로 압축 된 이미지를 블록 장치로 사용하기가 어렵습니다.

스트리밍 형식을 사용하는 dumprestore(또는 tar실제로) 같은 것을 사용할 수 있으므로 압축되지 않은 스트림을 효과적으로 스캔하여 개별 파일에 액세스 할 수 있습니다. 원하는 파일이 압축 된 아카이브의 끝에있는 경우 시간이 오래 걸릴 수 있지만 실제로 모든 파일을 디스크에 압축 해제 할 필요는 없습니다.

tar백업에 사용하면 약간 구식이 될 수 있지만 많은 유연성을 얻을 수 있습니다.


답변

Cristian Ciupitu의 답변에 대한 또 다른 부록 :

당신이 사용하는 경우 nbdkit마운트하기 위해 전체 디스크 이미지를 (파티션 이미지 대), 당신은 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/평소대로 마운트 할 수 있습니다. -o roxz 플러그인은 읽기만 지원하므로 읽기 전용 모드 ( ) 를 사용해야 합니다.

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