ext4 파티션 이미지에서 부팅 가능한 디스크 생성

ext4 파티션 이미지에서 부팅 가능한 디스크 생성

내 목표는 재부팅하지 않고 시스템의 부팅 가능한 백업을 생성하는 것입니다. qemu-img를 사용하여 원시 dd 이미지를 vhdx로 변환하고 Hyper-V에서 실행하겠습니다.

liveCD로 부팅하고 다음을 실행하면:

dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc

이를 vhdx로 변환하고 많은 노력 없이 Hyper-V에서 직접 실행할 수 있습니다.

fdisk -l 출력:

Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7555D04B-D6DC-4ABB-8863-529E874BADAD

Device       Start       End   Sectors   Size Type
/dev/sda1     2048   2000895   1998848   976M EFI System
/dev/sda2  2000896 500117503 498116608 237.5G Linux filesystem

그러나 시스템이 온라인 상태에서는 해당 명령을 사용할 수 없으므로 dattobd 드라이버를 사용하여 다음과 같이 전체 ext4 파일 시스템을 복사했습니다.

dd if=/dev/datto0 of=/nfs/sda2.raw bs=1M

이렇게 하면 모든 데이터가 올바르게 복사됩니다 /dev/sda2. LiveCD를 사용하고 파티션을 추가하면 해시가 동일하기 때문에 이를 확인했습니다 /dev/sda2. 이제 liveCD로 부팅하여 복사할 수 있습니다 /dev/sda1. 이는 EFI 파티션이므로 grub 또는 Linux 커널 관련 항목을 업데이트하지 않는 한 자주 변경되지 않습니다. 가끔 재부팅하여 파티션을 백업할 수 있지만, 방법을 아는 사람이 있다면 온라인 방법으로 하세요. 알려주세요.

/dev/sda1이제 두 개의 별도 파일이 있으므로 기본적으로 liveCD에서 실행되는 것과 동일한 출력을 /dev/sda2제공하는 이 두 파일을 하나의 파일로 조합하는 방법이 궁금합니다 . dd if=/dev/sda of=/nfs/sda.raw conv=noerror,sync,notrunc완벽하게 정렬된 바이트만 필요합니까? 나는 이것을 위해 모든 곳을 찾았지만 운이 없었습니다. 어떤 종류의 도움이라도 대단히 감사하겠습니다!

답변1

파티션 지원을 통해 전체 디스크 이미지를 반복한 다음 dd업데이트된 sda2이미지를 여기에 넣을 수 있습니다.

losetup -P /dev/loop0 /nfs/sda.raw  #this will create /dev/loop0p1 and loop0p2
dd if=/nfs/sda2.raw of=/dev/loop0p2
losetup -d /dev/loop0

또는 파티션 테이블에 따르면 첫 번째 파티션이 섹터 #2048에서 시작하므로 디스크에는 첫 번째 파티션("헤더") 앞에 2048 * 512바이트 = 1MiB의 공간이 있고 500118192 - 500117503 - 1 = 688 섹터( 344kiB)의 파티션 끝("테일") 외부 공간입니다. (첫 번째 섹터가 #1이 아니라 #0이기 때문에 -1)

첫 번째 파티션은 섹터 #2000895로 끝나고 두 번째 파티션은 섹터 #2000896으로 시작하므로 둘 사이에 사용되지 않은 공간이 없습니다.

디스크 끝에 파티션 테이블의 백업 복사본이 포함된 GPT 파티션 테이블을 사용하고 있으므로 "꼬리" 부분도 캡처해야 합니다. 섹터 #500117504에서 시작하여 디스크 끝까지 이동합니다.

따라서 "머리"와 "꼬리" 부분의 내용을 별도로 캡처한 다음 함께 넣을 수 있습니다.

dd if=/dev/sda of=/nfs/head.raw bs=512 count=2048
dd if=/dev/sda of=/nfs/tail.raw bs=512 skip=500117504
cat /nfs/head.raw /nfs/sda1.raw /nfs/sda2.raw /nfs/tail.raw > /nfs/sda.raw

파티션 테이블을 수정하지 않는 한 "헤드" 및 "테일" 부분을 한 번만 캡처하면 됩니다. 시스템을 정상적으로 사용하는 동안 변경해서는 안 됩니다.

관련 정보