gzip으로 압축된 dd 이미지를 동적으로 마운트할 수 있습니까?

gzip으로 압축된 dd 이미지를 동적으로 마운트할 수 있습니까?

시스템을 처음 백업할 때 이미지 백업을 생성하고 싶습니다. 처음 이후에는 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
    
  • 시스템을 다시 정상으로 되돌리려면 보통 다음을 수행합니다.

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

이는 매우 간단하며 "전체 드라이브"를 저장할 수 있지만 실제로는 사용된 공간만 절약할 뿐입니다.

그것이 문제이다. 위의 작업을 수행했지만 깨끗한 시스템에서는 수행하지 않고 rsync백업 속도가 충분히 빠르지 않으며 액세스하려는 이미지에 파일이 있다고 가정해 보겠습니다. 실제로 dd이미지의 압축을 풀고 드라이브에 저장할 저장 공간이 없지만 이미지를 마운트하여 개별 파일을 가져오고 싶다고 가정하면 ... 이것이 가능합니까?

일반적으로 사람들은 이미지를 압축하지 않습니다 dd. 이렇게 하면 다음을 사용하여 이미지를 설치할 수 있습니다... -o loop하지만 제 경우는 그렇지 않습니다...

즉석에서 압축된 img를 설치하기 위한 제안 사항이 있습니까?

사용하게 될 것이다AVFSgz 파일을 "설치"한 다음 내부 dd.img를 설치하면 작동합니까(그렇지 않다고 생각하지만...확인이 필요합니다...)?

답변1

디스크 이미지가 완전한 디스크 이미지인지 아니면 단순한 파티션인지에 따라 달라집니다.

파티션 청소

디스크가 제대로 작동하는 경우 디스크의 빈 공간을 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.imgmount

압축된 전체 디스크 이미지 마운트

이를 위해서는 이라는 패키지를 사용해야 합니다 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/loopNpPN루프백 장치에 할당된 번호입니다.P는 파티션 번호입니다(예:  /dev/mapper/loop0p1. 이 번호를 찾을 수 있어요N출력에서 losetup --list. 가장 최근에 생성된 루프백 장치는 가장 큰 값을 가져야 합니다.N 숫자.

  • 이제 전체 디스크 이미지에 개별 파티션을 마운트할 수 있습니다.

    mkdir fulldisk_part1
    sudo mount /dev/mapper/loop0p1 fulldisk_part1
    

답변2

노력하다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는 이미지에서 부팅하는 데 유용하지만 백업에는 매우 복잡합니다.

답변3

이미지가 다음과 같은 경우읽기 전용당신은 또한 사용할 수 있습니다NBD 키트(매뉴얼 페이지)그리고xz필터(xz는 gzip보다 더 나은 압축 및 임의 액세스 시간을 제공해야 함). 당신이 필요하다면일시적으로쓰기 액세스,젖소(쓰기 시 복사) 필터가 유용할 수 있습니다.

압축된 파티션 이미지 생성

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

16MiB 옵션은 --block-size우수한 임의 액세스 성능을 제공해야 합니다.

참고: 다음과 같은 대체 xz 압축기를 사용할 수 있습니다.픽셀병렬 압축을 제공합니다. 출력을 작은 덩어리로 분할하는지 확인하세요. 그렇지 않으면NBD 키트많은 양의 데이터를 압축 해제해야 합니다. 예를 들어, 2015년 9월 현재,픽셀이는 지원되지 않습니다.

nbdkit과 함께 사용

nbdkit --no-fork --user nobody --group nobody -i 127.0.0.1 \
       --filter 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

멈추다NBD 키트Ctrl+를 누르 C거나죽이다).

답변4

설마. 전체 파일의 압축을 먼저 풀지 않으면 압축된 파일에서 특정 블록을 실제로 찾을 수 없으므로 압축된 이미지를 블록 장치로 사용하기가 어렵습니다.

dumprestore(또는 실제로) 와 같은 것을 사용할 수 있으며 tar모두 스트림 형식을 사용하므로 압축되지 않은 스트림을 효과적으로 스캔하여 단일 파일에 액세스할 수 있습니다. 즉, 원하는 파일이 압축된 아카이브의 끝에 있으면 오랜 시간을 기다려야 할 수 있지만 실제로 모든 것을 디스크에 압축 해제할 필요는 없습니다.

백업 에는 tar다소 구식으로 보일 수 있지만 유연성이 뛰어납니다.

관련 정보