Система

Хранилище и снимки 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, дешёвые);
  • возврат доступен прямо из загрузки, даже если система больше не стартует обычным путём.

Источники