시스템을 처음 백업 할 때 이미지 백업을 만드는 것이 좋습니다. 처음으로 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-size
16 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'
답변
실제로는 아닙니다. 압축을 풀지 않고 압축 파일에서 특정 블록을 찾을 수 없으므로 압축 된 이미지를 블록 장치로 사용하기가 어렵습니다.
스트리밍 형식을 사용하는 dump
및 restore
(또는 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 ro
xz 플러그인은 읽기만 지원하므로 읽기 전용 모드 ( ) 를 사용해야 합니다.
mount -o ro /dev/mapper/nbd0p3 /mnt