gzip을 사용하여 HDD 이미지를 복원하면 "장치에 남은 공간이 없습니다"라는 오류가 발생합니다.

gzip을 사용하여 HDD 이미지를 복원하면 "장치에 남은 공간이 없습니다"라는 오류가 발생합니다.

다음 명령을 사용하여 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.imggzip을 사용하지 않고 복원하면 작동합니다.

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파일을 생성합니다 . 이는 표준 출력으로 아무 것도 전송되지 않기 때문에 아무 쓸모 도 없습니다 .imgimg.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이는 어느 정도 허용됩니다.

제 생각에는 이 기능을 사용해야 하는 유일한 시간은 ddMBR 디스크의 첫 번째 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를 다시 가져오라고 말합니다. 아무도 필요 없어멋진그럽의 일부.

관련 정보