- GRUB се често поквари након промена партиција, инсталација других система или ажурирања, али се скоро увек може поправити.
- Сама GRUB конзола вам омогућава да пронађете /boot/grub, ручно учитате кернел и покренете систем без ослањања на LiveCD.
- Када се систем покрене, неопходно је поново инсталирати и ажурирати GRUB из Линукса како би се спречило понављање квара.
- У озбиљнијим случајевима, методе које користе LiveUSB, chroot и алате попут Boot-Repair-а нуде дубљу поправку.
Ако сте икада укључили рачунар и уместо логотипа оперативног система, дочекали сте црни екран и поруку попут „грешка: не постоји такав уређај“ или „груб спасавање “, тачно знате колико је то паничан осећај. Одједном, чини се као да сте изгубили цео систем, да ћете морати да га форматирате и да су ваши подаци у опасности... али стварност је да се, у већини случајева, то може поправити без прибегавања тако драстичним мерама.
Добра вест је да, иако делује као озбиљан проблем, поправка GRUB-а без LiveCD-а је сасвим могућа коришћењем саме GRUB конзоле, под условом да оштећење диска није катастрофално. Уз мало стрпљења, неколико добро откуцаних команди и разумевање шта се дешава иза кулиса, можете поново покренути свој Linux систем, поново инсталирати менаџер покретања и припремити га за будућа поновна покретања.

Пре него што почнемо да куцамо као луди, важно је да разумемо улогу коју GRUB игра у покретању рачунара. GRUB 2 је менаџер покретања који користи већина модерних GNU/Linux дистрибуција: обично је инсталиран у MBR-у или на врху партиције и одговоран је за приказивање менија са доступним оперативним системима и учитавање Linux језгра са одговарајућим параметрима.
Овај менаџер покретања система ослања се на датотеке које се обично налазе у директоријуму /boot/grub ваше инсталације: модули, конфигурационе датотеке, слике језгра, initrd итд. Ако овај директоријум постане недоступан, буде премештен, оштећен или промени диск, а GRUB то не примети, почећете да видите грешке попут „нема таквог уређаја“, „непознати фајл систем“ или страшни grub rescue> промпт.
Типични узроци кварова менаџера су прилично добро познати: инсталирање Windows-а након Linux- а и преписивање MBR-а , петљање са партицијама (промена величине, премештање, брисање, креирање нових) помоћу алата попут GParted-а или сличних, или чак ажурирање језгра или система које, из неког разлога, оставља недоследне референце у GRUB конфигурацији.
Поред свега овога, неки корисници више воле да инсталирају /boot на посебној партицији , што је уобичајена пракса у напредним конфигурацијама или окружењима где остатак диска треба да буде шифрован. У тим случајевима, свака промена на тој партицији или њеном броју диска може онемогућити GRUB да пронађе сопствене модуле и конфигурацију.
Врсте грешака GRUB-а и режими конзоле
Када GRUB откаже, обично не нестаје само: обично вас оставља у некој врсти конзоле или менија за спасавање који можете користити за ручно покретање система. Понашање се мало разликује у зависности од озбиљности проблема и верзије GRUB-а коју сте инсталирали.
У многим дистрибуцијама видећете да систем покушава да учита GRUB и на крају се руши. упит са текстом grub rescue>Овај режим је прилично ограничен, али вам омогућава покретање неких кључних команди као што су ls, set o insmod, довољно да се пронађе исправна партиција и присилно учита Линук модул.
У другим случајевима, видећете нормалан GRUB мени (листу оперативних система), али покушај покретања ће бити неуспешан или ће мени изгледати оштећено. Одатле можете притиснути тастер „c“ да бисте ушли у пуну GRUB командну линију, која је много моћнија од режима спасавања, са ширим спектром доступних команди.
У старијим инсталацијама, неки системи и даље користе GRUB Legacy (не GRUB 2), као што су одређене верзије CentOS 5/6 или друге старије дистрибуције. У тим случајевима, синтакса команде се мало мења, али општа идеја је иста: лоцирајте директоријум /boot, реците GRUB-у где се налази његов коренски директоријум и ручно учитајте језгро и initrd.
Како поправити GRUB без LiveCD-а користећи режим спасавања
Када рачунар не може да пронађе исправно конфигурисан менаџер за покретање, прилично је уобичајено видети поруку попут „Грешка: нема таквог уређаја“ након чега следи „grub rescue>“ . То значи да је GRUB успео да се покрене, али не зна где се налазе његове конфигурационе датотеке или модули који су му потребни.
У овом сценарију, имате мини интерпретер команди који вам омогућава да откријете партиције, лоцирате /boot/grub и ручно учитате језгро . Процес може звучати дугачко, али је прилично систематичан.
Наведите доступне дискове и партиције
Први корак је да сазнате које дискове и партиције GRUB види на вашем рачунару. Да бисте то урадили, у командној линији grub rescue> откуцајте:
ls
Команда ће приказати нешто слично (хд0) (хд0,1) (хд0,2) (хд0,3) (хд1) (хд1,1) (хд1,2). Свака hdX представља другачији чврсти диск: hd0 би био први физички диск, hd1 другии тако даље. Варијанте са зарезом, као што су (hd0,1), означавају нумерисане партиције тог диска.
У зависности од вашег рачунара, можете видети један диск као што је (hd0) са две или три партиције, или неколико дискова: (hd0,1) (hd1,1) (hd1,5) (hd2,1) (hd3,1) . У сваком случају, циљ је сада једноставан: отворите сваку партицију док не пронађете ону која садржи директоријум /boot/grub.
Пронађите партицију користећи /boot/grub
Да бисмо прегледали садржај партиције, поново користимо ls али додавањем имена партиције и завршне косе црте. На пример: прегледати садржај То ће вам помоћи да утврдите да ли је то прави.
ls (hd0,1)/
Ако та партиција има фајл систем који GRUB препознаје, приказаће се листа директоријума: видећете имена као што су bin, итд., home, boot, root , итд. У том случају, та партиција може бити ваша root (/) или посебна партиција од /boot, у зависности од структуре коју сте имали када сте инсталирали систем. Ако листа показује фајл систем који GRUB препознаје , на правом сте путу.
Ако, приликом покретања претходне команде, видите директоријум под називом boot , можете дубље заронити и проверити да ли садржи фолдер grub:
ls (hd0,1)/boot/grub
Када пронађете листу датотека која укључује модуле попут linux.mod или друге типичне GRUB датотеке, пронашли сте партицију коју тражите . Ако се ништа не појави или добијете грешку, наставите да покушавате са другим партицијама: ls (hd0,2)/ , ls (hd1,1)/ , итд., док не пронађете праву.
Реците GRUB-у где се налазе ваше датотеке.
Када се идентификује исправна партиција, GRUB-у треба рећи где се налазе њени модули и конфигурација . Претпоставимо да смо открили да је /boot укључен (hd0,1). Следећи корак је подешавање префикса:
set prefix=(hd0,1)/boot/grub
Са овом инструкцијом, системски менаџер ће знати да се његове помоћне датотеке налазе у тој путањи. Такође му треба рећи коју коренску партицију да користи за проналажење језгра и остатка системских података:
set root=(hd0,1)
Важно је правилно написати пар. (диск, партиција) и увек користите косу црту на крају / када наводимо садржај са lsТакође имајте на уму да је распоред тастатуре GRUB конзоле обично амерички, тако да се заграде и косе црте можда не подударају са оним што видите одштампано на њима. Добра пракса је да се уверите постави префикс исправно пре него што покушате да учитате модуле.
Учитајте GRUB модуле и Линуксов кернел
Када је префикс конфигурисан, следећи корак је присилно учитавање GRUB Linux модула . У многим водичима ћете видети нешто попут:
insmod (hd0,1)/boot/grub/linux.mod
У многим модерним системима, одговарајући модул може бити нормалан.мод или друге, али идеја је иста: ако нисте сигурни у тачна имена, користите команду ls (hd0,1)/boot/grub Да бисте навели датотеке, изаберите одговарајући модул на основу ваше GRUB верзије. Функција insmod Ово подразумева учитавање неопходног модула за наставак процеса покретања. Имајте на уму да инсмод То је инструкција која заправо укључује модул у програм за учитавање.
Даље ћете морати учитајте слику Линуксовог језгра што указује на његову путању унутар система датотека. Пример покретања: linux /boot/vmlinuz-4.13.3-generic root=/dev/sda1
Тачно име језгра ће се разликовати на вашем рачунару (можда је vmlinuz-2.6.32-23-generic, вмлинуз-6.1.0-10-амд64 или било која друга верзија). Можете поново користити, ls /boot Да бисте видели које слике имате доступне и изабрали најновију. Важно је да не заборавите параметар. root=/dev/sdXn са исправном коренском партицијом.
Да бисте избегли забуну око еквиваленције између GRUB и Linux конвенција именовања, имајте на уму да hd0 одговара /dev/sda, hd1 одговара /dev/sdb, hd2 одговара /dev/sdc и тако даље. Формат броја партиције се такође мења: (hd0,1) постаје /dev/sda1, (hd1,2) постаје /dev/sdb2, итд.
У неким случајевима, након учитавања слике језгра, препоручљиво је учитати и initrd слику (почетни RAM диск) ако ваша дистрибуција то захтева. Типична команда би била:
initrd /initrd.img
Као и код језгра, можете проверити које су initrd датотеке доступне помоћу ls / o ls /boot и користите тастер таб да бисте аутоматски довршили имена и избегли правописне грешке.
Покрените систем и поново инсталирајте GRUB из Линукса
Са учитаним кернелом и било којим initrd-ом, само треба да кажете GRUB-у да започне процес покретања система . Да бисте то урадили, једноставно откуцајте:
Покретање: boot
Ако све буде у реду, језгро ће преузети контролу, оперативни систем ће се покренути као и обично и моћи ћете да се пријавите на свој Linux систем. У овом тренутку сте успели да спасете ситуацију без потребе за LiveCD-ом, али још увек постоји један важан корак: поновна инсталација GRUB-а како бисте спречили да поново поквари систем при следећем поновном покретању.
Када уђете у систем, отворите терминал са привилегијама суперкорисника (root или sudo) и покрените: grub-install /dev/sdX
где је /dev/sdX диск (не партиција) на коју желите да поставите менаџер покретања, на пример /dev/sda или /dev/sdb ако сте на другом диску. Запамтите да овде не треба да наводите број партиције: команда уписује менаџер покретања у MBR или област за покретање целог диска.
У многим дистрибуцијама заснованим на Debian-у или Ubuntu-у, такође се препоручује да се поново генерише GRUB конфигурациона датотека како би се осигурало да исправно детектује све инсталиране системе. То можете учинити помоћу:
Трцати: update-grub o update-grub2
А ако желите да ажурирате и почетну слику за покретање, ажурирајте initramfs са:
Команда: update-initramfs -u
У другим случајевима, проблем са GRUB-ом није толико радикалан и видите мени за покретање , али неки системи се не покрећу, појављује се грешка при одабиру одређене ставке или једноставно сумњате да је мени погрешно конфигурисан.
У тим случајевима, када видите GRUB мени када укључите рачунар, можете притиснути стрелице (горе или доле) да бисте зауставили аутоматско одбројавање покретања, а затим притиснути тастер c да бисте приступили целој командној линији.
Са те напредне конзоле, Команде су у основи исте него у режиму спасавања, али ћете имати више алата за преглед система. На пример, можете користити ls да наведете дискове и партиције, set да бисте видели и изменили променљиве окружења GRUB, insmod да учитате додатне модуле или чак команде као што су cat да чита садржај текстуалних датотека.
Пратећи исту шему, прво ћете утврдити које дискове и партиције имате са:
ls
и видећете излаз типа (hd0) (hd0,msdos1) (hd0,msdos5) или (hd0,1) (hd1,1) (hd1,5) (hd2,1) , у зависности од тога да ли је ваша табела партиција MBR (msdos) или GPT, и броја дискова присутних у рачунару.
Затим ћете проверити сваку партицију помоћу команди као што су:
ls (hd0,msdos1)/
док не пронађете boot директоријум и унутар њега grub фолдер . Када га идентификујете, поновићете поступак подешавања префикса и root-а са:
set prefix=(hd0,msdos1)/boot/grub
set root=(hd0,msdos1)
Одатле ћете тражити доступна језгра тако што ћете навести садржај /boot:
/листа за покретање: ls /boot
и изабраћете један од њих за учитавање:
linux /boot/vmlinuz-6.1.0-10-amd64 root=/dev/sda1
Прилагођавање верзије језгра и коренске партиције вашем специфичном случају. Запамтите мапирања дискова: hd0 → /dev/sda, hd1 → /dev/sdb, hd2 → /dev/sdc , итд. Можете користити тастер TAB за аутоматско довршавање путања и имена датотека.
На крају, учитаћете initrd ако је потребно и извршити команду брод Да бисте покренули систем. Након пријаве, поступак који треба извршити је исти као у претходном сценарију: Поново инсталирајте GRUB на диск и ажурирајте његову конфигурацију коришћење grub-install /dev/sda y update-grub.
Поправка GRUB-а на системима са GRUB Legacy верзијом
Иако је већина дистрибуција данас усвојила GRUB 2, и даље можете пронаћи старије машине или одређене системе који користе GRUB Legacy . Интерфејс је у овим случајевима мало другачији, али основни концепт остаје исти: можете користити интерактивну љуску покретачког програма (bootloader shell) да бисте поново покренули систем.
Приликом покретања, овај класични GRUB обично дозвољава приступите вашој командној линији притиском на одређени тастер (често тастер c или кључ e (за уређивање уноса). Када се нађете на промпту, имате команде као што су find који су посебно корисни.
На пример, ако желите да пронађете директоријум /boot који садржи слике језгра и initrd-ове, можете користити:
пронађи команду: find /boot/grub/stage1 или сличну руту
У зависности од тога да ли /boot је посебна партиција или је унутар корена, путања ће бити /boot или једноставно / са другим подфасциклама. Када пронађете исправну партицију, GRUB Legacy обично приказује нешто попут (хд0,0) или други пар дискова/партиција који можете поново користити.
Затим, мораћете да дефинишете GRUB root помоћу команде попут ове:
Пример корена: root (hd0,0)
и реците му где се налазе језгро и initrd. Поново, обично не морате да куцате пуна имена датотека, јер се тастер TAB аутоматски довршава и помаже вам да избегнете грешке у куцању у дугим путањама.
За још прецизније подешавање, можете користити команду cat да прочита GRUB конфигурациону датотеку (на пример, /boot/grub/menu.lstи проверити који је уређај монтиран на коренском директоријуму, који параметри језгра се прослеђују итд. То је веома практичан начин да се Копирајте исту конфигурацију коју је систем користио када је исправно радио..
Коначно, када имате линије корен, језгро e инитрд За листе, једноставно покрените команду boot да покренете систем. Када уђете унутра, последњи корак ће бити поновна инсталација GRUB-а из самог Линукса помоћу grub-install на одговарајућем диску, осигуравајући да не морате понављати ручни поступак приликом наредних поновних покретања.
Друге уобичајене методе (коришћење LiveCD-а, chroot-а и Boot-Repair-а)
До сада смо видели како да решимо ситуацију користећи само GRUB конзолу , без прибегавања било каквим спољним средствима. Међутим, вреди знати и класичне методе са LiveCD/LiveUSB и графичким алатима, јер је у неким случајевима штета толико велика да је покретање са система за покретање једина опција.
Техника која се често користи у дистрибуцијама заснованим на Debian-у и Ubuntu-у је покретање система са LiveCD-а или LiveUSB- а (на пример, Ubuntu, Linux Mint, Debian Live image, итд.), монтирање root партиције оштећеног система, такође монтирање /boot ако је у питању посебна партиција, а затим chroot на тај фајл систем да би се поново инсталирао GRUB као да радимо из саме инсталације.
Процес, уопштено говорећи, састоји се од идентификације партиција са fdisk -l, одредите шта је корен (на пример, / дев / сда2) и која је партиција за покретање система ако постоји (на пример, / дев / сда7Затим се састављају са:
Монтирање преграда (нпр.):sudo mount /dev/sda2 /mntsudo mount /dev/sda7 /mnt/boot (ако имате посебну датотеку /boot)
и повезивање монтирања /dev, /dev/pts, /proc и /sys се врши унутар /mnt:
Повезивање носача: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
Одавде можете приступити инсталираном систему користећи:
Пријавите се са: sudo chroot /mnt
А изнутра можете покренути grub-install показујући на диск:
Инсталација из chroot-а: grub-install --boot-directory=/boot/ --recheck /dev/sda
да бисте поново учитали менаџер покретања у MBR или еквивалентну област, а затим:
Генеришите конфигурацију: grub-mkconfig -o /boot/grub/grub.cfg
да регенерише конфигурациону датотеку. Након изласка из chroot-а са exit и поново покрените рачунар (sudo reboot), нормално GRUB мени се поново појављује нормално..
Још једна веома погодна опција за кориснике који више воле да избегавају терминал је алатка Boot-Repair , која се може инсталирати у живом Ubuntu окружењу и нуди графички интерфејс способан да детектује инсталације оперативног система и скоро аутоматски поправи GRUB . Једноставно покрените алатку, изаберите „препоручену поправку“ и пустите је да анализира и препише покретачки програм.
Иако су ова решења заснована на LiveCD-овима или екстерним услужним програмима веома практична, предност савладавања техника које смо видели на почетку је у томе што не зависите од USB диска или диска при руци . Можете се снаћи са самом GRUB конзолом у многим ситуацијама, посебно када је проблем „само“ у томе што је менаџер покретања изгубио исправну референцу на партицију на којој се налази /boot.
Уз све речено, јасно је да покварен GRUB не значи нужно и изгубљен систем : имате алате у самом покретачу система, у командној линији и у Live окружењу да бисте пронашли исправну партицију, ручно учитали кернел, покренули ваш GNU/Linux и поново инсталирали покретачки менаџер како би поново радио као нов.