부팅 가능한 디스크를 여러 컴퓨터의 여러 디스크(다른 크기)에 복제해야 하며 스크립트가 가능해야 하지만 이를 수행할 방법을 찾을 수 없습니다.
나는 모든 것에 Ubuntu 16.04를 사용합니다.
먼저 다음을 실행합니다 dd
(디스크 마운트 해제).
$ dd if=/dev/sda bs=1K count=10000000 status=progress | gzip -c > os.img
이는 약 10GB, 압축 파일은 약 3.8GB, 소스 디스크는 120GB, 테스트한 대상 디스크는 16GB이므로 모든 크기에서 작동할 것이라고 확신합니다. 다음을 사용하여 디스크에 씁니다.
$ gunzip -c os.img | dd bs=1K of=/dev/sda status=progress
하지만 시작되지 않고 다음과 같은 결과를 얻습니다.
커널 패닉 - 동기화되지 않음: VFS: 알 수 없는 블록(0,0)에 루트 파일 시스템을 마운트할 수 없습니다.
이것이 무엇을 의미하는지 잘 모르겠어서 구글링을 해봤지만 해결책을 찾지 못했습니다. 그런 다음 라이브 OS에 디스크를 마운트하여 최소한 작동하는지 확인하려고 시도했지만 다음과 같은 결과를 얻었습니다.
$ sudo mount /dev/sda1 /mnt
EXT4-fs (sda1): bad geometry: block count 29306624 exceeds size of device (14653670 blocks)
이것은 나에게 이해가 되지 않습니다. 이 문제를 해결할 수 있는지 아니면 더 좋은 방법이 있는지 아는 사람이 있나요? 누군가 clonezilla를 추천하는 것을 봤는데 스크립트 가능한 버전을 찾을 수 없고 "터미널 GUI"에서만 사용할 수 있는 것 같습니다.
답변1
문제는 원본 디스크의 크기가 대상 디스크(일부)보다 크다는 것입니다. 이는 파티션 테이블이 서로 다른 크기의 디스크용으로 만들어졌기 때문에 작동하지 않는다는 것을 의미합니다.
귀하의 입장에서는 먼저 디스크의 모든 파티션을 삭제한 다음 고정 크기 파티션을 생성하기 위해 등을 사용하는 스크립트를 작성할 것입니다 fdisk
(이 파티션은 이미지를 가져온 파티션과 크기가 동일해야 하며 파티션을 생성해야 할 수도 있습니다). 이와 같이) 그런 다음 부팅 가능하게 만듭니다. 이렇게 하면 해당 크기의 디스크에 대해 파티션 테이블이 올바른지 확인할 수 있습니다. 마지막으로 당신은 복사분할(예: /dev/sda1) 전체 디스크 대신.
gzip
그런데, / gunzip
와 둘 다 사용하는 것은 의미가 없습니다 dd
(진행률 표시를 좋아하지 않는 한). dd
쓰기 작업이 특정 크기인지 확인하는 것뿐입니다. 그냥 사용할 수 있습니다
gzip -c /dev/sda1 > os.img
gunzip -c os.img > /dev/sdb1
등. 진행 상황을 표시하려면 pv
.