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

Ответить
ДонВенчензо
Сообщения: 270
Зарегистрирован: 18 янв 2020, 20:54
Operating system: ROSA Desktop Fresh R12 x86_64 plasma 5

Восстановление загрузчика 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
Вложения
script.zip
(4.42 КБ) 371 скачивание
grub2recovery-1-2-rosa2021.1.x86_64.rpm.zip
(5.72 КБ) 246 скачиваний
Последний раз редактировалось ДонВенчензо 12 мар 2024, 23:56, всего редактировалось 6 раз.

ДонВенчензо
Сообщения: 270
Зарегистрирован: 18 янв 2020, 20:54
Operating system: ROSA Desktop Fresh R12 x86_64 plasma 5

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

Сообщение ДонВенчензо » 31 окт 2022, 21:42

сделал маленькую правочку для систем с btrfs. Перезалил архив с скриптом.

va9(2)
Сообщения: 796
Зарегистрирован: 20 окт 2015, 08:06
Operating system: RF.KDE5.2021.1.x86_64

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

Сообщение va9(2) » 31 окт 2022, 23:20

А зачем такие большие отступы?
2022-11-01_1.png
Я бы еще табы на пробелы заменил. Это можно сделать командой expand -t 4 in-file >out-file.
$ - команда должна быть выполнена от имени непривилегированного пользователя,
# - команда должна быть выполнена от имени суперпользователя.

ДонВенчензо
Сообщения: 270
Зарегистрирован: 18 янв 2020, 20:54
Operating system: ROSA Desktop Fresh R12 x86_64 plasma 5

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

Сообщение ДонВенчензо » 01 ноя 2022, 13:06

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

ДонВенчензо
Сообщения: 270
Зарегистрирован: 18 янв 2020, 20:54
Operating system: ROSA Desktop Fresh R12 x86_64 plasma 5

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

Сообщение ДонВенчензо » 11 ноя 2022, 22:06

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

va9(2)
Сообщения: 796
Зарегистрирован: 20 окт 2015, 08:06
Operating system: RF.KDE5.2021.1.x86_64

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

Сообщение va9(2) » 12 ноя 2022, 20:09

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

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

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

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.
$ - команда должна быть выполнена от имени непривилегированного пользователя,
# - команда должна быть выполнена от имени суперпользователя.

ДонВенчензо
Сообщения: 270
Зарегистрирован: 18 янв 2020, 20:54
Operating system: ROSA Desktop Fresh R12 x86_64 plasma 5

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

Сообщение ДонВенчензо » 13 ноя 2022, 22:12

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

darkthief13
Сообщения: 32
Зарегистрирован: 07 окт 2022, 00:27
Operating system: RosaOS 12.2, Windows 10, Mint 20.3, Debian 11

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

Сообщение darkthief13 » 15 ноя 2022, 19:38

Спасибо тебе добрый человек! С этим grub2 в Росе сплошные слезы! )

ДонВенчензо
Сообщения: 270
Зарегистрирован: 18 янв 2020, 20:54
Operating system: ROSA Desktop Fresh R12 x86_64 plasma 5

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

Сообщение ДонВенчензо » 15 ноя 2022, 20:37

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

darkthief13
Сообщения: 32
Зарегистрирован: 07 окт 2022, 00:27
Operating system: RosaOS 12.2, Windows 10, Mint 20.3, Debian 11

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

Сообщение darkthief13 » 15 ноя 2022, 21:18

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

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

darkthief13
Сообщения: 32
Зарегистрирован: 07 окт 2022, 00:27
Operating system: RosaOS 12.2, Windows 10, Mint 20.3, Debian 11

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

Сообщение darkthief13 » 16 дек 2022, 13:51

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

Mad AlexX
Сообщения: 61
Зарегистрирован: 16 окт 2014, 14:49
Operating system: Rosa, OpenSuse

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

Сообщение Mad AlexX » 23 дек 2023, 10:57

Помимо линукса 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 обновится с затиранием двойной загрузки. А пока починилось и так, может ещё кому-то пригодится.

ДонВенчензо
Сообщения: 270
Зарегистрирован: 18 янв 2020, 20:54
Operating system: ROSA Desktop Fresh R12 x86_64 plasma 5

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

Сообщение ДонВенчензо » 23 дек 2023, 20:24

Этой инструкцией пользовались?
http://wiki.rosalab.ru/ru/index.php/%D0 ... 0%B0_Grub2

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

Mad AlexX
Сообщения: 61
Зарегистрирован: 16 окт 2014, 14:49
Operating system: Rosa, OpenSuse

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

Сообщение Mad AlexX » 24 дек 2023, 03:17

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

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

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

turik02
Сообщения: 255
Зарегистрирован: 01 июн 2022, 13:47
Operating system: ROSA FRESH GNOME 12.4 x86_64

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

Сообщение turik02 » 24 дек 2023, 14:31

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

Ответить

Вернуться в «Обсуждение ROSA Fresh R12 (платформа 2021.1)»