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.
\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.