나중에 참조 할 수 있도록 다양한 문제 또는 함정에 대한 몇 가지 의견과 함께 마지막으로 진행 한 방법은 다음과 같습니다.
1. 리눅스 라이브 시스템으로 머신을 부팅
첫 번째 단계는 Linux 라이브 시스템을 사용하여 디스크가 포함 된 머신을 이미지로 부팅하는 것입니다.
참고 : 첫 번째 아이디어는 Ubuntu Live USB 디스크를 사용하는 것이었지만 컴퓨터는 USB 부팅을 지원하지 않으므로 오래된 Knoppix 라이브 CD 를 사용하는 것이 더 쉽다는 것을 알았습니다 .
2. 디스크를 사용하여 디스크를 dd
이미징하고 데이터를 파이프ssh
그런 다음 모든 디스크 내용을 로컬 서버의 파일 이미지로 복사하고 다음을 dd
통해 데이터를 파이핑했습니다 ssh
.
$ dd if = / dev / hdX bs = 4k conv = noerror, sync | ssh -c 복어 myuser @ myserver 'dd of = myfile.dd'
여기에 몇 가지 의견이 있습니다.이 방법은 모든 디스크 내용을 읽으므로 매우 오래 걸릴 수 있습니다 (80Gb 디스크의 경우 5 시간이 걸렸습니다). 병목 현상은 네트워크가 아니라 실제로 디스크 읽기 속도입니다. 복사본을 시작하기 전에 BIOS / 디스크 / 시스템 매개 변수를 확인하여 디스크와 마더 보드가 가능한 최고 속도로 작동하는지 확인하는 것이 좋습니다 (이 명령은 명령을 사용하여 hdparm -i
테스트를 실행 하여 확인할 수 있음 hdparm -Tt /dev/hdX
).
참고 : dd
작업 진행률을 출력하지 않지만 USR1 신호를 dd
다른 터미널에서 프로세스 PID 로 전송하여 강제로 진행할 수 있습니다 .
$ kill -USR1 PIDofdd
3. 사용하지 않은 공간을 되 찾으십시오
이 시점에서 소스 머신은 더 이상 필요하지 않으며 대상 서버 (Linux도 실행)에서만 독점적으로 작업합니다. VirtualBox는 원시 디스크 이미지를 VHD 형식으로 변환하는 데 사용되지만 그렇게하기 전에 VirtualBox가 최종 파일에서 공간을 할당하지 않도록 사용하지 않는 블록을 제로화 할 수 있습니다.
이를 위해 이미지를 루프백 장치로 마운트했습니다.
$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file
참고 : 디스크 이미지 내에서 파티션의 시작을 나타내는 오프셋 parted
은 이미지 파일 을 사용하여 얻을 수 있습니다 .
$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit? [compact]? B
(parted) print
Model: (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 21936821759B 21936789504B primary ntfs boot
2 21936821760B 80023749119B 58086927360B extended lba
5 26608813056B 80023749119B 53414936064B logical ntfs
참고 2 : 기본 Linux 커널 NTFS 드라이버는 읽기 전용 액세스를 제공하므로 사용자 공간 ntfs-3g
드라이버 를 설치 및 사용해야 하거나 디스크에 쓰면 오류가 발생합니다!
4. VBoxManage를 사용하여 VHD 이미지 생성
이 시점에서 VirtualBox 유틸리티를 사용하여 원시 이미지를 VHD 파일로 변환 할 수 있습니다.
VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD