Mengapa Windows 7 BCD yang dikloning berisi data yang tidak lengkap (dan, karenanya, mencegah booting)?

9

Saya mengalami kemalangan untuk perlu mengkloning kotak Windows XP / 7 dual-boot untuk mengganti hard drive dengan yang lebih kecil. Saya mengalami kesulitan besar untuk mem-boot dan ingin memahami apa yang terjadi dan jika saya bisa melakukan sesuatu yang lebih baik.

Latar Belakang: mesin ini memiliki drive 750Gb dengan 3 partisi di atasnya:

  • Windows XP
  • Windows 7
  • Data

Instalasi asli dilakukan sedemikian rupa sehingga tidak ada partisi pemulihan Windows 7 yang terpisah. Saya harap fakta ini agak menyederhanakan banyak hal.

Saya menggantinya dengan drive 80Gb. Partisi telah menyusut dari dalam Windows 7 sehingga mereka masuk ke disk yang lebih kecil.

Saya menggunakan GParted(dari PartedMagicLinux LiveCD) untuk menyalin partisi. Saya menandai partisi Windows XP sebagai partisi aktif (sama seperti pada disk asli).

Saya tidak dapat menggunakan CloneZillaatau melakukan salinan seluruh disk karena transisi dari disk yang lebih besar ke yang lebih kecil.

Setelah menyalin partisi, saya menyalin boot loader secara manual (berhati-hatilah agar tidak menyalin tabel partisi):

$ dd if=/dev/sda of=/dev/sdb bs=446 count=1

Saya menghapus disk asli, mengatur yang baru sehingga secara fisik terhubung sama seperti aslinya (IDE saluran 1 master) dan mencoba boot. Ini berhasil menyajikan menu boot tetapi gagal saat memilih opsi (ada dua: satu untuk XP dan satu untuk Win7).

Saya melakukan sedikit riset yang membuat saya menyadari bahwa data konfigurasi boot Windows 7 tidak berisi semua yang seharusnya. Saya membandingkan output BCD dari disk asli dan baru dan mencatat bahwa entri perangkat pada yang terakhir adalah unknown. Jadi saya mengubahnya secara manual agar sesuai dengan aslinya - seperti ini:

$ bcdedit /set {ntldr} device partition=C:
$ bcdedit /set {default} device partition=D:
$ bcdedit /set {default} osdevice partition=D:

dan reboot. Kali ini saya bisa mem-boot XP dan Win7. Saya perlu melakukan lebih banyak pengujian karena tampaknya ada perbedaan lain antara dua BCD, tetapi membuat perubahan di atas setidaknya memungkinkan booting terjadi.

Jadi pertanyaan saya adalah menanyakan mengapa BCD pada partisi yang dikloning akan tampak berbeda dari aslinya, dan cukup untuk mencegah booting?

Dan tindak lanjutnya adalah bertanya apakah saya harus melakukan ini dengan cara lain?

starfry
sumber

Jawaban:

13

Setelah mengkloning partisi yang berisi sistem operasi Windows, perlu untuk memperbaiki data konfigurasi boot jika partisi yang dikloning tidak berada pada posisi yang persis sama pada disk yang dikloning seperti pada yang asli.

Mekanisme boot Windows, sejak Windows Vista, menyimpan konfigurasinya sebagai "Boot Configuration Data" (BCD) dan ini mengacu pada partisi, bukan oleh nomor partisi tetapi oleh tanda tangan disk dan offset sektor. Tanda tangan disk adalah nilai 32-bit yang tertanam dalam Master Boot Record. Menyalin 446 byte pertama dari sektor 0 akan menyalin tanda tangan disk.

Jika kegiatan kloning menghasilkan partisi disk yang dikloning memiliki alamat sektor awal yang berbeda maka yang asli (sangat mungkin kecuali klon seluruh disk digunakan) maka klon kemungkinan besar akan gagal untuk boot sampai solusi ini diterapkan.

Pada dasarnya, offset sektor perlu diperbarui dan, untuk ini, Anda harus menggunakan konsol pemulihan (ini tersedia pada DVD instalasi Windows 7). Pastikan hanya drive yang dikloning yang terpasang dan boot dari DVD instalasi Windows 7. Di layar pertama buat pilihan bahasa dan tekan "selanjutnya". Pada layar berikutnya (di mana "instal sekarang" ditampilkan) tekan SHIFT + F10 untuk mendapatkan prompt perintah.

Pertama, konfirmasikan huruf pengandar yang ada di tempat dan partisi yang terkait:

diskpart
list volume
exit

Juga, jika perlu, konfirmasi ulang partisi aktif:

diskpart
select disk 0
select part 1
detail part
select part 2
detail part
... and so-on
exit

Pada sistem BIOS, BCD disimpan dalam file di X:\Boot\BCDmana Xhuruf drive dari partisi aktif (untuk UEFI itu ada di Partisi Sistem EFI). Biasanya tersembunyi, bisa dilihat dengan

dir /AH X:\Boot

Itu bisa dicadangkan seperti ini:

bcdedit /export X:\path\to\bcd\backup

dan dipulihkan

bcdedit /import X:\path\to\bcd\backup

Jika disk memiliki beberapa sistem operasi, mungkin ada beberapa BCD. BCD aktif adalah yang ada di dalam \Boot\BCDpada partisi yang ditandai sebagai aktif - partisi aktif . Untuk daftar isinya (dalam urutan kata kerja meningkat :)

bcdedit
bcdedit /enum
bcdedit /enum ALL
bcdedit /enum ALL /v

Untuk memperbaiki BCD aktif, buat huruf drive untuk partisi yang benar dan lakukan:

bcdedit /set {default} osdevice partition=X:
bcdedit /set {default} device partition=X:
bcdedit /set {bootmgr} device partition=X:
bcdedit /set {memdiag} device partition=X:
bcdedit /set {ntldr} device partition=X:

atau, untuk memperbaiki BCD lain (pada "X: \ boot \ bcd" dalam contoh ini):

bcdedit /store X:\boot\bcd /set {default} osdevice partition=X:
bcdedit /store X:\boot\bcd /set {default} device partition=X:
bcdedit /store X:\boot\bcd /set {bootmgr} device partition=X:
bcdedit /store X:\boot\bcd /set {memdiag} device partition=X:
bcdedit /store X:\boot\bcd /set {ntldr} device partition=X:

Sebagai contoh, sistem saya yang memiliki XP dan 7 dan mereka menunjukkan XP sedang C:dan 7 sedang D:dan partisi aktif C:. maka BCD aktif akan berada di c:\boot\BCD. Boot manager akan ditemukan di C:\bootmgrdan diagnostik memori akan di C:\boot\memtest.exe, Perintah yang diperlukan adalah:

bcdedit /set {ntldr} device partition=C:
bcdedit /set {memdiag} device partition=C:
bcdedit /set {bootmgr} device partition=C:
bcdedit /set {default} device partition=D:
bcdedit /set {default} osdevice partition=D:

Dengan perubahan itu, me-reboot komputer (Menekan Alt-F4 akan mencapai ini) dan menghapus DVD memungkinkan sistem untuk boot berhasil.

Bacaan lebih lanjut:

(klon seluruh disk seharusnya tidak mengalami masalah ini karena tata letak partisi pada salinan harus persis sama dengan aslinya)

starfry
sumber
Catatan yang bcdbootmenyediakan cara yang lebih mudah untuk membuat ulang entri boot, tapi saya tidak yakin itu akan cocok dalam skenario dual-boot XP / W7.
Harry Johnston
Saya suka jawaban Anda, tetapi bisakah Anda membersihkannya sedikit? Saya pikir ada banyak informasi asing (seperti contoh perintah, ketika Anda memiliki perintah yang sebenarnya setelah itu, dll).
Bigbio2002
Saya senang Anda menyukai anser tetapi saya tidak berpikir ada banyak info asing di sana. Saya punya penjelasan umum ditambah satu contoh nyata di akhir yang benar-benar menunjukkan bagaimana menentukan partisi untuk setiap entri yang perlu diubah. Saya membutuhkan semua pengetahuan di atas untuk memperbaiki sistem kloning saya dan, jadi, menyajikannya sebagai jawaban sepenuhnya untuk memberikan sebanyak mungkin informasi kepada orang lain.
Starfry
8

Menurut dokumentasi tidak resmi tentang internal BCD ini , partisi di toko BCD sebenarnya diidentifikasi oleh tanda tangan disk dan offset partisi. Anda menyalin tanda tangan disk (MBR byte 440-443), tetapi kemungkinan besar mengubah offset partisi ketika meletakkan partisi pada disk yang lebih kecil, karena itu BOOTMGR tidak lagi dapat menemukan partisi ini.

Sergey Vlasov
sumber
Itu menarik dan tentu saja menjelaskan mengapa itu tidak berhasil - offset partisi pasti akan berbeda. Kenapa-oh-mengapa ini tidak didokumentasikan secara formal adalah dugaan siapa pun! Apakah ada cara yang diterima (resmi atau tidak resmi) untuk "memperbaiki" ini pada disk yang dikloning?
Starfry
Saya kira cara resmi adalah "boot dari disk perbaikan sistem yang disiapkan sebelumnya (atau media instalasi nyata, jika Anda memilikinya dan bukan media pemulihan DOEM) dan jalankan Startup Repair ; jika itu gagal, instal ulang OS ”. Tidak yakin apakah Perbaikan Startup juga akan memulihkan XP dalam kasus Anda.
Sergey Vlasov
@ starfry Ada banyak editor BCD di luar sana, termasuk baris perintah bawaan ( bcdedit). Saya menyukai Editor Visual BCD sendiri. Jika Anda bisa masuk ke lingkungan Windows, Visual BCD membuatnya cukup mudah untuk mengatur perangkat boot. Anda dapat melakukan hal yang sama dari DVD boot dengan membuka command prompt (saya pikir itu F11 atau sesuatu) dan menggunakannya di bcdeditsana. Saya akan merekomendasikan terhadap Perbaikan Sistem jika Anda merasa memperbaikinya secara manual, karena saya telah Perbaikan Sistem menghapus lingkungan pemulihan on-disk sebelumnya.
Bob
Terima kasih sergey dan @bob. Saya menerima jawaban ini karena itu mendorong saya untuk sepenuhnya memahami apa yang sedang terjadi. Saya telah mendokumentasikan apa yang sekarang saya ketahui dalam jawaban terpisah.
Starfry
maafkan ketidaktahuan saya, tetapi jika @ starfry adalah byte untuk menyalin byte lebih dari sda (bukan sda1 partisi), tetapi sda seluruh drive, lalu mengapa offset partisi akan berbeda?
barlop