Такой вопросец: кто использует снапшотовые ФС на корне? И каким образом?
Лично я использую BtrFS (на SSD). Выглядит это так.
Отдельный том (subvolume) - это "zone". Зоны располагаются в корне ФС и монтируются в каталог /zone. Список зон:
wine - вайновские потроха
repo - дерево portage и оверлеи
depo - зона сорсов ядра и кэш тарболлов пакетов
fragment/* - зона моего домашнего каталога, включающий зоны-снапшоты
root/* - то же самое для корня системы
root/embryo и fragment/embryo - ro-зоны, содержащие первозданное состояние системы и профиля пользователя
Далее, отдельные зоны связываются в наборы (в моей терминологии "zet"), представляющие собой изолированные загрузочные варианты системы, состоящие из файла ядра в /boot, зоны-снапшота root и зоны-снапшота пользователя (впрочем, root - это тот же пользователь). И всё это добро управляется накостыленными баш-скриптами. Поясню на примере как я переводил генту на systemd:
zet clone current systemd - создаются rw-снапшоты текущих зон root и fragment под именами root/systemd и fragment/systemd (полные пути будут выглядеть как /zone/root/systemd, но полные пути и не нужны).
zet in root/systemd - в зону root/systemd монтируются необходимые каталоги и зоны (у меня это /boot, /dev, /repo, /sys, /proc, /usr/src) и выполняется chroot.
Далее в chroot делались нужные манипуляции по переходу на systemd. После exit:
zet off root/systemd - отмонтирование вышеперечисленных каталогов и зон.
zet set systemd - в конфиг загрузчика (использую extlinux из-за его простоты, ибо grub2 - заскриптованный ужос) и в fstab соответствующей зоны вносятся правки.
После ребута в бутменю видна новая запись вида <hostname> <zone_name>. Выбираю её и отныне жизнь системы пошла по новому пути, ни на грамм не пересекающемуся с прежними. Естественно, при первой загрузке с systemd у меня возникли траблы и система не грузилась до конца, поэтому я просто ребутался, выбирал предыдущую запись в бутменю и загружалась полностью рабочая система с openrc без каких-либо следов systemd, из которой можно было гуглить решение проблем.
То же самое я делаю при обновлении мира. Таким образом, у меня сейчас есть пять абсолютно непересекающихся комплектов (зетов), в которые можно загрузиться в любой момент по желанию. Если, например, обновление мира прошло неудачно, можно просто выбрать другой зет, а неудачный удалить. И так далее. Проблемы корявых обновлений исчезают вообще как класс.
BtrFS тут выгодно отличается от ZFS тем, что у последней откат к снапшоту через zfs rollback влечёт автоматическое уничтожение всех томов позднее выбранного снапшота.
Также видел, что в некоторых системах (в openSUSE, к примеру) собираются использовать снапшоты на уровне отдельных каталогов корня (/usr, /etc, /lib и др.), но не могу понять смысла такого костылизма - всё равно ведь будут где-то пересечения между различными состояниями, не лучше ли было сделать как сделал я?
Короче, если используете снапшоты - делитесь своими рецептами.
