- GRUB genellikle bölüm değişiklikleri, diğer sistemlerin kurulumu veya güncellemelerden sonra bozulur, ancak neredeyse her zaman kurtarılabilir.
- GRUB konsolu, /boot/grub dizinini bulmanıza, çekirdeği manuel olarak yüklemenize ve LiveCD'ye ihtiyaç duymadan önyükleme yapmanıza olanak tanır.
- Sistem başlatıldıktan sonra, hatanın tekrar oluşmasını önlemek için GRUB'u Linux'tan yeniden yüklemek ve güncellemek şarttır.
- Daha ciddi durumlarda, LiveUSB, chroot ve Boot-Repair gibi araçlar kullanan yöntemler daha kapsamlı bir onarım sunar.

Bilgisayarınızı açtığınızda işletim sisteminizin logosu yerine siyah bir ekran ve "hata: böyle bir aygıt yok" veya "grub kurtarma " gibi bir mesajla karşılaştıysanız, bunun ne kadar panik verici bir durum olduğunu çok iyi bilirsiniz. Birdenbire tüm sisteminizi kaybettiğinizi, format atmanız gerektiğini ve verilerinizin risk altında olduğunu düşünürsünüz... ancak gerçek şu ki, çoğu durumda bu kadar sert önlemlere başvurmadan sorun çözülebilir.
İyi haber şu ki, ciddi bir sorun gibi görünse de, disk hasarı felaket boyutunda değilse, GRUB konsolunu kullanarak LiveCD olmadan GRUB'u onarmak tamamen mümkün . Biraz sabır, birkaç doğru yazılmış komut ve arka planda neler olup bittiğini anlama ile Linux sisteminizi yeniden başlatabilir, önyükleme yöneticisini yeniden yükleyebilir ve gelecekteki yeniden başlatmalar için hazır hale getirebilirsiniz.

Hızlıca yazmaya başlamadan önce, GRUB'un bilgisayarınızın önyüklenmesinde oynadığı rolü anlamak önemlidir . GRUB 2, çoğu modern GNU/Linux dağıtımı tarafından kullanılan önyükleme yöneticisidir: genellikle MBR'ye veya bölümün en üstüne kurulur ve mevcut işletim sistemlerini içeren menüyü görüntülemekten ve Linux çekirdeğini uygun parametreleriyle yüklemekten sorumludur.
Bu önyükleme yöneticisi, genellikle kurulumunuzun /boot/grub dizininde bulunan dosyalara dayanır : modüller, yapılandırma dosyaları, çekirdek görüntüleri, initrd vb. Bu dizin erişilemez hale gelirse, taşınırsa, bozulursa veya GRUB'un fark etmeden disk değiştirirse, "böyle bir aygıt yok", "bilinmeyen dosya sistemi" veya korkulan grub rescue> komut istemi gibi hatalar görmeye başlarsınız.
Sistem yöneticisinin bozulmasının tipik nedenleri oldukça iyi bilinmektedir: Linux'tan sonra Windows kurmak ve MBR'yi üzerine yazmak , GParted veya benzeri araçlarla bölümlerle oynamak (boyutlandırma, taşıma, silme, yeni bölümler oluşturma) veya bir nedenle GRUB yapılandırmasında tutarsız referanslar bırakan bir çekirdek veya sistem güncellemesi .
Tüm bunların yanı sıra, bazı kullanıcılar /boot'u ayrı bir bölüme kurmayı tercih eder ; bu, gelişmiş yapılandırmalarda veya diskin geri kalanının şifreleneceği ortamlarda yaygın bir uygulamadır. Bu durumlarda, bu bölüme veya disk numarasına yapılacak herhangi bir değişiklik, GRUB'un kendi modüllerini ve yapılandırmasını bulamamasına neden olabilir.
GRUB Hata Türleri ve Konsol Modları
GRUB başarısız olduğunda, genellikle kendiliğinden ortadan kaybolmaz: genellikle sistemi manuel olarak başlatmak için kullanabileceğiniz bir tür konsol veya kurtarma menüsü bırakır . Davranış, sorunun ciddiyetine ve yüklü GRUB sürümüne bağlı olarak biraz değişir.
Birçok dağıtımda sistemin GRUB'u yüklemeye çalıştığını ve bunun sonucunda çöktüğünü göreceksiniz. grub rescue> metniyle bir komut istemiBu mod oldukça sınırlı olsa da, aşağıdaki gibi bazı temel komutları çalıştırmanıza olanak tanır: ls, set o insmodBu, doğru bölümü bulmak ve Linux modülünün yüklenmesini zorlamak için yeterlidir.
Diğer durumlarda, normal GRUB menüsünü (işletim sistemleri listesi) görürsünüz , ancak önyükleme girişimi başarısız olur veya menü bozuk görünür. Buradan, çok daha güçlü ve daha geniş bir komut yelpazesine sahip olan tam GRUB komut satırına girmek için 'c' tuşuna basabilirsiniz.
Daha eski kurulumlarda, CentOS 5/6'nın belirli sürümleri veya diğer eski dağıtımlar gibi bazı sistemler hala GRUB Legacy'yi (GRUB 2 değil) kullanmaktadır. Bu durumlarda, komut sözdizimi biraz değişir, ancak genel fikir aynıdır: /boot dizinini bulun, GRUB'a kök dizininin nerede olduğunu söyleyin ve çekirdeği ve initrd'yi manuel olarak yükleyin.
Kurtarma modu kullanarak LiveCD olmadan GRUB'u nasıl onarabilirsiniz?
Bilgisayar doğru şekilde yapılandırılmış önyükleme yöneticisini bulamadığında, genellikle "Hata: böyle bir aygıt yok" mesajı ve ardından "grub rescue>" ifadesi görülür . Bu, GRUB'un çalıştırıldığını ancak yapılandırma dosyalarının veya ihtiyaç duyduğu modüllerin nerede bulunduğunu bilmediği anlamına gelir.
Bu senaryoda, bölümleri keşfetmenize, /boot/grub'u bulmanıza ve çekirdeği manuel olarak yüklemenize olanak tanıyan mini bir komut yorumlayıcınız var . İşlem uzun gibi görünebilir, ancak oldukça sistematiktir.
Kullanılabilir diskleri ve bölümleri listeleyin.
İlk adım, GRUB'un makinenizde hangi diskleri ve bölümleri gördüğünü bulmaktır. Bunu yapmak için, grub rescue> komut isteminde şunu yazın:
ls
Bu komut aşağıdakine benzer bir çıktı verecektir. (hd0) (hd0,1) (hd0,2) (hd0,3) (hd1) (hd1,1) (hd1,2). her hdX Farklı bir sabit sürücüyü temsil eder: hd0 ilk fiziksel disk, hd1 ise ikinci disk olacaktır.ve benzeri. Virgül içeren varyantlar, örneğin (hd0,1), o diskin numaralandırılmış bölümlerini gösterir.
Bilgisayarınıza bağlı olarak, iki veya üç bölüme sahip (hd0) gibi tek bir disk veya (hd0,1) (hd1,1) (hd1,5) (hd2,1) (hd3,1) gibi birden fazla disk görebilirsiniz. Her durumda, amaç basittir: /boot/grub dizinini içeren bölümü bulana kadar her bölümü açın.
/boot/grub komutunu kullanarak bölümü bulun.
Bir bölümün içeriğini incelemek için yine aynı yöntemi kullanıyoruz. ls Ancak bölüm adını ve sonuna bir eğik çizgi ekleyerek. Örneğin: içeriği inceleyin Doğru olan olup olmadığını belirlemenize yardımcı olacaktır.
ls (hd0,1)/
Eğer o bölüm GRUB'un tanıdığı bir dosya sistemine sahipse, bir dizin listesi gösterecektir: bin, home, boot, root gibi isimler göreceksiniz . Bu durumda, bu bölüm, sistemi kurarken sahip olduğunuz yapıya bağlı olarak, kök dizininiz (/) veya /boot'tan ayrı bir bölüm olabilir. Liste, GRUB'un tanıdığı bir dosya sistemini gösteriyorsa , doğru yoldasınız demektir.
Önceki komutu çalıştırdığınızda "boot" adlı bir dizin görürseniz , daha derine inip grub klasörünün olup olmadığını kontrol edebilirsiniz:
ls (hd0,1)/boot/grub
Linux.mod gibi modülleri veya diğer tipik GRUB dosyalarını içeren bir dosya listesi bulduğunuzda , aradığınız bölümü bulmuşsunuz demektir . Hiçbir şey görünmezse veya bir hata alırsanız, doğru olanı bulana kadar diğer bölümleri denemeye devam edin: ls (hd0,2)/ , ls (hd1,1)/ , vb.
GRUB'a dosyalarınızın nerede bulunduğunu bildirin.
Doğru bölüm belirlendikten sonra, GRUB'a modüllerinin ve yapılandırmasının nerede bulunduğunun bildirilmesi gerekir . /boot'un (hd0,1) üzerinde olduğunu keşfettiğimizi varsayalım. Sonraki adım, öneki ayarlamaktır:
set prefix=(hd0,1)/boot/grub
Bu talimatla, sistem yöneticisi destek dosyalarının bu yolda bulunduğunu bilecektir. Ayrıca, çekirdeği ve sistem verilerinin geri kalanını bulmak için hangi kök bölümünü kullanacağını da belirtmemiz gerekiyor:
set root=(hd0,1)
Çifti doğru yazmak önemlidir. (disk, bölüm) ve her zaman sondaki eğik çizgiyi kullanın. / içerik listelediğimizde lsAyrıca GRUB konsolunun klavye düzeninin genellikle Amerikan olduğunu ve bu nedenle parantez ve eğik çizgi tuşlarının üzerlerinde yazılı olanlarla eşleşmeyebileceğini unutmayın. İyi bir uygulama, doğru düzeni kontrol etmektir. öneki ayarla Modülleri yüklemeye çalışmadan önce doğru şekilde ayarlayın.
GRUB modüllerini ve Linux çekirdeğini yükleyin.
Önek yapılandırıldıktan sonraki adım, GRUB Linux modülünün yüklenmesini zorlamaktır. Birçok kılavuzda şuna benzer bir şey göreceksiniz:
insmod (hd0,1)/boot/grub/linux.mod
Birçok modern sistemde, uygun modül şu olabilir: normal.mod veya başkaları, ancak fikir aynı: tam isimlerden emin değilseniz, komutu kullanın. ls (hd0,1)/boot/grub Dosyaları listelemek için, GRUB sürümünüze göre uygun modülü seçin. İşlevi şudur: insmod Bu, önyükleme işlemine devam etmek için gerekli modülün yüklenmesini içerir. Lütfen şunu dikkate alın: insmod Modülü yükleyiciye entegre eden talimat budur.
Sonra yapmanız gerekecek Linux çekirdek görüntüsünü yükle Dosya sistemi içindeki yolunu belirtir. Örnek başlangıç: linux /boot/vmlinuz-4.13.3-generic root=/dev/sda1
Çekirdeğin tam adı makinenize göre değişebilir (örneğin, farklı bir isim olabilir). vmlinuz-2.6.32-23-generic, vmlinuz-6.1.0-10-amd64 (veya başka herhangi bir sürüm). Tekrar kullanabilirsiniz, ls /boot Hangi görsellerin mevcut olduğunu görmek ve en güncel olanı seçmek için. Önemli olan parametreyi unutmamak. kök=/dev/sdXn Doğru kök bölümleme ile.
GRUB ve Linux adlandırma kuralları arasındaki eşdeğerlikle ilgili karışıklığı önlemek için, hd0'ın /dev/sda'ya, hd1'in /dev/sdb'ye, hd2'nin /dev/sdc'ye ve benzer şekilde diğerlerine karşılık geldiğini unutmayın . Bölüm numarası biçimi de değişir: (hd0,1) /dev/sda1 olur, (hd1,2) /dev/sdb2 olur, vb.
Bazı durumlarda, çekirdek imajını yükledikten sonra, dağıtımınız gerektiriyorsa initrd imajını (başlangıç RAM diski) yüklemek tavsiye edilir. Tipik komut şu şekildedir:
initrd /initrd.img
Çekirdekte olduğu gibi, hangi initrd dosyalarının mevcut olduğunu şu şekilde kontrol edebilirsiniz: ls / o ls /boot ve kullan Tab tuşu İsimleri otomatik tamamlama ve yazım hatalarını önleme amacıyla.
Sistemi başlatın ve GRUB'u Linux'tan yeniden yükleyin.
Çekirdek ve varsa initrd yüklendikten sonra, GRUB'a önyükleme işlemini başlatmasını söylemeniz yeterlidir . Bunu yapmak için şu komutu yazmanız yeterlidir:
Başlatmak: boot
Her şey yolunda giderse, çekirdek kontrolü ele alacak, işletim sistemi normal şekilde önyüklenecek ve Linux sisteminize giriş yapabileceksiniz. Bu noktada, LiveCD'ye ihtiyaç duymadan durumu kurtarmış olacaksınız, ancak hala önemli bir adım var: bir sonraki yeniden başlatmada tekrar bozulmasını önlemek için GRUB'u yeniden yüklemek.
Sisteme girdikten sonra, süper kullanıcı ayrıcalıklarına sahip bir terminal açın (root veya benzeri bir kullanıcı kullanarak). sudo) ve çalıştırın: grub-install /dev/sdX
Burada /dev/sdX, önyükleme yöneticisini yerleştirmek istediğiniz disktir (bölüm değil), örneğin /dev/sda veya farklı bir diskteyseniz /dev/sdb . Burada bölüm numarasını belirtmemeniz gerektiğini unutmayın: komut, önyükleme yöneticisini tüm diskin MBR'sine veya önyükleme alanına yazar.
Birçok Debian veya Ubuntu tabanlı dağıtımda, kurulu tüm sistemleri doğru şekilde algıladığından emin olmak için GRUB yapılandırma dosyasını yeniden oluşturmanız da şiddetle tavsiye edilir . Bunu şu komutla yapabilirsiniz:
Çalıştırmak: update-grub o update-grub2
Ayrıca, başlangıç önyükleme görüntüsünü de güncellemek istiyorsanız, initramfs'yi şu komutla güncelleyin:
Komut: update-initramfs -u
Diğer durumlarda, GRUB ile ilgili sorun o kadar ciddi değildir ve önyükleme menüsünü görürsünüz , ancak bazı sistemler önyükleme yapmaz, belirli bir seçeneği seçerken hata oluşur veya menünün yanlış yapılandırıldığından şüphelenirsiniz.
Bu durumlarda, bilgisayarı açtığınızda GRUB menüsünü görürseniz, otomatik önyükleme geri sayımını durdurmak için yön oklarını (yukarı veya aşağı) basabilir ve ardından tam komut satırına erişmek için c tuşuna basabilirsiniz.
O gelişmiş konsoldan, Komutlar temelde aynı. Kurtarma moduna göre daha kısıtlı imkanlara sahip olacaksınız, ancak sistemi incelemek için daha fazla aracınız olacak. Örneğin, şunları kullanabilirsiniz: ls Diskleri ve bölümleri listelemek için, set GRUB ortam değişkenlerini görüntülemek ve değiştirmek için, insmod ek modülleri veya hatta komutları yüklemek için cat Metin dosyalarının içeriğini okumak.
Aynı şemayı izleyerek, öncelikle hangi disklere ve bölümlere sahip olduğunuzu belirleyeceksiniz:
ls
Bilgisayarınızda bulunan disk sayısına ve bölümleme tablosunun MBR (msdos) veya GPT olmasına bağlı olarak , (hd0) (hd0,msdos1) (hd0,msdos5) veya (hd0,1) (hd1,1) (hd1,5) (hd2,1) türünde bir çıktı göreceksiniz .
Ardından her bir bölümü şu komutlarla kontrol edeceksiniz:
ls (hd0,msdos1)/
Önyükleme dizinini ve içindeki grub klasörünü bulana kadar bu işlemi tekrarlayın. Bulduktan sonra, öneki ve kök dizini şu komutla ayarlama işlemini tekrarlayın :
set prefix=(hd0,msdos1)/boot/grub
set root=(hd0,msdos1)
Oradan, /boot dizininin içeriğini listeleyerek kullanılabilir çekirdekleri arayabilirsiniz:
/önyükleme listesi: ls /boot
ve bunlardan birini seçerek yükleme işlemini gerçekleştireceksiniz:
linux /boot/vmlinuz-6.1.0-10-amd64 root=/dev/sda1
Çekirdek sürümünü ve kök bölümünü kendi durumunuza göre uyarlayın. Disk eşlemelerini unutmayın: hd0 → /dev/sda, hd1 → /dev/sdb, hd2 → /dev/sdc , vb. Yol ve dosya adlarını otomatik tamamlamak için TAB tuşunu kullanabilirsiniz.
Son olarak, gerekirse initrd'yi yükleyecek ve komutu çalıştıracaksınız. çizme Sistemi başlatmak için. Giriş yaptıktan sonra yapılacak işlem, önceki senaryodakiyle aynıdır: Diske GRUB'u yeniden yükleyin ve yapılandırmasını güncelleyin. kullanma grub-install /dev/sda y update-grub.
GRUB Legacy'nin kurulu olduğu sistemlerde GRUB'u onarmak
Günümüzde çoğu dağıtım GRUB 2'yi benimsemiş olsa da, GRUB Legacy kullanan daha eski makineler veya belirli sistemlere hala rastlayabilirsiniz . Bu durumlarda arayüz biraz farklıdır, ancak temel kavram aynı kalır: sistemi yeniden başlatmak için etkileşimli bir önyükleyici kabuğu kullanabilirsiniz.
Başlatıldığında, bu klasik GRUB genellikle şunlara izin verir: komut satırınıza erişin belirli bir tuşa basarak (genellikle tuş) c veya anahtar e (Girişleri düzenlemek için). Komut istemine ulaştığınızda, aşağıdaki gibi komutlar bulunur: find özellikle faydalı olanlar.
Örneğin, çekirdek imajlarını ve initrd dosyalarını içeren /boot dizinini bulmak istiyorsanız şunu kullanabilirsiniz:
find komutu: find /boot/grub/stage1 veya benzer bir rota
Duruma bağlı olarak /boot ayrı bir bölümdür. veya kök dizinin içindeyse, yol şu şekilde olacaktır: /boot ya da sadece / Diğer alt klasörlerle birlikte. Doğru bölümü bulduğunuzda, GRUB Legacy genellikle şöyle bir şey görüntüler: (hd0,0) veya yeniden kullanabileceğiniz başka bir disk/bölüm çifti.
Ardından, aşağıdaki gibi bir komut kullanarak GRUB kök dizinini tanımlamanız gerekecek :
Kök örneği: root (hd0,0)
ve çekirdeğin ve initrd'nin nerede bulunduğunu belirtin. Yine, genellikle tam dosya adlarını yazmanıza gerek yoktur, çünkü TAB tuşu otomatik tamamlama yapar ve uzun dosya yollarında yazım hatalarından kaçınmanıza yardımcı olur.
Daha da ince ayar yapmak için şu komutu kullanabilirsiniz. cat GRUB yapılandırma dosyasını okumak için (örneğin, /boot/grub/menu.lstve kök dizine hangi aygıtın bağlandığını, hangi çekirdek parametrelerinin iletildiğini vb. kontrol edin. Bu, oldukça pratik bir yöntemdir. Sistemin düzgün çalıştığı zamankiyle aynı yapılandırmayı kopyalayın..
Son olarak, çizgileriniz olduğunda kök, çekirdek e başlangıç Listeler için, komutu çalıştırmanız yeterlidir. boot Sistemi başlatmak için. İçeri girdikten sonra, son adım Linux içinden GRUB'u yeniden yüklemek olacaktır. grub-install İlgili diske kaydedilir, böylece sonraki yeniden başlatmalarda manuel işlemi tekrarlamanıza gerek kalmaz.
Diğer yaygın yöntemler (LiveCD, chroot ve Boot-Repair kullanarak)
Şimdiye kadar, herhangi bir harici yönteme başvurmadan, yalnızca GRUB konsolunu kullanarak durumu nasıl çözeceğimizi gördük . Bununla birlikte, bazı durumlarda hasar o kadar yaygın olabilir ki, önyüklenebilir bir sistemden önyükleme yapmak tek seçenek haline gelir; bu nedenle LiveCD/LiveUSB ve grafik araçlarıyla yapılan klasik yöntemleri de bilmekte fayda var.
Debian ve Ubuntu tabanlı dağıtımlarda yaygın olarak kullanılan bir teknik, bir LiveCD veya LiveUSB'den (örneğin, bir Ubuntu, Linux Mint, Debian Live imajı vb.) önyükleme yapmak, hasarlı sistemin kök bölümünü bağlamak, ayrı bir bölüm ise /boot'u da bağlamak ve ardından GRUB'u sanki kurulumun kendisinden çalışıyormuşuz gibi yeniden yüklemek için bu dosya sistemine chroot yapmaktır.
Genel olarak süreç, bölmelerin tanımlanmasından oluşur. fdisk -lKökün ne olduğunu belirleyin (örneğin, / Dev / sda2) ve varsa önyükleme bölümü hangisidir (örneğin, / Dev / sda7Daha sonra bunlar şu şekilde bir araya getirilir:
Bölümlerin bağlanması (ör.):sudo mount /dev/sda2 /mntsudo mount /dev/sda7 /mnt/boot (ayrı bir /boot dosyanız varsa)
ve /dev, /dev/pts, /proc ve /sys'nin bağlama işlemi /mnt içinde yapılır :
Bağlantı noktaları:sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
Buradan, kurulu sisteme şu komutları kullanarak erişebilirsiniz:
Giriş yap: sudo chroot /mnt
Ve içeriden, diske işaret ederek grub-install komutunu çalıştırabilirsiniz :
Chroot ortamından kurulum: grub-install --boot-directory=/boot/ --recheck /dev/sda
Önyükleme yöneticisini MBR'ye veya eşdeğer alana yeniden yüklemek için aşağıdaki adımları izleyin:
Yapılandırmayı oluşturun: grub-mkconfig -o /boot/grub/grub.cfg
Yapılandırma dosyasını yeniden oluşturmak için. Chroot'tan çıkıldığında exit ve bilgisayarı yeniden başlatın (sudo rebootnormalde GRUB menüsü normal şekilde yeniden görünür..
Terminal kullanmaktan kaçınmayı tercih eden kullanıcılar için bir diğer çok kullanışlı seçenek ise , canlı bir Ubuntu ortamına kurulabilen ve işletim sistemi kurulumlarını algılayıp GRUB'u neredeyse otomatik olarak onarabilen grafiksel bir arayüz sunan Boot-Repair aracıdır . Aracı çalıştırın, "önerilen onarım"ı seçin ve önyükleyiciyi analiz edip yeniden yazmasına izin verin.
Canlı CD'lere veya harici yardımcı programlara dayalı bu çözümler çok pratik olsa da, başlangıçta gördüğümüz tekniklerde ustalaşmanın avantajı, elinizde bir USB sürücü veya disk bulundurmanıza gerek kalmamasıdır . Özellikle sorun "sadece" önyükleme yöneticisinin /boot'un bulunduğu bölüme doğru referansı kaybetmesi olduğunda, birçok durumda GRUB konsolunun kendisiyle de işinizi halledebilirsiniz.
Tüm bunlara rağmen, bozuk bir GRUB'un mutlaka sistemin tamamen kullanılamaz hale geldiği anlamına gelmediği açık : Önyükleyici içinde, komut satırında ve Canlı ortamda doğru bölümü bulmak, çekirdeği manuel olarak yüklemek, GNU/Linux'unuzu başlatmak ve önyükleme yöneticisini yeniden yükleyerek yeni gibi çalışmasını sağlamak için araçlarınız var.