Страница 1 из 1

Восстановление загрузчика Grub2

Добавлено: 06 сен 2022, 21:59
ДонВенчензо
Хочу представить небольшой скриптик, задача которого восстанавливать загрузчик Grub2.
Восстановление загрузчика выполняется по инструкции с wiki (http://wiki.rosalab.ru/ru/index.php/%D0 ... 0%B0_Grub2).
Запуск скрипта надо производить из под рута в live режиме.

Краткое описание, что делает скрипт:
1) Предоставляет пользователю информацию о подключенных носителях информации
2) Просит ввести корневой раздел
2022-09-06_10-54_2.png
3) Проверяет есть ли этот раздел среди подключенных разделов, не является ли он swap разделом, EFI разделом (одним словом защита от случайных нажатий ). Если указанный раздел не подходит, то предоставляет возможность повторного ввода раздела.
4) Потом перед началом восстановления проверяете всели ввели правильно и жмете Y для восстановления. Или можете прекратить работу программы.
2022-09-06_10-55.png
Скрипт не проверялся на машинах с uefi, по причине отсутствия оной.

Во вложенном архиве имеется .desktop файл. По желанию его можно использовать, чтобы запускать скрипт из меню.(необходимо учитывать, что в .desktop файле путь до скрипта /usr/bin/. Если у вас путь будет другой, то надо править).
Лично я использую на своем BariumOS. Добавил скрипт модулем и он запускается как из меню, так и из терминала как обычная программа linux.
Во втором архиве готовый для установки rpm пакет.

Теперь приложение доступно на https://abf.io
Ссылка на репозиторий для подключения http://abf-downloads.rosalinux.ru/venia ... in/release

Восстановление загрузчика Grub2

Добавлено: 31 окт 2022, 21:42
ДонВенчензо
сделал маленькую правочку для систем с btrfs. Перезалил архив с скриптом.

Восстановление загрузчика Grub2

Добавлено: 31 окт 2022, 23:20
va9(2)
А зачем такие большие отступы?
2022-11-01_1.png
Я бы еще табы на пробелы заменил. Это можно сделать командой expand -t 4 in-file >out-file.

Восстановление загрузчика Grub2

Добавлено: 01 ноя 2022, 13:06
ДонВенчензо
va9(2) писал(а): 31 окт 2022, 23:20 А зачем такие большие отступы?
Видимо потому, что я не особый спец в этом и нужного внимания этому не удилил :unknown:

Восстановление загрузчика Grub2

Добавлено: 11 ноя 2022, 22:06
ДонВенчензо
1) Скрипт теперь работает с разными именами файлов устройств.(/dev/sda1, /dev/vdb1, /dev/hdb1 и т.д.). Это позволяет скрипту работать, к примеру, а виртуальных машинах.
2) В архив добавлена иконка для ярлыка
3) Добавил rpm пакет с приложением. По идее rpm дожен работать не зависимо от платформы

Восстановление загрузчика Grub2

Добавлено: 12 ноя 2022, 20:09
va9(2)
ДонВенчензо писал(а): 01 ноя 2022, 13:06
va9(2) писал(а): 31 окт 2022, 23:20 А зачем такие большие отступы?
Видимо потому, что я не особый спец в этом и нужного внимания этому не удилил :unknown:
Уменьшил отступы, но работоспособность скрипта не проверял. В контейнере побоялся, а в виртуалку сегодня не хочется лезть. Теоретически ничего не должно было сломаться.
grub2recovery.zip
(4.36 КБ) 315 скачиваний

Этот код трижды повторяется:

Код: Выделить всё

cat << EOF > /chroot/tmp/chroot.sh
#!/bin/bash
echo -e "\e[1;92m==================Вход в /chroot==================\e[0m"
sleep .1
echo "Монтиррование всех записей из /chroot/etc/fstab "
mount -a
sleep .1
echo "Установка grub2 на /dev/$sdx"
grub2-install /dev/$sdx
sleep .1
echo "Обновление grub2"
update-grub2
sleep .1
echo -e "\e[1;91m==================Выход из /chroot==================\e[0m"
exit
EOF
        chmod 550 /chroot/tmp/chroot.sh

Код: Выделить всё

FILE=/chroot
if [ -d "$FILE" ]; then #Проверяем существует ли каталог /chroot
    echo "Каталог $FILE уже существует. Создание не требуется."
else
    echo "Создан каталог $FILE"
    mkdir /chroot
fi
Если его обернуть в функции и разместить в самом начале, то скрипт станет короче на ~60 строк.

Тут похоже ошибка:
2022-11-12_1.png
Переменная grub2recovery нигде не используется, а FILE в том месте еще не существует. Еще, break используется только в цикле, а условие в нем не находится, поэтому скрипт в этом месте будет падать если ошибку исправить.

Я бы это условие переписал так:

Код: Выделить всё

if [ ! -e "/tmp/grub2recovery/" ]; then # Если /tmp/grub2recovery/ не существует - создать.
    mkdir /tmp/grub2recovery/
fi
А лучше от него вообще избавиться и смонтировать раздел в /mnt.

Восстановление загрузчика Grub2

Добавлено: 13 ноя 2022, 22:12
ДонВенчензо
Спасибо за проделанную работу :good: . Внес правки. Единственное пока все же оставил папку /tmp/grub2recovery/. На процесс это не влияет, система не захламляется, т.к. /tmp сам очистится при перезагрузке. В /mnt вроде монтировать логично, но пользуясь Барием я заметил, что в нем /mnt уже используется и не хочется использовать его, потому как нет понимания что может произойти. Для безопасности теперь монтирую btrfs "только для чтения"

Восстановление загрузчика Grub2

Добавлено: 15 ноя 2022, 19:38
darkthief13
Спасибо тебе добрый человек! С этим grub2 в Росе сплошные слезы! )

Восстановление загрузчика Grub2

Добавлено: 15 ноя 2022, 20:37
ДонВенчензо
darkthief13 писал(а): 15 ноя 2022, 19:38 С этим grub2 в Росе сплошные слезы! )
Если с дравами nvidia не баловаться, то все с ним нормально :)

Восстановление загрузчика Grub2

Добавлено: 15 ноя 2022, 21:18
darkthief13
Балуюсь с образами Acronis TI - настраиваю эталонный образ, сохраняю и разношу по машинам.Парк машин разный ).
Еще ни разу загрузчик сам не поднялся ни на одной машине без мата и танцев с бубном...

А UEFI - вообще беда (((, а если с Windows вместе - это слезы...
На Debian и Ubuntu такого не было. Толком и не понял в чем причина (особо и не разбирался).

Восстановление загрузчика Grub2

Добавлено: 16 дек 2022, 13:51
darkthief13
После последнего обновления grub2, исчезла проблема его не работы после разворачивания системы из настроенного образа на другое железо и другой жёсткий диск.

Восстановление загрузчика Grub2

Добавлено: 23 дек 2023, 10:57
Mad AlexX
Помимо линукса Rosa Fresh 12 на моём ноутбуке также установлена Windows 10, а т.к. она лицензионная, то периодически скачивает обновления и после некоторых крупных обновлений пропадает возможность загрузиться в линуксе. Вот и сейчас прилетело такое обновление, которое оставило возможность загрузки только Windows. Поэтому для всех, кто столкнулся с подобной ситуацией (и для себя в будущем тоже) небольшая инструкция, как можно вернуть возможность двойной загрузки.
Сразу скажу, что выполнение много раз рекомендованного на этом форуме update-grub2 никак не изменило ситуацию. Под спойлером приложил снимок с результатами работы update-grub2. Хотя обе операционки он и нашёл, но почему-то возможности выбирать ОС не появилась.
update-grub2__parted-l.png

Следующие рекомендации применимы для дисков с таблице разделов GPT. Узнать какая таблица: MBR или GPT можно выполнив команду sudo parted -l. В моём случае вывод этой утилиты такой:

Код: Выделить всё

Модель: ATA ST500LM000-SSHD- (scsi)
Диск /dev/sda: 500GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: gpt
Флаги диска: 

Номер  Начало  Конец  Размер  Файловая система  Имя                           Флаги
 1     1049kB  106MB  105MB   fat32             EFI System Partition          загрузочный, esp
 2     106MB   123MB  16,8MB                    Microsoft reserved partition  msftres
 3     123MB   134GB  134GB   ntfs              Basic data partition          msftdata
 4     134GB   134GB  545MB   ntfs                                            скрытый, diag
 5     134GB   139GB  4295MB  linux-swap(v1)                                  подкачка
 6     139GB   217GB  78,6GB  ext4
 7     217GB   226GB  8590MB  fat32             fat32a                        msftdata
 8     226GB   269GB  42,9GB  ext4              lindata
 9     357GB   500GB  143GB   ntfs              windata                       msftdata
Обратить внимание нужно на строчку: Таблица разделов: gpt. Если таблица разделов - gpt, можно загружаться с LiveUSB, а после загрузки возможность выбора ОС у меня появилась после следующих команду (даже без выполнения update-grub2) :

Код: Выделить всё

# mkdir /mnt/sda
# mount -t auto /dev/sda6 /mnt/sda/
# mount -t auto /dev/sda1 /mnt/sda/boot/efi/
# grub2-install --boot-directory=/mnt/sda/boot --bootloader-id=Rosa --target=x86_64-efi --efi-directory=/mnt/sda/boot/efi
, где sda1 - раздел EFI, sda6 - раздел с ОС Linux. Вполне возможно, что нет необходимости монтировать раздел с корнем, но проверю это, когда в следующий раз Windows обновится с затиранием двойной загрузки. А пока починилось и так, может ещё кому-то пригодится.

Восстановление загрузчика Grub2

Добавлено: 23 дек 2023, 20:24
ДонВенчензо
Этой инструкцией пользовались?
http://wiki.rosalab.ru/ru/index.php/%D0 ... 0%B0_Grub2

Восстановление grub2 надо выполнять из live

Восстановление загрузчика Grub2

Добавлено: 24 дек 2023, 03:17
Mad AlexX
ДонВенчензо писал(а): 23 дек 2023, 20:24 Этой инструкцией пользовались?
http://wiki.rosalab.ru/ru/index.php/%D0 ... 0%B0_Grub2

Восстановление grub2 надо выполнять из live
Нет, пользовался другой инструкцией, сейчас уже и не найду какой. Помню только, что там вместо grub2-install было написано grub-install.

А в первый раз восстановление через update-grub2, может потому и не пошло, что начал загружаться с установочной флешки, но увидев возможности загрузить установленную ОС решил проверить работоспособность установленной ранее операционки.

Восстановление загрузчика Grub2

Добавлено: 24 дек 2023, 14:31
turik02
grub-install
и
grub-update
это для ubuntu!
Для ROSA будет update-grub2 и правильно всё таки восстанавливать загрузившись в Live, а в неустановленную систему.

Re: Восстановление загрузчика Grub2

Добавлено: 15 апр 2025, 23:37
PastorDi
Новый адрес статьи на wiki: https://wiki.rosa.ru/index.php/Восстано ... чика_Grub2