Linux 라이브 시스템에서 VHD 디스크 이미지를 만드는 방법은 무엇입니까?


29

다른 소스 (주로 Google ;-))가 그다지 도움이되지 않았으므로 SuperUser의 전문가에게 한 번 더 의지해야합니다 ...

따라서 기본적으로 가상 머신에 아카이브 / 액세스 / 마운트 될 물리적 디스크의 VHD 이미지를 만들고 싶습니다. 이제 웹에서 수행하는 방법에 대한 수십 개의 기사와 자습서가 있지만 달성하려는 조건을 정확히 충족시키는 것은 없습니다.

  • Windows 7이 네트워크를 통해 기본적으로 마운트 할 수 있으며 다른 많은 프로그램에서 사용할 수 있기 때문에 대상 파일VHD 이미지 로 만들고 싶습니다 (VirtualBox, ...)
  • 이미지화하려는 디스크에 Windows XP 설치가 포함되어 있으므로 이론적으로 disk2vhd유틸리티를 사용할 수는 있지만 해당 Windows XP 설치를 부팅 할 필요가없는 솔루션 을 찾고 싶습니다 (예 : 디스크를 읽기 전용으로 유지) )
  • 그래서 나는 일종의 라이브 시스템 (USB 스틱 또는 네트워크에서 실행) 과 관련된 솔루션을 찾고있었습니다.

그러나 내가 찾은 모든 솔루션 은 디스크의 전체 사본 (예 : 빈 블록)을 수행하고 VHD 파일을 출력하지 않는 Linux disk2vhd에서 dd명령을 사용하거나 사용 합니다. Linux에는 VHD 파일을 직접 만들 수있는 도구 / 프로그램이 있습니까? 또는 빈 블록에 공간을 할당하지 않고 dd를 사용하여 만든 원시 디스크 이미지를 VHD 파일로 변환 할 수 있습니까? 어떻게 진행 하시겠습니까?

언제나 그렇듯이 조언이나 의견은 대단히 감사합니다!


BSD에는 다른 형식 중에서도 vhd 이미지를 만들 수있는 mkimg라는 도구가 있습니다.
julian

답변:


30

나중에 참조 할 수 있도록 다양한 문제 또는 함정에 대한 몇 가지 의견과 함께 마지막으로 진행 한 방법은 다음과 같습니다.

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

vhd 이미지를 사용 vdfuse하거나 이미지를 qemu-nbd.img 파일로 변환 할 수 있어야 합니다 (추가 정보 : askubuntu.com/questions/19430/… )
Francesco

1
느린 시스템에서 ssh의 암호화는 병목 현상 일 수 있습니다. 암호화가 필요없는 경우 대신 netcat (man nc)을 사용하십시오.
Jeremy

2
0 파일을 작성하기 전에 마운트 된 디스크에 CD를 넣는 것을 잊었습니다. mount -o loop, rw, offset = 26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; cat / dev / zero> zero.file; rm zero.file; 또한 dd 대신 pv를 사용하여 즉시 진행 상황을 표시 할 수 있습니다.
Smeterlink

1
bs=4M를 들어 프로세스 속도를 크게 높이려면 dd와 함께 더 큰 블록 크기를 사용해야합니다 .
프리츠

13

나는 Windows 설치를 구출하는 동안 OP와 정확히 같은 일을하려고하고 새로운 도구를 만들었습니다 ntfsclone2vhd.

그런 다음 간단히 다음과 같이하십시오.

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd

1
3 년 늦게 게임을했지만이 페이지는 관련 키워드로 Google이 가장 많이 검색 한 것이므로 앞으로도 가난한 사람들에게 도움이 될 수 있습니다.
Yirkha

2
이 솔루션은 정상에 투표해야합니다. make여러 시간 검색에서 찾은 가장 쉬운 솔루션 ( 리눅스 사본이 필요함)입니다. 이르 카 주도권을 잡는 브라보!
user66001 2016

3

한 가지 접근 방식은 몇 가지 편리한 기술인 VirtualBox 및 ntfsprogs패키지를 사용하는 것입니다.

최신 버전의 VirtualBox를 사용하면 VHD 하드 디스크 파일을 만들면서 유틸리티 를 ntfsprogs제공 할 ntfsclone수 있습니다. 이름에서 알 수 있듯이 ntfscloneNTFS 파일 시스템을 복제하고 사용하지 않는 디스크 블록을 건너 뛰고 파일 시스템 수준에서 수행한다고 생각합니다.

따라서 VirtualBox에서 새 VM을 만들고 비어있는 새 VHD 파일 드라이브를 프로비저닝하십시오. VHD 드라이브는 복제하려는 실제 드라이브에서 사용중인 데이터 크기만큼 커야합니다.

다음으로 ntfsprogs패키지 및 Linux Live CD를 찾으십시오 openssh-server. 나는 이것을 위해 System Rescue CD 를 좋아 하지만 데비안 또는 우분투 기반 라이브 CD도 거의 작동합니다.

Linux 라이브 CD로 VirtualBox VM을 부팅하고 VM sshd내에서 시작 하여 원격으로 명령을 실행할 수 있도록합니다. 원하는 파티션 도구를 사용하여 빈 VHD 드라이브를 적절하게 파티션하십시오 (나는 평범한 구식을 좋아 fdisk하지만 다소 구식입니다).

Linux 라이브 CD의 다른 사본을 사용하여 복제하려는 물리 디스크가있는 머신을 부팅하십시오. VirtualBox VM과이 컴퓨터는 네트워크를 통해 서로 액세스 할 수 있다고 가정합니다. 이 머신에서 다음 명령을 모두 한 줄에 실행하십시오.

ntfsclone --save-image -o - /dev/sdXX |
    ssh root@VirtualBox-VM 'ntfsclone --restore-image --overwrite /dev/sdYY -'

어디에:

  • /dev/sdXX 복제하려는 실제 드라이브의 장치 이름 (로컬 시스템에 있음)
  • /dev/sdYY VHD 대상 드라이브의 장치 이름 (VM에서)입니다.

설명 : ntfsclone파이프 라인 의 첫 번째 명령은 소스 NTFS 파일 시스템의 이미지를 추출하여 ssh 터널을 통해 전송하고 두 번째 ntfsclone명령은 이미지를 수신하여 VHD 드라이브에 복원합니다.

작업이 완료되면 VHD 파일에 원본 물리 디스크의 파일 별 파일 복제본이 포함되어 있어야합니다 (불량 섹터와 같이 하드웨어 오류가 발생하지 않아 프로세스가 조기에 중단 될 수 있음).

마지막으로 할 일은 chkdskVHD 드라이브에서 Windows를 실행하는 것입니다. 복제에 아무런 문제가 발생하지 않았는지 확인하기 위해 (그렇지 않아야하지만, 나는 이것에 대해 약간의 편집증입니다).


안녕하세요, 제안 된 솔루션에 대해 대단히 감사합니다! 결국, 디스크에 여러 파티션을 백업 할 때 다른 방법을 사용했으며 컴퓨터에서 VirtualBox를 사용하여 백업 할 수 없었지만 (자세한 내용은 답변 참조) VirtualBox 및 ssh를 사용하라는 제안은 매우 유용했습니다!
Federico

1

(이것은 오래된 게시물이라는 것을 알고 있지만 적어도 다른 사람들에게 도움이 될 것입니다.)

Linux에서 이미지를 만들 수 있어야합니까? Windows 하드 드라이브를 VHD로 백업하려고합니다. Linux 파일 시스템을 VHD 컨테이너에 캡슐화 할 수 있다고 생각하지 않습니다.

Disk2vhd 라는 무료 SysInternals 유틸리티 는 현재 실행중인 Windows XP 이상 시스템의 VHD를 생성합니다. USB 마운트 드라이브 이미징에도 작동합니다.


0

또한 최근에 라이브 리눅스 시스템을 복제하려고합니다.

여전히 완벽한 솔루션은 없습니다. 시도해 볼 수있는 두 가지 방법을 제안하십시오.

(1) VMware vConverter (무료)

vsphere 하이퍼 바이저 (무료)를 대상으로 설치해야합니다.

나는이 일 전에 성공했지만 운이 없다. VirtualBox에 vSphere를 설치 한 것 같습니다.

여기를 참조하십시오 : http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2) 이것을 사용하십시오 http://www.r1soft.com/tools/linux-hot-copy/

이번 주말에 R1Soft 핫 카피를 시도하겠습니다.


나는,이 때문에 핫 사본을 시도하지 않습니다 wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT

0

Windows에서 라이브 CD를 사용할 수도 있습니다. Microsoft 공식은 아니지만 작동합니다. CD 또는 USB 드라이브에 넣을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.