Üzerinde Windows bulunan önyüklenebilir bir NTFS bölümünü farklı bir blok ofsetine taşıdığımda, yeniden önyüklenebilir hale getirmek için ne güncellenmesi gerekiyor?
Arka plan: Gerekli eylemleri gerçekleştiren bir program yazmayı planlıyorum , bu yüzden bir Windows DVD'sinden önyükleme yaparak Microsoft'un araçlarını nasıl kullanacağım konusunda rehber aramıyorum. Bunun yerine, Windows sistemini daha büyük bir sabit diske taşımak istediğinde ortalama bir PC kullanıcısı için daha kolay bir çözüm yazabilmek için bunları kendim nasıl değiştirmem gerekiyor.
Özellikle, burada denedim:
Biri üzerinde Windows ile NTFS bölümü olan birkaç bölümlü bir disk var ve disk bölüm düzeni (en fazla 4 bölüm) için düz eski MBR blok 0 kullanır.
Şimdi yeni, daha büyük bir diski biçimlendiriyorum ve bölümlere ayırıyorum. Orada NTFS bölümüne yer açıyorum ve eski diskin NTFS Windows bölümünden içeriği kopyalıyorum. Ve bölümü "aktif" hale getiriyorum.
Ancak, bu diskten önyükleme yapmaya çalıştığımda, hemen bir "okuma hatası" iletisi alıyorum ve önyükleme duruyor, tam metin:
A disk read error occurred
Press Ctrl+Alt+Del to restart
Her iki diskin de blok 0'da aynı önyükleme sektörü koduna sahip olduğunu doğruladım.
Bana öyle geliyor ki başka bir şeyin güncellenmesi gerekebilir. Bir yerde güncellemem gereken mutlak bir blok referansı olduğunu tahmin ediyorum, muhtemelen bir sonraki seviye yükleyiciye veya NT çekirdeğine işaret ediyor.
Güncelleme: Bulduğum bu ben bilmek istiyorum derinliği içine oldukça gidiş makaleye. Ancak, boot.ini değiştirmek için diyor, ama burada böyle şeyler değişmiş gibi görünüyor Windows 7 yüklü: Boot.ini yok ama GUID ile Sistem Birim Bilgileri adlı bir klasör ve benim sorunum ile ilgili sesler diğer veriler . Kazmaya devam edecek ...
Güncelleme 2: Starman'ın korkunç ama çok bilgilendirici web sitesi sayesinde ilk adımı anlayabildim: NTFS önyükleme sektörünün "gizli" sektörler için bir alanı var. Bu alan, önyükleme sektörünün sektör numarasını içermelidir. Bu, "okuma hatası" mesajını çözer. Ancak şimdi, bunun yerine "BOOTMGR eksik" hatası alıyorum. Bir blok numarasının ayarlanması gereken başka bir yer var gibi görünüyor, ancak bu konuda kod listesinde bir şey bulamıyorum.
Bu "BOOTMGR eksik" sorununu çözmek için Windows araçlarını öneren birçok yardım sitesi buluyorum, ancak hiçbiri perde arkasında neler olduğunu bilmiyor gibi görünüyor. Küçük bir sorun olduğunda Windows'u yeniden yüklemeyi önermek gibi. En azından, bu düzeltmelerin işe yaradığı görülüyor, çoğunlukla Bcdedit ve Bootrec araçlarını içeriyor. Şimdi, taşınan bir bölümle ilgili olarak, özellikle ikincisinin ne yaptığını kim bilebilir?
Güncelleştirme 3: Çok sayıda deneme yanılma girişiminden sonra, çözümün genellikle \ Windows \ System32 \ config içinde bulunan BCD-Template kayıt defteri dosyasında bulunduğuna inanıyorum . Bunu "bcdboot" komutunu kullanarak güncellersem, Windows ondan başlar. Şimdi bu kayıt defteri yukarıdaki soru ile ilgili hangi bilgileri içerdiğini anlamaya ortasındayım. Bu kayıt defterinin içeriğine işaret eden tüm öğeler kabul edilir.
Güncelleme 4: BCD-Template dosyası yeniden yazılırken ve öncekinden farklı ikili içeriğe sahipken, içindeki değerlerin değişmediği ortaya çıkıyor. Bu yüzden bcdboot.exe'nin yazdığı başka bir şey olmalı. Daha önce bölümün ilk 32 önyükleme bloğunu değiştirip değiştirmediğini zaten kontrol etmiştim, ancak değişmeden kalıyorlar. Parititon haritası da değişmiyor. Peki bcdboot BCD kayıt defteri dışında değiştirir? Bunu nasıl izleyebileceğime dair ipuçları var mı? Bana bir programın hangi dosyalara yazdığını gösteren düşük düzey araçlar var mı?
Güncelleme 5: Yanıt şu şekilde görünüyor: c: \ Boot \ BCD de değiştirildi ve bu önyükleme yöneticisinin işlemi için anahtar dosya gibi görünüyor. Bunu daha sonra araştıracağım ...
Güncelleştirme 6: Windows 7'yi yüklediğimde başlangıçta iki bölüm oluşturduğum önemli bir ayrıntı gibi görünüyor: Bir önyükleme bölümü gibi görünen 204800 sektörden oluşan küçük bir bölüm, ardından Windows sistemini içeren gerçek, büyük, bölüm ( C sürücüsü :). Bu yüklemeyi yeni, daha büyük bir diske aktarmaya çalıştığımda, aynı iki bölümü yeni sürücüde sağlam tuttum, ancak farklı bir ofsetle sonuçlandılar. Bu tek başına "BOOTMGR eksik" mesajına yol açtı. O zamandan beri, yalnızca Windows bölümü, üzerinde bcdboot.exe kullandım eklendio bölümdeki \ Boot \ BCD dosyası. Bu dosya (ve klasör) başlangıçta yalnızca daha küçük bölümde mevcuttu. Bu nedenle, bu sorun benim durumumda başka bir bölüme (işletim sistemini içeren bölüme) atıfta bulunan bir bölüm (önyükleme askısı) olarak daha karmaşık olabilir, oysa diğer insanlar her ikisini de içeren bir bölümle ve belki de çözümle uğraşmak zorunda kalabilirler. daha basit.
Güncelleştirme 7: Bir ayrıntı daha bulundu: \ Boot \ BCD dosyası MBR'nin seri numarasını kaydeder. Bu sayı eşleşmezse sistem önyükleme yapmaz. Sonra orada saklı mutlak bir blok referans olup olmadığını test edeceğim.
\BCD\Boot
ve normalde bunu ile düzenlersiniz bcdedit.exe
, değil bcdboot
. Ve evet, önyükleme için ayrı bölüm (yalnızca tam disk şifreleme özelliğini kullandığınızda gereklidir, çünkü şifre çözme kodunun ana pencere bölümünün dışında saklanması gerekir), varsa önyükleme işlemini kontrol eder.