ฉันใช้เวลาทั้งหมดในการค้นคว้าเมื่อวานนี้และในที่สุดก็สามารถบูต 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