| Summary: | grub-btrfs + snapper система не грузится в подтом по умолчанию после snapper rollback | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Александр <sancheskas> | ||||
| Component: | grub | Assignee: | Egor Ignatov <egori> | ||||
| Status: | ASSIGNED --- | QA Contact: | qa-sisyphus | ||||
| Severity: | normal | ||||||
| Priority: | P5 | CC: | amakeenk, maksimenkovda, mcpain, nickel, placeholder, rider, sancheskas, srebrov | ||||
| Version: | unstable | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Linux | ||||||
| Attachments: |
|
||||||
|
Description
Александр
2025-11-17 14:43:14 MSK
По указанным шагам ошибка не воспроизвелась.
После установки пакета grub-btrfs нужно вызвать update-grub, чтобы добавить поддержку снимков в загрузчик. Убедитесь, что у Вас включен grub-btrfsd.service который отслеживает появление снимков и автоматически добавляет их.
В загруженном R/O снимке и не надо делать update-grub. Задача таких снимков заключается в том, что если у Вас перестала загружаться система - сделать snapper rollback который из выбранного снимка создает новый R/W и задает его по умолчанию.
## Версии:
- snapper-0.12.1-alt1
- grub-btrfs-4.13-alt3
## Системы:
- ALT Server 11.1
## Шаги воспроизведения:
1. Установить пакеты:
# apt-get install -y snapper grub-btrfs
2. Обновить конфигурацию grub для добавления подменю снимков:
# update-grub
3. Создать конфигурацию snapper для /:
# snapper -c root create-config /
4. Добавить монтирование подтома @/.snapshots в /etc/fstab:
# UUID=$(blkid | grep btrfs | cut -d '=' -f2 | cut -d ' ' -f1 | tr -d '"')
# echo "UUID=$UUID /.snapshots btrfs nosuid,relatime,subvol=@/.snapshots 0 2" >> /etc/fstab
5. Включить сервис grub-btrfsd для автообновления списка снимков:
# systemctl enable --now grub-btrfsd.service
6. Создать снимок snapper:
# snapper create -d "snapshot test 1"
После создания снимка подождать минуту, пока в фоне отработает автообновление списка снимков
7. Перезагрузиться в созданный снимок, в GNU GRUB выбрать:
ALT snapshots → @/.snapshots/1/snapshot
8. Выполнить откат системы с помощью rollback:
# snapper --ambit classic rollback 1
Результат:
Снимки автоматически добавляются в загрузчик при создании;
Rollback корректно работает создает новый снимок R/W и делает его основным при загрузке
Дополнительно:
- Также проверил на ALT Server 11.1 обновленном до Sisyphus результат аналогичный как и для p11.
Версии пакетов:
grub-btrfs-4.14-alt1
snapper-0.13.0-alt1
Как пример, была создана ситуация, создаются два snapshot(pre/post) через команду: snapper create --command "update-kernel" -d "kljj" (смотрим снапшоты создались), перезагружаем сервер, в alt snapshot в меню выбора загрузки присутствует pre/post, загружаемся делаем echo 0 > /etc/hosts, перезагружаем сервер, загружаемся со снапшота, делаем rollback перезагружаемся, в меню выбора снапшотов, снапошоты rollback отсутствуют, так же он не прописывает в загрузку по умолчанию. (Ответ для Dmitry Maksimenkov на комментарий #1) > По указанным шагам ошибка не воспроизвелась. > > После установки пакета grub-btrfs нужно вызвать update-grub, чтобы добавить > поддержку снимков в загрузчик. Убедитесь, что у Вас включен > grub-btrfsd.service который отслеживает появление снимков и автоматически > добавляет их. > > В загруженном R/O снимке и не надо делать update-grub. Задача таких снимков > заключается в том, что если у Вас перестала загружаться система - сделать > snapper rollback который из выбранного снимка создает новый R/W и задает его > по умолчанию. > > ## Версии: > > - snapper-0.12.1-alt1 > - grub-btrfs-4.13-alt3 > > ## Системы: > > - ALT Server 11.1 > > ## Шаги воспроизведения: > > 1. Установить пакеты: > # apt-get install -y snapper grub-btrfs > 2. Обновить конфигурацию grub для добавления подменю снимков: > # update-grub > 3. Создать конфигурацию snapper для /: > # snapper -c root create-config / > 4. Добавить монтирование подтома @/.snapshots в /etc/fstab: > # UUID=$(blkid | grep btrfs | cut -d '=' -f2 | cut -d ' ' -f1 | tr -d > '"') > # echo "UUID=$UUID /.snapshots btrfs nosuid,relatime,subvol=@/.snapshots > 0 2" >> /etc/fstab > 5. Включить сервис grub-btrfsd для автообновления списка снимков: > # systemctl enable --now grub-btrfsd.service > 6. Создать снимок snapper: > # snapper create -d "snapshot test 1" > После создания снимка подождать минуту, пока в фоне отработает > автообновление списка снимков > 7. Перезагрузиться в созданный снимок, в GNU GRUB выбрать: > ALT snapshots → @/.snapshots/1/snapshot > 8. Выполнить откат системы с помощью rollback: > # snapper --ambit classic rollback 1 > > Результат: > Снимки автоматически добавляются в загрузчик при создании; > Rollback корректно работает создает новый снимок R/W и делает его основным > при загрузке > > Дополнительно: > - Также проверил на ALT Server 11.1 обновленном до Sisyphus результат > аналогичный как и для p11. > Версии пакетов: > grub-btrfs-4.14-alt1 > snapper-0.13.0-alt1 Как пример, была создана ситуация, создаются два snapshot(pre/post) через команду: snapper create --command "update-kernel" -d "kljj" (смотрим снапшоты создались), перезагружаем сервер, в alt snapshot в меню выбора загрузки присутствует pre/post, загружаемся делаем echo 0 > /etc/hosts, перезагружаем сервер, загружаемся со снапшота, делаем rollback перезагружаемся, в меню выбора снапшотов, снапошоты rollback отсутствуют, так же он не прописывает в загрузку по умолчанию. Created attachment 20150 [details]
статус grub-btrfsd
когда создаешь снап в нормальном режиме, то статус grub-btrfsd показывает, что у него происходит см(вл)
когда делаешь смотришь статус grub-btrfsd загрузившись со снапшота в ro и делаешь rollback или даже просто создаешь snapshot то этого вида я так и не дождался
Проверялось в Sisyphus, ошибка воспроизводится
Версии:
- grub-btrfs-4.14-alt1
- snapper-0.13.0-alt1
Система:
- ALT Server 11.1 (обновлено до Sisyphus)
Шаги воспроизведения:
1. Установить пакеты:
# apt-get install -y snapper grub-btrfs
2. Обновить конфигурацию grub для добавления подменю снимков:
# update-grub
3. Создать конфигурацию snapper для /:
# snapper -c root create-config /
4. Добавить монтирование подтома @/.snapshots в /etc/fstab:
# UUID=$(blkid | grep btrfs | cut -d '=' -f2 | cut -d ' ' -f1 | tr -d '"')
# echo "UUID=$UUID /.snapshots btrfs nosuid,relatime,subvol=@/.snapshots 0 2" >> /etc/fstab
5. Включить сервис grub-btrfsd для автообновления списка снимков:
# systemctl enable --now grub-btrfsd.service
6. Создать снимок snapper
# snapper create --command "update-kernel" -d "kljj"
7. Повредить файл /etc/hosts
# echo 0 > /etc/hosts
7. Перезагрузиться в созданный снимок, в GNU GRUB выбрать:
ALT snapshots → @/.snapshots/1/snapshot
8. Выполнить откат системы с помощью rollback:
# snapper --ambit classic rollback 1
9. Загрузиться в систему и выполнить
# cat /etc/hosts
# btrfs subvolume get-default /
# cat /proc/cmdline
Реальный результат:
1. Файл /etc/hosts остался поврежденным
2. Система загружена с subvol=@ при том, что подтом по умолчанию задан @/.snapshots/4/snapshot
Ожидаемый результат: Загрузка системы с подтома @/.snapshots/4/snapshot, содержимое /etc/hosts до повреждения
Дополнительно:
* Воспроизводится в p11 на версиях grub-btrfs-4.13-alt3, snapper-0.12.1-alt1
* Если убрать rootflags=subvol=@ из параметров ядра при загрузке в GNU GRUB, система грузится с заданного подтома по умолчанию и ошибка не воспроизводится
(Ответ для Dmitry Maksimenkov на комментарий #4) > * Если убрать rootflags=subvol=@ из параметров ядра при загрузке в GNU GRUB, > система грузится с заданного подтома по умолчанию и ошибка не воспроизводится # grep rootflags /etc/grub.d/10_linux GRUB_CMDLINE_LINUX_DEFAULT="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX_DEFAULT}" GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}" Мне кажется, что правильнее будет перевесить на grub. Посмотреть работу snapper в GNU GRUB можно у самих разработчиков snapper - OpenSUSE. У них в системе snapper тесно интегрирован в загрузчик, и если не ошибаюсь без использования grub-btrfs (In reply to Dmitry Maksimenkov from comment #6) > Посмотреть работу snapper в GNU GRUB можно у самих разработчиков snapper - > OpenSUSE. У них в системе snapper тесно интегрирован в загрузчик, и если не > ошибаюсь без использования grub-btrfs Для полноценной поддержки snapper требуется набор патчей[1], который разработчки grub считают плохим[2]. System rollback в snapper реализован через усановку default subvolume, поэтому grub-btrfs и не нужен для его работы. Как простое решение могу предложить добавить в /etc/sysconfig/grub2 переменную, например, GRUB_BTRFS_BOOT_FROM_DEFAULT_SUBVOL, при установки которой в значение true, /etc/grub.d/10_linux не будет добавлять "rootflags=subvol=${rootsubvol}" в cmdline. Например вот так: ```diff diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in index dd78b3309..42db69066 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -68,7 +68,9 @@ case x"$GRUB_FS" in xbtrfs) rootsubvol="`make_system_path_relative_to_its_root /`" rootsubvol="${rootsubvol#/}" - if [ "x${rootsubvol}" != x ]; then + if [ "x${rootsubvol}" != x ] \ + && [ "x${GRUB_BTRFS_BOOT_FROM_DEFAULT_SUBVOL}" != "xtrue" ] \ + && [ "x${GRUB_BTRFS_BOOT_FROM_DEFAULT_SUBVOL}" != "xyes" ]; then GRUB_CMDLINE_LINUX_DEFAULT="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX_DEFAULT}" GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}" fi;; ``` [1] https://lists.gnu.org/archive/html/grub-devel/2024-10/msg00351.html [2] https://lists.gnu.org/archive/html/grub-devel/2024-11/msg00054.html |