- Версии пакетов - grub-btrfs-4.12 snapper-0.12.1 Тестирование проходит на ALT Server 11.1 (Mendelevium) grub-btrfs не обновляет список снапшотов при создание или удаление их. В результате данная проблема, не позволяет воспользоваться функцией отката системы. Происходит следующее: 1. создаем снапшот работающей системы, после перезагрузки, в списке он не обнаруживается. 2. загрузившись еще в работающей системе делаем update-grub, после перезагрузки снапшот виден в grub 3. удаляем fstab, система соответственно не загружается. 4. Загружаемся с снапшота сделанного в п1. 5. выполняем команду snapper rollback, в результате, которого создаются два снапшота, у одного из которых статус rw и с него мы должны, после перезагрузки загрузится уже в работающую систему, но тк список снапшотов в grub не обновляется, то их не обнаруживается и система продолжает грузится из состояния, когда был удален fstab в п3. Вариант создания снапшота изначально в статусе rw не устраивает, тк нарушается безопасность. Выполнение update-grub, при загрузке из снапшота невозможно, тк снапшот имеет статус ro.
По указанным шагам ошибка не воспроизвелась. После установки пакета 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