Linux의 압축된 디스크 이미지

Linux의 압축된 디스크 이미지

방금 훨씬 더 큰 하드 디스크를 갖춘 새 컴퓨터를 구입했습니다. 중요한 파일을 모두 복사한 것 같지만 확실히 하기 위해 이전 디스크의 디스크 이미지를 유지하고 싶습니다. 공간을 절약하기 위해 압축하고 싶은데 압축된 이미지를 마운트하는 옵션을 찾지 못했습니다.

내 목표:

  • 결과는 쉽게 액세스할 수 있어야 합니다.
  • 무엇이든 액세스하기 전에 전체 압축을 풀 필요가 없습니다.
  • 파일을 빠르게 찾아야 하며 TAR/CPIO 아카이브가 필요하지 않습니다.
  • 필요한 공간은 파일을 복사하는 것보다 작아야 합니다.

따라서 이상적으로는 파일로 생성할 수 있고 자동으로 커지는 읽기 전용 압축 파일 시스템을 찾고 있습니다.

답변1

다음과 같은 법의학 분석 소프트웨어를 사용하십시오.가이마거(오픈 소스, sourceforge.net). 전체 하드 디스크의 압축된 디스크 이미지를 빠르게 생성할 수 있는 멋진 UI가 있습니다.

"고급 포렌식 이미지(.aff)"를 사용하면 단일 압축 파일이 생성됩니다(음, .info 파일도 생성됩니다).

기본 압축 속도 1을 수정합니다(가장 빠르지만 압축은 가장 낮음). 코어 수가 많은 빠른 컴퓨터를 사용하는 경우 다음을 생성하여 이를 변경할 수 있습니다 /etc/guymager/local.cfg.

AffCompression = 3

9압축은 최고이지만 가장 느립니다. 3좋은 성능으로 좋은 압축을 제공합니다.

업데이트

장착은 생각보다 간단하지 않습니다. 우선, 당신이 필요합니다AFFLIB(우분투: aptitude install afflib-tools). 이제 다음을 사용하여 원시 디스크 이미지를 얻을 수 있습니다.[affuse][3] <image> <mount-point>

그러나 어떤 이유로 원시 이미지 마운트가 실패합니다. parted첫 번째 파티션이 1048576B다음 으로 시작한다고 말합니다.

mount -t ext4 -o loop,ro,offset=1048576 /mnt/backup.raw /mnt/backup

일반적인 쓸모없는 마운트 오류로 인해 실패합니다.

mount: wrong fs type, bad option, bad superblock on /dev/loop0,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

그리고 dmesg말한다:

EXT4-fs (loop0): VFS: Can't find ext4 filesystem

답변2

Matthias Krull이 위의 설명에서 제안한 것처럼 qcow2는 디스크 이미지를 저장하기 위한 압축을 지원하는 좋은 형식이 될 수 있습니다. 이는 QEMU 가상 머신 디스크 이미지 형식으로 꽤 오랫동안 지원될 것입니다. 다음은 /dev/sda압축된 이미지 파일로 압축하는 명령의 예입니다 sda.qcow2. 기본적으로 zlib 압축이 사용되지만 zstd가 압축률이 더 좋을 수도 있다고 생각합니다. 처리량을 늘리기 위해 8개의 스레드가 사용되지만 이를 보유하고 있는 프로세서 코어 수에 맞게 변경해야 합니다.

qemu-img convert -c -p -S 512 -o compression_type=zstd" -f raw -O qcow2 -m 8 \
  /dev/sda sda.qcow2

읽기 전용 블록 장치로 이미지에 액세스합니다. NBD(Network Block 장치)는 다음과 같이 사용할 수 있습니다.

modprobe nbd
qemu-nbd -r -c /dev/nbd0 sda.qcow2
kpartx -av /dev/nbd0

mount그런 다음 에서 적절한 장치를 사용하여 파일 시스템을 정상적으로 마운트할 수 있습니다 /dev/mapper.

답변3

블록 압축을 지원하는 파일 시스템의 경우 한 가지 옵션은 디스크 이미지를 파일로 직접 저장하는 것입니다. 나는 BTRFS가 이것을 지원한다는 것을 알고 있지만 다른 사람들도 지원할 가능성이 높습니다. BTRFS의 경우 compress-force압축할 수 없는 휴리스틱을 재정의하려면 마운트 옵션을 활성화해야 할 수 있습니다. 또한 스파스 파일을 만들고 싶을 것입니다. 이 작업은 dd다음 예와 같이 를 사용하여 수행할 수 있습니다 .

dd if=/dev/sda of=/mount/btrfs/sda.img conv=sparse,fsync iflag=nocache oflag=nocache

이렇게 하면 스파스 파일이 생성되므로 제로 섹터는 공간을 차지하지 않으며 BTRFS는 압축 가능한 블록을 압축합니다(이 기능을 켰다고 가정). 이 compsize도구를 사용하여 파일이 얼마나 압축되었는지 확인할 수 있습니다. 를 사용하면 du압축되지 않은 파일에서 구멍을 뺀 크기만 표시되므로 정확하지 않습니다.

이미지에 파일 시스템을 마운트하려면 다음을 사용할 수 있습니다.

LOOPDEV=$(losetup --show -f /mount/btrfs/sda.img)
kpartx -av "$LOOPDEV"
mount /dev/mapper/"$LOOPDEV"p3 # To mount the 3rd partition

기본 압축 기능이 있는 파일 시스템을 사용하지 않는 경우. ext4, BTRFS 파일 시스템 이미지에 디스크 이미지를 래핑하여 이 방법을 계속 사용할 수 있습니다. 다음과 같이 보일 수 있습니다.

truncate -s 100G backup-sda.btrfs.img
mkfs.btrfs backup-sda.btrfs.img
mount -o compress-force=zstd:9 backup-sda.btrfs.img /media/tmp
cd /media/tmp
# Now do commands to create disk image as above

qemu-img convert이 방법을 사용 하면 수준이 아닌 압축 방법만 선택할 수 있고 사용 가능한 압축 방법이 더 적은 를 사용하는 방법보다 압축 알고리즘과 압축 수준을 더 많이 제어할 수 있습니다 .

관련 정보