다음 명령을 사용하여 256GB HDD에서 이미지를 만들었습니다.
dd if=/dev/sda bs=4M | pv -s 256G | gzip > /mnt/mydrive/img.gz
나중에 다음 명령을 사용하여 다른 컴퓨터에 있는 다른 512GB HDD로 이미지를 복원하려고 했습니다.
gzip -d /mnt/mydrive/img.gz | pv -s 256G | dd of=/dev/sda bs=4M
두 번째 명령은 오랫동안 0바이트의 진행 상황을 표시하고(단지 초만 계산하지만 아무 일도 일어나지 않음) 잠시 후 오류 메시지와 함께 실패합니다.기기에 남은 공간이 없습니다..
문제는 gzip 명령에 있습니다. 이미지 파일의 압축을 원래 256GB 파일로 풀고 xxx.img
gzip을 사용하지 않고 복원하면 작동합니다.
dd if=/mnt/mydrive/xxx.img bs=4M | pv -s 256G | dd of=/dev/sda bs=4M
분명히 문제는 gzip
명령에 있습니다(그것도 시도했지만 gunzip
운이 없었습니다). 해결 방법으로 거대한 임시 외장 드라이브를 사용하여 이미지를 복구할 수 있었는데, 이는 성가신 일입니다. 압축된 이미지의 크기는 원본 이미지의 약 10%입니다. 왜 gzip
실패했는지 아시나요 ?
참고 사항: 문제는 pv
또는 에 없습니다 dd
. 다음 명령은 동일한 오류 메시지와 함께 실패합니다.
gzip -d /mnt/mydrive/img.gz > /dev/sda
답변1
다음 명령은 기대한 것과 정확히 일치하지 않습니다.
gzip -d /mnt/mydrive/img.gz > /dev/sda
이 명령은 파일의 압축을 풀고 이라는 /mnt/mydrive/img.gz
파일을 생성합니다 . 이는 표준 출력으로 아무 것도 전송되지 않기 때문에 아무 쓸모 도 없습니다 .img
img.gz
> /dev/sda
/dev/sda
이것이 당신이 해야 할 일입니다. 출력을 stdout으로 보내십시오( 를 사용하여 -c
):
gunzip -c /mnt/mydrive/img.gz > /dev/sda
또는
gunzip -c /mnt/mydrive/img.gz | pv -s 256G | dd of=/dev/sda bs=4M
답변2
나는 아니에요알다gzip이 실패하는 이유는 32비트와 관련이 있을 수 있습니다. Windows에 설치된 [이전] 버전의 winzip이 4GB보다 큰 파일을 처리할 때 실패하지만 4GB보다 큰 파일을 처리할 수 없다는 팝업 상자가 나타납니다. 나는 단일 파일을 10번 이상 gzip으로 압축한 사람을 알지 못합니다. 당신은 256을 수행하고 있습니다. 저는 단일 파일에 그런 작업을 결코 수행하지 않을 것입니다. 그러나 그것이 제 의견입니다.
dd
하드 디스크 이미지를 사용할 때의 문제점은 /
파티션이 100% 꽉 차 있지 않다는 것입니다. 평균적으로 10GB가 있는데, 이는 256GB의 5%에 해당합니다. 이런 식으로 사용 하면 dd
실제 정보의 5%가 포함된 256GB gz 파일이 생기고 나머지 95%는 모두 디스크에 있는 빈 [임의] 값입니다. 따라서 dd
이런 방식으로 사용하고 싶지 않습니다. dd
전체 디스크, 특히 테라바이트 디스크의 경우 시간이 엄청나게 오래 걸린다는 점은 말할 것도 없습니다 .
1GB 이하의 부팅 또는 efi 파티션의 경우 dd
이는 어느 정도 허용됩니다.
제 생각에는 이 기능을 사용해야 하는 유일한 시간은 dd
MBR 디스크의 첫 번째 512를 저장/복원하는 것입니다.바이트~의막 생물 반응기, 단일 파일로 저장합니다.
이 작업을 수행하는 소프트웨어를 제외하면 가장 좋은 솔루션은 tar
부트로더가 무엇이든 사용하고 이해하는 것입니다. 그러나 컴퓨터의 Linux 운영 체제를 실행한 다음 image
파일을 저장할 디스크를 마운트할 두 번째 디스크도 필요합니다. 이것이 원칙이다
for example let's say the disk to be imaged is partitioned like this,
which is about the minimum required and currently done in RHEL/CentOS 7
/dev/sdc1 /boot 1gb XFS
/dev/sdc2 /boot/efi 100mb EFI
/dev/sdc3 / 99tb XFS
# mount disk to have an image of it saved, let's say it shows up as `/dev/sdc`
# going to save image files of each partition under root folder
# assuming there is enough space to do so there
mkdir /sdc1
mount /dev/sdc1 /sdc1
cd /sdc1
tar -cf /root/boot.tar *
# boot partition is 1gb total size, but only has 300mb on it so you only have to manage a 300gb boot.tar file
cd /
umount /sdc1
mkdir /sdc2
mount /dev/sdc2 /sdc2
cd /sdc2
tar -cf /root/efi.tar *
# efi partition is 100mb, but only has 5mb on it, so only a 5mb efi.tar file
cd /
umount /sdc2
mkdir /sdc3
mount /dev/sdc3 /sdc3
cd /sdc3
tar -cf /root/root.tar *
# root partition was however big, but only has N gb of actual file system data so you end up with an N gb root.tar file to have to worry about.
cd /
umount /sdc3
disconnect that disk from computer
# move or rename the boot.tar, efi.tar, and root.tar files as necessary.
새 디스크의 이미지 생성
- 새 디스크 마운트
- 파티션을 원하는 크기로 포맷하세요. 크기는 해당 tar 파일보다 커야 합니다. 이는 분명합니다.
- **요구 사항*은 root.tar가 XFS 파일 시스템에 있는 경우 XFS 파일 시스템에 압축을 풀어야 한다는 것입니다. 새 디스크를 EXT4 또는 BTRFS와 같은 다른 유형으로 분할하고 루트의 압축을 풀도록 결정할 수는 없습니다. tar 파일(이 파일은 이 Linux 운영 체제의 xfs 파일 시스템에 속합니다). 해봤는데 시작이 안되네요. 따라서 루트 디렉터리와 시작 .tar 파일의 이름을
_xfs
기억할 수 있는 이름으로 지정하십시오. - 이 방법은 간단히 다음
tar -cf
으로 교체하여tar -xf
복원할 수 있습니다. - 이제 남은 것은 운영 체제와 독립적인 부팅 메커니즘뿐입니다.
왜냐하면시작하다프로세스는 linux, efi vs MBR, grub, grub2 vs ELILO 간에 다를 수 있습니다. 이 시점에서 제가 말씀드릴 수 있는 것은 어떤 부트로더를 사용하고 있는지, 어떻게 사용하는지 이해해야 한다는 것입니다.다시 설치그게 다입니다. 그런 다음 새 디스크에 맞게 재구성하십시오. Linux 배포판 설치 DVD를 부팅하고 부팅 파티션을 복구하면 이 작업을 수행할 수 있습니다.그러나 이것은 다시 Linux 배포판에 따라 다릅니다.
아마도 macrium이나 aomei와 같은 복제 소프트웨어를 찾는 것이 가장 좋은 곳일 것입니다.
tar를 통해 이 수동 복제 방법을 수행하기로 결정한 경우 새 디스크는 이전 디스크가 아니므로 이전 디스크에 대한 모든 참조를 새 디스크로 변경해야 합니다. 특히보편적으로 고유한 식별자하지만 /etc/fstab
다음을 설치하면 이 문제를 완화할 수 있습니다.이름으로fstab에는 mount /dev/sda#
새 디스크가 하나만 있고 sda로 표시되는 한 이 기능이 작동합니다. 어려운 부분은 grub2 또는 사용 중인 부트로더를 수정하기 위해 실행 가능한 프로세스를 찾는 것입니다. ELILO 시절에는 elilo.conf 파일에서 한 줄만 수정하면 이 작업이 훌륭하고 간단했습니다.
그래서 나는 ELILO를 다시 가져오라고 말합니다. 아무도 필요 없어멋진그럽의 일부.