ROSA Freeze

Материал из Rosalab Wiki
Перейти к: навигация, поиск

Введение

ROSA является динамично развивающейся средой, постоянно получающей большие пласты обновлений. Обновления призваны привнести в систему улучшения и новый функционал, однако иногда они имеют обратный эффект, ломая что-то работающее и вызывая недовольство пользователей. Кроме того, многие члены нашего сообщества — это энтузиасты, которых постоянно тянет попробовать что-то новое. Например, всевозможные программы из различных источников, которые не имеют прямого отношения к дистрибутиву. Рано или поздно программы могут вступить в конфликт с приложениями и политиками ОС и привести систему (по крайней мере частично) в нерабочее состояние. Как результат, для многих пользователей актуальным вопросом является автоматический возврат поломанной системы в рабочее состояние.

Если вы знакомы с управлением пакетами RPM, то для отката системы вы можете воспользоваться инструментами Urpmi.recover и urpm-reposync. Однако гарантировать возврат поломанной системы в работоспособное состояние эти инструменты не могут — ведь не факт, что поломка вызвана исключительно пакетами, или что пакеты можно корректно откатить до предыдущих версий.

Если вы предвидите, что в рамках текущего сеанса работы с большой вероятностью сломаете систему и вам придется откатываться до рабочего состояния, то вы можете воспользоваться ROSA Freeze. При использовании ROSA Freeze, ОС может работать в двух режимах — обычном и режиме «заморозки». При использовании последнего поверх всех системных директорий верхнего уровня (/bin, /etc, /usr и так далее; список может быть скорректирован в настройках) с помощью aufs монтируются директории-«перехватчики», находящиеся в tmpfs либо на отдельном разделе жесткого диска. Любые изменения, вносимые в «замороженные» директории, реально попадают в директории-«перехватчики», а содержимое оригинальных директорий остается неизменным. При перезагрузке машины все содержимое этих перехватчиков удаляется и системные директории возвращаются в первоначальное состояние. При этом после перезагрузки система продолжает оставаться в замороженном состоянии — выход из этого режима надо производить явно. Предусмотрена возможность переноса всех изменений из aufs, сделанных в рамках текущей сессии, в оригинальные директории.

Базовый функционал

Находится инструментарий в пакете rosa-freeze. Работает наш инструмент в консоли, только от пользователя root, и запускается командой rfreeze. Для проверки работоспособности, можно запросить текущий статус:

# rfreeze status

Для «заморозки» системы, необходимо выполнить команду

# rfreeze enable

По умолчанию, после включения режима заморозки все изменения будут перенаправляться в tmpfs. Вы также можете перенаправить эти изменения на отдельный раздел жесткого диска с помощью опции -s либо в отдельную директорию на корневом разделе — с помощью опции -f.

Система переходит в замороженное состояние сразу же, то есть перезагрузки не требуется. Однако учтите, что используемый подход не гарантирует фиксацию состояния файлов, которые были открыты на запись в момент включения заморозки. Для надежности, необходимо перезагрузить систему - заморозка директорий осуществляется непосредственно в момент загрузки до того. как какой-либо процесс сможет открыть какой-либо файл на запись.

Для отключения режима заморозки надо дать команду

# rfreeze disable

После этой команды уже обязательно необходима перезагрузка.

Пока система находится в «замороженном» состоянии, все изменения, вносимые пользователем в систему, магическим образом исчезнут после перезагрузки. Если вы вдруг осознали, что не хотите такого поворота событий, то можно слить текущее состояние системы с ее оригинальным состоянием командой

# rfreeze merge

После этого текущее состояние системы станет базовым.

Впрочем, команда «merge» потенциально опасная, будьте с ней осторожнее и делайте резервные копии.

Что и как замораживается

по умолчанию, «заморозке» подлежат все топ-левел директории, кроме:

  • /dev
  • /home
  • /lost+found
  • /media
  • /mnt
  • /proc
  • /run
  • /sys
  • /tmp

Вы можете указать список «незамораживаемых» директорий вручную при вызове rfreeze enable с помощью опции -d. Имена директорий должны быть разделены двоеточием и не содержать слешей, например:

rfreeze enable -d home:media:mnt

Также rfreeze в настоящее время поддерживает заморозку только тех директорий, которые расположены на корневом разделе. В момент включения режима заморозки инструмент автоматически исключит из списка замораживаемых те директории, на которые смонтированы другие устройства или дисковые разделы.

Для каждой из остальных директорий верхнего уровня создается «перехватчик», в зависимости от заданных опций располагающийся либо в tmpfs, либо в одной из директорий корневого раздела, либо на отдельном разделе жесткого диска. В любом случае, хранилище перехватчиков монтируется на директорию /tmp/sysroot-rw, а далее каждый перехватчик из этой директории монтируется через aufs поверх исходной директории так, что все изменения идут в /tmp/sysroot-rw.

Например, поверх директории /bin через aufs монтируется /tmp/sysroot-rw/bin. Если пользователь что-то меняет в /bin, то реально изменения происходят в /tmp/sysroot-rw/bin, а оригинальный /bin не затрагивается. Но пользователь (благодаря aufs) этого не замечает и в течение сеанса его работы (до перезагрузки/выключения) он видит в /bin все свои изменения.

Оригинальные версии всех директорий можно при этом наблюдать в директории /tmp/sysroot-ro.

Графический интерфейс

Манипуляции с режимом заморозки могут осуществляться с помощью графического интерфейса — ROSA Freeze UI

RFreeze UI ru.png

Файл конфигурации

Настройки режима заморозки, используемые по умолчанию, можно изменять в секции «freeze» файла /etc/rfreeze.cfg. Пример секции:

[freeze]
type = folder
device =
folder = /rfreeze
skip_dirs = dev home lost+found media mnt proc run sys tmp

Параметр «type» может принимать значения folder, tmpfs и device. Параметры device и folder используются, только если type выставлен в device или folder соответственно.

Параметр "skip_dirs" содержит перечень имен директорий (разделенных пробелом), которые не подлежат заморозке.

Дополнительная информация

Перечень опций и возможностей, поддерживаемых установленной в системе версией ROSA Freeze, можно узнать, запустив команду

# rfreeze --help

Исходный код программы распространяется под лицензией BSD и доступен по адресу https://abf.rosalinux.ru/soft/rosa-freeze

Ограничения

  • Все замораживаемые директории должны располагаться на корневом разделе (монтируемом в /)
  • Заморозка /home не поддерживается, даже если эта директория находится на корневом разделе