ฉันใช้เวลาทั้งหมดในการค้นคว้าเมื่อวานนี้และในที่สุดก็สามารถบูต Windows XP ได้ มันควรจะค่อนข้างคล้ายกับระบบปฏิบัติการอื่น ๆ เช่นกัน แต่การดำเนินการเป็นทุกอย่าง แต่ไม่น่ารำคาญ
เนื่องจากเป็นการดำเนินการที่เป็นอันตรายฉันขอแนะนำให้สำรองข้อมูลอันมีค่าของคุณ
นี่คือขั้นตอน:
การจัดเตรียม
ในกรณีที่ Windows XP คุณต้องลืมการตั้งค่าตัวอักษรดิสก์และพาร์ติชันปัจจุบันดังนั้นคุณต้องลบค่าทั้งหมดออกจากคีย์ HKEY_LOCAL_MACHINE / MountedDevices บนเครื่องเสมือนก่อนการโยกย้าย เคอร์เนลจะสร้างใหม่ในการรีบูตครั้งถัดไป บนเครื่องเสมือน Linux หมายถึงการแก้ไข fstab หลังการโอนย้าย
การเมานต์อิมเมจ VDI
คุณไม่สามารถคัดลอก VDI ทั้งหมดไปยังพาร์ติชันได้เนื่องจากมันมี MBR ด้วย คุณต้องคัดลอกเฉพาะพาร์ติชันเสมือนดังนั้นก่อนอื่นคุณต้องหาวิธีในการเมานต์ VDI
คุณต้องการnbdไดรเวอร์และqemu-nbdคำสั่ง บน Ubuntu มันอยู่ในqemu-kvmแพ็คเกจ
ก่อนโหลดไดรเวอร์ nbd:
# modprobe nbd
นี้ควรทำให้บางอุปกรณ์nbd/dev
จากนั้นเมานต์ VDI:
# qemu-nbd -c /dev/nbd0 path_to.vdi
สิ่งนี้ควรทำ/dev/nbd0p1, /dev/nbd0p2และ/dev/nbd0p3อื่น ๆ สำหรับพาร์ติชันเสมือนทั้งหมด สามารถติดตั้งได้เหมือนกับอุปกรณ์ทั่วไป
การโอนย้ายพาร์ติชัน
ใช้ddสำหรับการถอดแบบพาร์ติชันทั้งสองก่อนการดำเนินการ:
# dd -if=<nbd_device> -of=<real_partition>
เช่น.:
# dd -if=/dev/nbd0p3 -of=/dev/sda4
การทำงานของโหมดddเงียบอาจใช้เวลาหลายนาทีหรือครึ่งชั่วโมง ในระหว่างการดำเนินการคุณอาจเปิดเทอร์มินัลและใช้fdisk -lเพื่อดูว่าทุกอย่างเป็นไปด้วยดี
UPDATE:
เห็นได้ชัดว่า NBD ไม่ใช่โซลูชันที่เข้าใจผิดได้ มันอาจทำให้เกิดข้อผิดพลาด I / O และทำให้ dd ล้มเหลว ยิ่งไปกว่านั้นความพยายามครั้งต่อไปล้มเหลวทันที คุณยังสามารถลองสร้างดิสก์ดิบ VMDK ด้วยคำสั่งนี้ (ภายใต้ linux):
$ VBoxManage internalcommands createrawvmdk -filename physical.vmdk -rawdisk /dev/sda
คุณต้องอยู่ในdiskกลุ่มเพื่อให้มันทำงานได้ จากนั้นเพิ่ม vmdk นี้ไปยังเครื่องเสมือนเป็นฮาร์ดไดรฟ์รองจากนั้นใช้ Live Linux ISO ddในพาร์ติชัน
แก้ไขบูตเซกเตอร์ของพาร์ติชัน NTFS
นี่คือส่วนที่แฮ็ก
เราเกือบจะพร้อม แต่ Windows XP 0x1Cจะไม่บูตเพราะเราต้องกำหนดจำนวนของภาคซ่อนของระบบแฟ้มที่ชดเชย นี่เป็นจำนวนเซ็กเตอร์ก่อนพาร์ติชัน NTFS เราสามารถรับหมายเลขนี้จากfdisk -ulคำสั่ง startเขตของรัฐที่ส่งออกภาคพาร์ทิชันที่กำหนดเริ่มต้นที่ที่เป็นพื้นจำนวนของภาคก่อนที่พาร์ทิชัน เพื่อให้ได้ตัวเลขจากนั้นแปลงเป็นเลขฐานสิบหกโดยใช้ gcalctool เป็นต้น
เปิดพาร์ติชันด้วยhexeditเช่นนี้:
# hexedit /dev/sda4
จากนั้นเขียนจำนวนของภาคที่ซ่อนอยู่ตามลำดับของ endian เพียงเล็กน้อยที่1Cออฟเซ็ต วิธี endiean น้อย: จะเป็น0xABCDEFGH GH EF CD ABหากเลขฐานสิบหกสั้นกว่า 8 หลักให้นำหน้าด้วยเลขศูนย์
เมื่อเสร็จแล้วให้บันทึกและออก (Ctrl + X)
การตั้งค่าด้วง
คุณต้องบอก GRUB ให้บูตพาร์ติชันนั้นโดยตรงเพื่อให้ GRUB เพิ่มรายการเมนูต่อไปนี้:
title Microsoft Windows XP Professional
root (hd0,3)
savedefault
makeactive
chainloader +1
จะ(hdX, Y)ระบุพาร์ติชั่นที่ไหน X คือ 0 สำหรับฮาร์ดดิสเริ่มต้น, 1 สำหรับ/dev/sda, 2 /dev/sdbเป็นต้นเป็นต้น Y คือหมายเลขพาร์ติชัน 0 สำหรับ/dev/sda1, 1 สำหรับ/dev/sda2, เป็นต้น
สิ่งนี้ควรคล้ายกับ GRUB2 เช่นกัน แต่ใช้ไวยากรณ์ที่แตกต่างกันเล็กน้อยสำหรับรายการเมนู
สัมผัสสุดท้าย
พาร์ติชัน NTFS ใหม่พร้อมที่จะบู๊ตแล้ว แต่คุณยังต้องแฮ็คเพื่อเข้าถึงเดสก์ท็อป Windows XP ระบบอื่นอาจต้องการแฮ็คที่แตกต่างกัน ก่อนอื่น boot.ini ต้องได้รับการแก้ไข
[boot loader]
timeout=1
default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
ตั้งหมายเลข parition ตาม ฉันติดตั้งไว้ใน / dev / sda4 ดังนั้นหมายเลขพาร์ติชันควรเป็น 3
คุณอาจต้องแก้ไขรายการ MountedDevices ในรีจิสทรีหาก Windows ค้างไว้ก่อนหน้าจอการเข้าสู่ระบบ
สตรีที่คุณสามารถดูได้จาก<path to windows>/system32/config/system chntpwนี่อาจเป็นปัญหาหากอักษรระบุไดรฟ์ระบบของคุณไม่ใช่ C. เนื่องจากchntpwความสามารถในการเขียนรีจิสทรีของมี จำกัด มากคุณต้องใช้ทางเลือกและใช้ hexeditor เช่น ghex2 เพื่อแก้ไข คุณต้องค้นหา\DosDevices\C:และแทนที่ C ด้วยอักษรชื่อไดรฟ์อื่นFในกรณีของฉัน
หลังจากนี้คุณควรจะสามารถเข้าถึงเดสก์ท็อปได้ตอนนี้คุณต้องตามล่าหาไดรเวอร์ทั้งหมด แต่มันไม่ได้อยู่ในขอบเขตของบทช่วยสอนนี้
แหล่งที่มา
การย้าย Windows XP ไปยังพาร์ติชันอื่น
เมานต์ VDI ภายใต้ linux