วิธีการสร้างอิมเมจดิสก์ VHD จากระบบ Linux live?


29

อีกครั้งฉันต้องใช้ผู้เชี่ยวชาญที่ SuperUser ที่นี่เนื่องจากแหล่งข้อมูลอื่นของฉัน (ส่วนใหญ่ Google ;-)) ไม่ได้พิสูจน์ว่ามีประโยชน์มาก ...

โดยพื้นฐานแล้วฉันต้องการสร้างภาพ VHD ของดิสก์ทางกายภาพเพื่อเก็บถาวร / เข้าถึง / อาจติดตั้งในเครื่องเสมือน ขณะนี้มีบทความและแบบฝึกหัดมากมายเกี่ยวกับวิธีการทำเช่นนั้นบนเว็บ แต่ไม่มีสิ่งใดที่ตรงตามเงื่อนไขที่ฉันต้องการเพื่อให้บรรลุ:

  • ฉันต้องการให้ไฟล์ปลายทางเป็นภาพ VHDเนื่องจาก Windows 7 สามารถติดตั้งได้แม้ผ่านเครือข่ายและโปรแกรมอื่น ๆ อีกมากมายสามารถใช้งานได้ (VirtualBox, ... )
  • ดิสก์ที่ฉันพยายามทำอิมเมจนั้นมีการติดตั้ง Windows XP ดังนั้นในทางทฤษฎีแล้วฉันสามารถใช้disk2vhdยูทิลิตีนี้ได้ แต่ฉันต้องการค้นหาวิธีแก้ปัญหาที่ไม่จำเป็นต้องบูตเครื่องที่ Windows XPติดตั้ง (เช่นเก็บดิสก์ไว้อ่านอย่างเดียว )
  • ดังนั้นฉันจึงค้นหาวิธีแก้ปัญหาที่เกี่ยวข้องกับระบบถ่ายทอดสด (ทำงานจาก USB stic หรือเครือข่าย)

อย่างไรก็ตามการแก้ปัญหาทั้งหมดที่ฉันได้พบใช้ทั้งการใช้disk2vhdหรือใช้ddคำสั่งภายใต้ linux ซึ่งจะคัดลอกดิสก์ที่สมบูรณ์ (เช่นบล็อกว่างเปล่า) และไม่ส่งออกไฟล์ VHD มีเครื่องมือ / โปรแกรมใน Linux ที่สามารถสร้างไฟล์ VHD ได้โดยตรงหรือไม่? หรือเป็นไปได้ที่จะแปลงอิมเมจดิสก์ดิบที่สร้างขึ้นโดยใช้ dd เป็นไฟล์ VHD โดยไม่ต้องจัดสรรพื้นที่สำหรับบล็อกว่างเปล่า? คุณจะดำเนินการอย่างไร

เช่นเคยคำแนะนำหรือความคิดเห็นใด ๆ ที่นิยมอย่างมาก !!


BSD มีเครื่องมือที่เรียกว่า mkimg ที่สามารถสร้างภาพ vhd ในรูปแบบอื่น ๆ
Julian

คำตอบ:


30

สำหรับการอ้างอิงในอนาคตนี่คือวิธีที่ฉันดำเนินการในที่สุดด้วยความคิดเห็นเล็กน้อยเกี่ยวกับปัญหาหรือข้อผิดพลาดต่าง ๆ ที่พบ:

1. บู๊ตเครื่องด้วยระบบ Linux live

ขั้นตอนแรกคือการบู๊ตเครื่องที่มีดิสก์ต่อภาพโดยใช้ระบบ Linux live

หมายเหตุ: ความคิดแรกของฉันคือการใช้ดิสก์อูบุนตูสด USB แต่เครื่องไม่สนับสนุนการบูตจาก USB ดังนั้นผมพบว่ามันง่ายต่อการใช้เก่าKnoppix ซีดีสด

2. อิมเมจดิสก์โดยใช้ddและไพพ์ข้อมูลผ่านssh

จากนั้นฉันคัดลอกเนื้อหาดิสก์ทั้งหมดไปยังไฟล์รูปภาพบนเซิร์ฟเวอร์ภายในเครื่องของฉันโดยใช้ddและไพพ์ข้อมูลผ่านssh:

$ dd if = / dev / hdX bs = 4k conv = noerror, sync | ssh -c blowfish myuser @ myserver 'dd of = myfile.dd'

ความเห็นเล็ก ๆ น้อย ๆ ที่นี่: วิธีนี้จะอ่านเนื้อหาดิสก์ทั้งหมดดังนั้นจึงอาจใช้เวลานานมาก (ใช้เวลา 5 ชั่วโมงสำหรับดิสก์ 80Gb) คอขวดไม่ใช่เครือข่าย แต่จริงๆแล้วความเร็วในการอ่านดิสก์ ก่อนที่จะเริ่มการคัดลอกฉันแนะนำให้ตรวจสอบพารามิเตอร์ BIOS / ดิสก์ / ระบบเพื่อให้แน่ใจว่าดิสก์และแผงวงจรหลักทำงานที่ความเร็วสูงสุดที่เป็นไปได้ (สามารถตรวจสอบได้โดยใช้คำสั่งhdparm -iและโดยการทดสอบด้วยhdparm -Tt /dev/hdX)

หมายเหตุ: ddไม่ส่งสัญญาณความคืบหน้าของการดำเนินการ แต่เราสามารถบังคับให้ทำได้โดยส่งสัญญาณUSR1ไปยังddกระบวนการ PID จากเทอร์มินัลอื่น:

$ kill -USR1 PIDofdd

3. เรียกคืนพื้นที่ที่ไม่ได้ใช้

ณ จุดนี้เครื่องต้นทางไม่ต้องการอีกต่อไปและเราจะทำงานเฉพาะบนเซิร์ฟเวอร์ปลายทาง (ใช้งาน Linux ด้วย) VirtualBox จะถูกใช้เพื่อแปลงอิมเมจดิสก์ดิบเป็นรูปแบบ VHD แต่ก่อนที่จะทำเช่นนั้นเราสามารถ zero block ที่ไม่ได้ใช้งานเพื่อให้ 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

NOTE2: ไดรเวอร์ Linux kernel NTFS ที่เป็นค่าเริ่มต้นให้การเข้าถึงแบบอ่านอย่างเดียวดังนั้นจึงจำเป็นต้องติดตั้งและใช้ntfs-3gไดรเวอร์userspace หรือการเขียนลงดิสก์จะทำให้เกิดข้อผิดพลาด!

4. สร้างอิมเมจ VHD โดยใช้ VBoxManage

ณ จุดนี้เราสามารถใช้ยูทิลิตี้ 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
คุณลืมซีดีลงดิสก์ที่ติดตั้งก่อนสร้างไฟล์ศูนย์: 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; นอกจากนี้คุณสามารถใช้ pv แทน dd เพื่อแสดงความคืบหน้าได้ทันที
Smeterlink

1
คุณควรใช้ขนาดบล็อกที่ใหญ่ขึ้นด้วย dd ตัวอย่างเช่นbs=4Mเพื่อเร่งกระบวนการอย่างมีนัยสำคัญ
ฟริตซ์

13

ผมพยายามที่จะทำสิ่งเดียวกันเป็น OP (ในขณะที่ช่วยติดตั้ง Windows) ntfsclone2vhdและจบลงด้วยการสร้างเครื่องมือใหม่สำหรับมัน

จากนั้นคุณจะทำสิ่งนี้:

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

1
3 ปีที่ผ่านมากับเกม แต่หน้านี้เป็นคำที่เกี่ยวข้องกับคำหลักของ Google ที่ได้รับความนิยมสูงสุดดังนั้นมันจึงอาจช่วยจิตวิญญาณที่น่าสงสารในอนาคตได้
Yirkha

2
โซลูชันนี้จำเป็นต้องได้รับการโหวตให้อยู่ด้านบน มันเป็นทางออกที่ง่ายที่สุด (ไม่ต้องmakeคัดลอก Linux) ที่ฉันพบในการค้นหาหลายชั่วโมง ไชโยที่ริเริ่ม Yirkha!
user66001

3

วิธีหนึ่งคือการใช้เทคโนโลยีที่มีประโยชน์สองสามอย่าง: VirtualBox และntfsprogsแพ็คเกจ

VirtualBox เวอร์ชันล่าสุดอนุญาตให้คุณสร้างไฟล์ฮาร์ดดิสก์ VHD ในขณะที่ntfsprogsให้ntfscloneยูทิลิตี้ เป็นชื่อของมันแนะนำntfscloneclones ระบบไฟล์ NTFS และฉันเชื่อว่ามันทำในระดับระบบไฟล์ข้ามผ่านบล็อกดิสก์ที่ไม่ได้ใช้

ดังนั้นในการเริ่มต้นสร้าง VM ใหม่ใน VirtualBox และจัดเตรียมไดรฟ์ VHD ใหม่ที่ว่างเปล่าสำหรับมัน ไดรฟ์ VHD นั้นจำเป็นต้องมีขนาดใหญ่เท่ากับขนาดของข้อมูลที่ใช้ในไดรฟ์ทางกายภาพที่คุณต้องการโคลน (จริง ๆ แล้วทำให้มันใหญ่ขึ้นเล็กน้อย

ถัดไปพบซีดีสดลินุกซ์ที่มีแพคเกจเช่นเดียวกับntfsprogs openssh-serverฉันชอบSystem Rescue CDสำหรับสิ่งนี้ แต่ CD ไลฟ์ที่ใช้ Debian- หรือ Ubuntu เป็นหลักน่าจะใช้ได้เช่นกัน

บู๊ต VirtualBox VM ด้วยซีดีสด Linux และเริ่มต้นsshdภายใน VM เพื่อให้คุณสามารถดำเนินการคำสั่งได้จากระยะไกล แบ่งพาร์ติชันไดรฟ์ VHD ที่ว่างเปล่าโดยใช้เครื่องมือแบ่งพาร์ติชันที่คุณต้องการ (ฉันชอบแบบเก่าธรรมดาfdiskแต่ฉันเป็นโรงเรียนเก่า)

เมื่อใช้สำเนาอื่นของซีดีสด Linux ให้บูตเครื่องที่มีดิสก์จริงที่คุณต้องการโคลน ฉันคิดว่า VirtualBox VM และเครื่องนี้สามารถเข้าถึงได้ผ่านเครือข่าย บนเครื่องนี้ให้ใช้คำสั่งต่อไปนี้ (ทั้งหมดในหนึ่งบรรทัด):

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

ที่อยู่:

  • /dev/sdXX คือชื่ออุปกรณ์ (บนเครื่องโลคัล) ของฟิสิคัลไดรฟ์ที่คุณต้องการโคลนและ
  • /dev/sdYY คือชื่ออุปกรณ์ (ใน VM) ของไดรฟ์ปลายทาง VHD

คำอธิบาย: ntfscloneคำสั่งแรกในไปป์ไลน์แยกอิมเมจของระบบไฟล์ NTFS ต้นทางและส่งออกผ่าน ssh tunnel ในขณะที่ntfscloneคำสั่งที่สองรับอิมเมจและเรียกคืนไปยังไดรฟ์ VHD

เมื่อการดำเนินการเสร็จสิ้นไฟล์ VHD ควรมีโคลนที่แน่นอนแบบไฟล์ต่อไฟล์ของฟิสิคัลดิสก์ดั้งเดิม (ยกเว้นข้อผิดพลาดของฮาร์ดแวร์ใด ๆ เช่นเซกเตอร์ที่ไม่ดีซึ่งอาจทำให้กระบวนการยกเลิกก่อนกำหนด)

สิ่งสุดท้ายที่คุณอาจต้องทำคือเรียกใช้ Windows chkdskบนไดรฟ์ VHD เพียงเพื่อให้แน่ใจว่าการโคลนนิ่งไม่แนะนำปัญหาใด ๆ (ไม่ควรมี แต่เอาล่ะฉันค่อนข้างหวาดระแวงเกี่ยวกับสิ่งเหล่านี้)


สวัสดีขอบคุณมากสำหรับคำแนะนำของคุณ! ในที่สุดฉันใช้วิธีอื่นเนื่องจากมีพาร์ติชั่นหลายตัวในดิสก์เพื่อสำรองข้อมูลและไม่สามารถใช้ VirtualBox บนเครื่องเพื่อสำรองข้อมูลได้อย่างง่ายดาย (ดูคำตอบของฉันสำหรับรายละเอียด) แต่ข้อเสนอแนะของคุณในการใช้ VirtualBox และ ssh พิสูจน์แล้วว่ามีประโยชน์มาก!
Federico

1

(ฉันรู้ว่านี่เป็นโพสต์เก่า แต่อย่างน้อยอาจช่วยคนอื่นได้)

คุณจำเป็นต้องสร้างภาพภายใต้ Linux จริง ๆ หรือไม่? ฉันคิดว่าคุณพยายามสำรองฮาร์ดไดรฟ์ Windows ไปที่ VHD ฉันไม่คิดว่าระบบไฟล์ Linux สามารถถูกห่อหุ้มในคอนเทนเนอร์ VHD

ยูทิลิตีSysInternalsฟรีที่ชื่อว่าDisk2vhdจะสร้าง VHDs ของ Windows XP ที่รันอยู่ในปัจจุบันหรือระบบที่ใหม่กว่า สิ่งนี้ควรทำงานกับไดรฟ์ USB ที่ถ่ายภาพ


0

ฉันก็พยายามที่จะโคลนระบบ linux สดเมื่อเร็ว ๆ นี้

ยังไม่มีวิธีแก้ปัญหาที่สมบูรณ์แบบ แนะนำ 2 วิธีที่คุณอาจลอง:

(1) VMware vConverter (ฟรี)

คุณต้องติดตั้ง vsphere hypervisor (ฟรี) เป็นปลายทาง

เมื่อวานนี้ฉันทำไปแล้วไม่มีโชคที่จะประสบความสำเร็จ ฉันคิดว่าติดตั้ง vSphere บน VirtualBox

อ้างอิงที่นี่: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2) ใช้อันนี้http://www.r1soft.com/tools/linux-hot-copy/

ฉันจะลอง R1Soft hotcopy สุดสัปดาห์นี้


ฉันจะไม่ลองคัดลอกที่ร้อนแรงด้วยเหตุนี้wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT

0

คุณสามารถใช้ซีดีสดกับ windows ไม่ใช่เป็นทางการจาก Microsoft แต่ใช้งานได้ คุณสามารถวางไว้ในไดรฟ์ซีดีหรือ usb

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.