Восстановление загрузки Grub2 + UEFI на томе BetterFS
версия для печати
ПреамбулаЕсть SSD с рабочим Linux Mint 19-че-то-там. Системный том размечен в BetterFS (btrfs). Конфиг Grub на нем же. До кучи, винт разбит в GPT и еще тут UEFI с какого-то бока, о сути которого я до сих пор не имею четкого представления. Поскольку меня конкретно заколебал Cinnamon да и весь Mint в целом, я захотел вернуться к KDE, на которой провел 5 лет до Минта. |
Обновление линухи для меня задача непростая и чтобы оставить себе пути отхода, я решил ставить KUbuntu на отдельный винт. Ну и я хочу, чтобы обе Линухи можно было загрузить.
Как все сломать?
Легко!
В процессе установки я неправильно понял, о чем меня спросил установщик про "Device for boot loader installation". Тут до сих пор какая-то хрень творится. Вроде бы речь про Grub2, но на форумах читал, что UEFI и сам способен осуществить загрузку ОС без посредников. Установщик же видит мой раздел с UEFI при этом не уточняет, о каком именно загрузчике он говорит. Выбрать девайс нужно обязательно, нет возможности пропустить эту настройку. Ну и я еще сам тупанул конечно. В результате я указал для загрузчика диск, где размещен Mint. Установка завершилась, загрузчик - Grub, в списке только новый KDE, Минта нет.. Мило.
Теперь к делу..
Тут пойдет речь о том, как вернуть к жизни потерянную загрузку Линухи через Grub2. Как организовать загрузку двух Линух на двух винтах с остальным блекджеком и шлюхами - это другая проблема.
Все что я находил, не работало. Одни решения не учитывали наличие UEFI, другие вообще предполагали, что у меня винт с разметкой времен MS-DOS, когда GPT в природе не было. И еще есть отдельный нюьанс с BetterFS.
Решение нашел тут. Эта статья на английском, к тому же с ошибками в командах. Перепишу по-своему.
Логинимся с LiveCD. У меня их уже две, по одной флешке с каждой линухой. Использовал ту, что с Mint, хотя тут разницы нет.
Все делаем в консоли под рутом, поэтому проще сразу выполнить sudo -s, чтобы в каждой команде не писать.
Выясняем, на каких томах EFI и отвалившаяся система.
$ fdisk -l ... Device Start End Sectors Size Type /dev/sda1 2048 1050623 1048576 512M EFI System /dev/sda2 1050624 205522943 204472320 97,5G Linux filesystem /dev/sda3 205522944 809502719 603979776 288G Linux filesystem /dev/sda4 809502720 877135871 67633152 32,3G Linux swap ...
В моем случае это [/dev/sda1] и [/dev/sda2] соответственно. Восстанавливать загрузчик буду в тот же винт - [/dev/sda].
По шагам:
- Смонтировать нужные тома в пространстве LiveCD.
- Переключиться в пространство потерянной системы через chroot и выполнить реанимацию загрузчика внутри нее.
- Все размонтировать.
Монтирование
$ mount -o subvol=@ /dev/dsa2 /mnt $ mount /dev/sda1 /mnt/boot/efi $ for i in dev dev/pts sys proc run; do mount --bind /$i /mnt/$i; done
В первой команде важно использование -o subvol=@. Так устроена BetterFS, по умолчанию корневая ФС размещается в покаталоге "@". Я пробовал монтировать том без этого параметра, потому вручную привязывать остальные точки в подкаталог "@" - реанимация не работала.
Точка монтирования во второй комадне тоже важна. Именно так grub сможет найти, куда скопировать нужные файлы для UEFI.
Прим:[/mnt] - это базовый каталог для монтирования носителей и по-хорошему окружение нужно бы собирать в его подкаталоге. Но поскольку мы тут только для одного фикса и сразу уйдем, глушим в себе тягу к порядку.
Ремонт
$ chroot /mnt $ grub-install /dev/sda $ update-grub $ exit
Все должно бы пройти без ошибок. Но тогда не было бы этой статьи. У меня эта волшебная команда, - grub-install - падала в разных ситуациях с разной руганью. Из найденных рецептов я пробовал разные параметры команды и всегда получал какую-то невнятную хрень. Вот один пример: "grub-install: error: cannot find a device for /boot/grub (is /dev mounted?)" Пользы от подобных сообщений никакой (классика Линухи, ответ всегда "где-то там"). Если даже сейчас будут какие-то ошибки, возможно как-то поможет grub-probe, но пока я не могу что-то конкретное привести в пример.
Прибираемся за собой
Я думаю, это необязательно, т.к. все монтирование было в LiveCD после перезагрузки ничего не останется. Но все же, вот команды:
$ umount /mnt/boot/efi $ for i in run proc sys dev/pts dev; do umount /mnt/$i; done $ sudo umount /mnt
Все. Перегружаемся, загрузка потерянной ОС должна работать.
P.S.
Я пробовал для реанимации использовать образ boot-repair, не прокатило из-за GPT. Может я чего не так понял или скачал, может сама софтина невнятные инструкции привела. Короче, мне не помогло. Не рассматривал вариант установки boot-repair в систему, только LiveCD, чтобы было как можно меньше влияния на сложившуюся ситуацию.
[1oo%, EoF]Понравилась статья? Расскажите о ней друзьям: