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