Хранилище и снимки Btrfs
Страховочная сетка SkillFishOS: автоматические снимки и возврат прямо из загрузки.
Одна из главных мыслей SkillFishOS — можно возиться без страха. Это возможно благодаря файловой системе Btrfs с автоматическими снимками: каждое важное изменение запечатлевается, и если что-то сломается, вы вернётесь одним щелчком.
Раздельные подтома
На диске один раздел Btrfs, разбитый на отдельные подтома:
@— операционная система;@home— данные пользователя;@cacheи@log— кэши и журналы, вынесенные за пределы снимков, чтобы откат не притащил за собой вчерашние журналы;@games— библиотека игр, из-за которой иначе разбухал бы каждый снимок;@swap— файл подкачки.
Держать их порознь важно: откат системы не трогает личные файлы. Можно вернуться к «вчерашней» системе, сохранив сегодняшние документы, сохранения и настройки.
Автоматические снимки со Snapper
SkillFishOS использует Snapper с настройкой root и перехватчиками до и после в APT: каждый раз, когда вы ставите или обновляете пакеты, снимок создаётся сам до и после. Поэтому, если обновление принесёт беду, снимок «до» уже есть.
Из настроек стоит отметить:
- ограничение на число хранимых снимков, чтобы диск не переполнялся;
- снимки на важных вехах системы;
- управление из окна через SkillFishOS Снимки, приложение, которое написали мы сами.
Сколько хранится
Пять по умолчанию: три обычных (пара «до и после» вокруг каждой операции apt) и два «важных» — обновления, затрагивающие ядро или systemd, то есть как раз те, которые чаще всего хочется вернуть. Поверх них лежит точка «SkillFishOS — clean install», которая не истекает никогда: дорога назад к системе, какой она была из коробки.
Почасовая линия выключена. На домашней консоли она только съедает диск, а в те снимки никто никогда не заглядывает. Снимки, сделанные вручную, в пятёрку не входят и сами не удаляются: если вы сделали снимок нарочно, он останется, пока вы его не уберёте.
Возврат из загрузочного меню
Благодаря grub-btrfs снимки появляются прямо в меню GRUB, в разделе «SkillFishOS snapshots». Перезагрузитесь, выберите снимок, сделанный до неприятности, и вы окажетесь внутри него.
Две вещи, которые стоит знать, прежде чем на это полагаться:
- То, во что вы загружаетесь, доступно только для чтения. Это спасательное окружение: осмотреться, проверить, действительно ли в старом состоянии всё было хорошо, вынести нужные файлы. Несколько служб при запуске сообщат об ошибке — они попросту не могут писать. Так и должно быть, это не поломка.
- Загрузочное меню обновляется после каждой операции
apt, поэтому снимок, сделанный до обновления, оказывается в списке ровно тогда, когда он нужен.
Как сделать возврат окончательным
Загрузка снимка сама по себе ничего не меняет, и snapper rollback здесь не помогает: он подменяет подтом по умолчанию, а наша запись в GRUB прибивает subvol=@ и побеждает. Дело делает такая команда:
sudo skillfish-rollback --list # какие снимки есть
sudo skillfish-rollback 12 # снимок 12 становится системой со следующей загрузки
Она отставляет текущую систему в сторону — не удаляет, а превращает в @-rotto-<дата> — и строит из выбранного снимка новый, доступный для записи @, перенося вместе с ним всю историю снимков. Если и старое состояние окажется не тем, sudo skillfish-rollback --undo вернёт всё обратно, а --clean освободит место, когда вы будете уверены.
Работает и из обычной системы, и изнутри снимка, загруженного только для чтения, — а это как раз тот случай, который важен, когда машина больше не запускается.
Домашний каталог не трогается никогда.
@home— отдельный подтом: система едет назад во времени, ваши файлы остаются как есть. Полезно знать, и стоит помнить, прежде чем рассчитывать, что откат вернёт удалённый документ — не вернёт.
Это и есть та страховочная сетка, которая позволяет даже самым младшим исследовать систему, не боясь сломать её безвозвратно.
Почему Btrfs, а не Timeshift
SkillFishOS выбрал Btrfs + Snapper + grub-btrfs вместо решений вроде Timeshift, потому что:
- связка с APT работает сама (снимок на каждой операции с пакетами);
- снимки родные для файловой системы (мгновенные, copy-on-write, дешёвые);
- возврат доступен прямо из загрузки, даже если система больше не стартует обычным путём.
