Apa yang perlu diperbarui saat memindahkan partisi Windows 7 (atau Vista) yang dapat di-boot?

9

Ketika saya memindahkan partisi NTFS yang dapat di-boot dengan Windows di atasnya ke blok offset yang berbeda, apa yang perlu diperbarui untuk membuatnya dapat di-boot kembali?

Latar Belakang: Saya berencana untuk menulis sebuah program yang melakukan tindakan yang diperlukan , itu sebabnya saya tidak mencari panduan cara menggunakan alat-alat Microsoft dengan mem-boot dari DVD Windows. Sebagai gantinya, saya perlu bagaimana memodifikasi hal-hal ini sendiri, sehingga saya dapat menulis solusi yang lebih mudah bagi pengguna PC rata-rata ketika dia ingin memindahkan sistem Windows-nya ke hard disk yang lebih besar.

Secara khusus, inilah yang saya coba:

Saya memiliki disk dengan beberapa partisi, salah satunya adalah partisi NTFS dengan Windows di atasnya, dan disk tersebut menggunakan MBR blok 0 tua sederhana untuk tata letak partisi (tidak lebih dari 4 partisi).

Sekarang saya memformat dan mempartisi disk baru yang lebih besar. Di sana saya membuat ruang untuk partisi NTFS dan menyalin konten dari partisi Windows NTFS ke disk lama. Dan saya membuat partisi "aktif".

Namun, ketika saya mencoba untuk boot dari disk ini, saya langsung mendapatkan pesan "read error" dan booting berhenti, teks yang tepat adalah:

  A disk read error occurred
  Press Ctrl+Alt+Del to restart

Saya memverifikasi bahwa kedua disk memiliki kode sektor boot yang sama di blok 0.

Menurut saya sesuatu yang lain mungkin perlu diperbarui. Saya kira di suatu tempat ada referensi blok absolut yang perlu saya perbarui, mungkin menunjuk ke loader level berikutnya atau ke kernel NT.

Pembaruan: Saya menemukan artikel ini cukup mendalam tentang apa yang ingin saya ketahui. Namun, ia mengatakan untuk memodifikasi boot.ini, tetapi saya telah menginstal Windows 7 di sini, di mana hal-hal seperti itu tampaknya telah berubah: Tidak ada boot.ini tetapi folder yang disebut Informasi Volume Sistem dengan GUID dan data lain di dalamnya yang terdengar terkait dengan masalah saya. . Akan terus menggali ...

Pembaruan 2: Berkat situs web yang tampak mengerikan tetapi sangat informatif oleh Starman , saya bisa mengetahui langkah pertama: Sektor boot NTFS memiliki bidang untuk sektor "tersembunyi". Bidang ini harus berisi nomor sektor dari sektor boot. Ini memecahkan pesan "read error". Namun sekarang, saya mendapatkan kesalahan "BOOTMGR yang hilang". Sepertinya ada tempat lain di mana nomor blok harus disesuaikan, tetapi saya tidak dapat menemukan apa pun dalam daftar kode tentang ini.

Saya memang menemukan banyak situs bantuan yang menyarankan alat Windows untuk memperbaiki masalah "BOOTMGR ini hilang", tetapi tampaknya tidak ada yang tahu apa yang terjadi di balik layar. Seperti menyarankan untuk menginstal ulang Windows ketika ada sedikit masalah dengannya. Setidaknya, perbaikan itu tampaknya berhasil, sebagian besar melibatkan alat Bcdedit dan Bootrec. Sekarang, siapa yang tahu apa yang mereka lakukan, terutama yang terakhir, sehubungan dengan partisi yang dipindahkan?

Pembaruan 3: Setelah banyak percobaan dan kesalahan, saya percaya sekarang bahwa solusinya terletak pada file registri BCD-Template , biasanya berada di dalam \ Windows \ System32 \ config. Jika saya mendapatkan ini diperbarui menggunakan perintah "bcdboot", Windows memulai dari itu. Saya sekarang sedang mencari tahu informasi apa yang terdapat dalam daftar ini yang relevan dengan pertanyaan di atas. Setiap petunjuk untuk isi dari registri ini dipersilakan.

Pembaruan 4: Ternyata sementara file BCD-Template ditulis ulang dan memiliki konten biner yang berbeda dari pendahulunya, nilai-nilai di dalamnya tidak berubah. Jadi pasti ada sesuatu yang ditulis oleh bcdboot.exe. Saya sebelumnya sudah memeriksa apakah itu mengubah 32 blok boot pertama partisi, tetapi tampaknya tidak berubah. Peta Parititon juga tidak berubah. Jadi, apa yang dimodifikasi bcdboot selain dari registri BCD? Adakah tips tentang bagaimana saya dapat melacaknya? Apakah ada alat tingkat rendah yang menunjukkan file apa yang ditulis oleh sebuah program?

Pembaruan 5: Jawabannya tampaknya adalah: c: \ Boot \ BCD juga berubah, dan itu tampaknya menjadi file kunci untuk proses boot manager. Saya akan selidiki ini nanti ...

Pembaruan 6: Tampaknya menjadi detail penting yang pada awalnya saya buat dua partisi ketika saya menginstal Windows 7: Partisi kecil 204800 sektor yang tampaknya menjadi partisi bootstrap, diikuti oleh partisi yang sebenarnya, besar, berisi sistem Windows ( drive C :). Ketika saya mencoba untuk mentransfer instalasi ini ke disk baru yang lebih besar, saya tetap menjaga dua partisi yang sama pada drive baru, meskipun mereka berakhir pada offset yang berbeda. Ini saja menyebabkan pesan "BOOTMGR hilang". Sejak itu, saya hanya menggunakan bcdboot.exe di partisi Windows, yang ditambahkanfile \ Boot \ BCD di partisi itu. File (dan folder) itu awalnya hanya ada di partisi yang lebih kecil. Oleh karena itu, masalah ini mungkin lebih rumit dalam kasus saya karena satu partisi (boot strapper) merujuk ke partisi lain (partisi yang berisi OS), sedangkan orang lain mungkin hanya harus berurusan dengan satu partisi yang berisi keduanya, dan mungkin ada solusinya. lebih sederhana.

Pembaruan 7: Ditemukan satu detail lagi: File \ Boot \ BCD merekam nomor seri MBR. Jika nomor itu tidak cocok, sistem tidak akan bisa boot. Selanjutnya saya akan menguji apakah ada juga referensi blok absolut yang tersimpan di sana.

SuperTempel
sumber
Hanya ingin tahu, apakah Anda memastikan partisi sistem yang tersembunyi dipindahkan dengan benar?
Kolum
Apa partisi tersembunyi yang Anda maksud? Saya baru saja menambahkan pembaruan # 6 yang berbicara tentang partisi boot tambahan, dan ya, saya juga memindahkannya. Ada juga area "tersembunyi" lain antara MBR dan awal partisi Windows, tetapi itu seharusnya tidak ada relevansinya - itu hanya gumpalan data (dalam kasus saya: partisi HFS + saat saya bergerak instalasi Boot Camp di sini). Satu-satunya hal yang harus terlibat adalah: Peta partisi (MBR plus GUID partisi partisi bertuliskan sesudahnya) dan dua melibatkan partisi Windows (booter kecil dan C: partisi). Saya memperbarui semua dengan benar, tentu saja. :)
SuperTempel
Tentunya hal-hal penting disimpan \BCD\Boot, dan Anda biasanya mengeditnya dengan bcdedit.exe, bukan bcdboot. Dan ya, partisi terpisah untuk boot-strapping (yang diperlukan hanya ketika Anda menggunakan fitur enkripsi disk penuh, karena kode dekripsi kemudian harus disimpan di luar partisi windows utama) mengontrol proses boot, jika ada.
Ben Voigt
@ Ben: ya, saya tahu tentang bcdedit - tapi saya tidak ingin mengedit apa pun, sejauh yang saya tahu karena saya tidak ingin mengubah opsi apa pun karena ada di tempat sebelum saya memindahkan partisi ke disk baru . Yang ingin saya perbarui adalah semua nomor blok tetap dan referensi ID disk, tanpa menggunakan executable Windows apa pun, jika memungkinkan.
SuperTempel
1
Bukan pertanyaan pemrograman. Ini adalah pengetahuan domain tentang bootloader Windows.
tidak ada yang

Jawaban:

1

Cara yang lebih mudah?

Masukkan disk instalasi Windows Vista atau Windows 7 di drive disk, dan kemudian mulai komputer.
Tekan tombol saat Anda diminta.
Pilih bahasa, waktu, mata uang, keyboard atau metode input, lalu klik Berikutnya.
Klik Perbaiki komputer Anda.
Klik sistem operasi yang ingin Anda perbaiki, dan kemudian klik Berikutnya.
Di kotak dialog Opsi Pemulihan Sistem, klik Prompt Perintah.
Ketik Bootrec.exe, lalu tekan ENTER.

Opsi
Bootrec.exe Alat Bootrec.exe mendukung opsi berikut. Gunakan opsi yang sesuai dengan situasi Anda.

Catatan Jika membangun kembali BCD tidak menyelesaikan masalah startup, Anda dapat mengekspor dan menghapus BCD, dan kemudian jalankan opsi ini lagi. Dengan melakukan ini, Anda memastikan bahwa BCD sepenuhnya dibangun kembali.

Untuk melakukan ini, ketik perintah berikut di prompt perintah RE Windows:
bcdedit / ekspor C: \ BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c: \ boot \ bcd bcd.old
bootrec / RebuildBcd

atau / FixMbr atau / FixBoot atau / ScanOs atau / RebuildBcd tergantung pada situasinya.

Lihat: Support.Microsoft.com untuk lebih jelasnya.

Essobi
sumber
1
Terima kasih telah berusaha membantu, tetapi apa yang Anda katakan adalah pengetahuan standar, seperti yang Anda tunjukkan. Saya secara khusus membutuhkan informasi "apa yang sedang terjadi" untuk mencapai ini dalam program tertulis saya sendiri, bukan dengan menggunakan perangkat lunak Microsoft, yang masih sulit ditangani oleh pengguna yang sepele. Saya ingin dapat memberikan solusi kepada pengguna Mac dengan instalasi Boot Camp, kalau-kalau ia perlu memindahkan ini ke disk lain. Dan sebagai efek samping dari itu, itu akan membantu pengguna Windows lainnya juga, karena tugasnya akan sama.
SuperTempel
Jika saya mencoba melakukan itu ... Saya akan disk sebelum dan sesudah dan melakukan perbandingan biner antara keduanya. Semoga berhasil.
Essobi
Aku di depanmu, lagi. Lihat, saya penulis iBored, jadi saya tahu bagaimana melakukan hal-hal seperti itu, dan percayalah, saya sudah mencoba. Format baru terlalu samar bagi saya, dan itulah mengapa saya menanyakan pertanyaan ini di sini.
SuperTempel