Особенности сохранения данных и настроек

ОС РОСА "БАРИЙ", как модульная система, имеет специфический механизм сохранения изменений, внесенных в Систему в процессе работы. Под изменениями подразумеваются любые новые или модифицированные файлы. Для корректной обработки их следует разделять на две категории:

  • пользовательские изменения – файлы, находящиеся в каталоге `/home, - это личные данные пользователя, доступные через файловый менеджер в разделе с пиктограммой "домик". Все пользовательские данные хранятся в одном модуле, доступном при загрузке на любом устройстве;
  • системные изменения – все файлы за пределами /home, включая установленные программы и внесенные конфигурационные изменения. Системные изменения записываются в отдельные модули для каждой машины, поэтому файлы, сохраненные вне каталога /home на одном устройстве, не будут доступны на другом.

При загрузке Системы все модули распаковываются и объединяются в корневую файловую систему (rootfs).

ОС использует механизм послойного хранения данных, управляемый UIRD (Unified Init Ram Disk system), - это разновидность initrd, при которой файловая система собирается из нескольких слоев, объединяемых с помощью overlayfs или aufs, при этом все слои монтируются только для чтения (read-only), за исключением последнего, верхнего слоя, куда записываются изменения. Подробнее о реализации UIRD в ОС см. на справочной странице в ROSA Wiki.

При внесении изменений в Cистему:

  • новые файлы и изменения существующих записываются в верхний слой, называемый changes;
  • удаленные файлы не исчезают физически, но помечаются в changes специальной "тенью" (whiteout), из-за чего Система их не видит.

Верхний слой может быть подключен в разных режимах, задаваемых параметром uird.mode.

Режимы хранения изменений

  • uird.mode=clean

Все изменения записываются в ОЗУ (tmpfs) и исчезают после перезагрузки. Данный режим используется по умолчанию в большинстве конфигураций и обеспечивает "чистую" загрузку Системы.

  • uird.mode=changes

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

uird.changes=/путь/к/каталогу
uird.mode=clear

Гибридный режим между clean и changes: изменения сохраняются в указанное место, но при каждом запуске Система автоматически очищает их. Выглядит для пользователя как clean, но не использует ОЗУ для хранения данных.

uird.mode=toxzm

Данный режим используется при установке ОС на внешний носитель. Во время работы изменения записываются в ОЗУ (на сжатый zram-раздел), а при выключении Системы они упаковываются в модули и сохраняются.

Для работы этого режима необходимо указать путь к конфигурационному файлу и активировать режим выключения:

uird.changes=/путь/к/toxzm.cfg
uird.shutdown

Подробнее о конфигурационном файле toxzm.cfg см. раздел Конфигурационный файл toxzm.cfg.

Процесс сохранения изменений

В работе с ОС необходимо учитывать следующие особенности сохранения изменений в Системе:

  • автоматическая упаковка в модули выполняется при выключении Системы, когда все файловые системы размонтированы;
  • если носитель был извлечен в режиме "Терминал", его можно вернуть в USB-разъем и корректно завершить работу Системы, чтобы изменения сохранились;
  • для срочного сохранения пользовательских данных без выключения Системы доступны дополнительные инструменты:
    • иконка "домик" на рабочем столе – запускает процесс ручного сохранения пользовательских данных (рисунок 4);
    • пиктограмма светофора в системном трее – позволяет настроить автоматическое интервальное сохранение.

Рисунок 4 ‒ Сохранение изменений в системе вручную

Если при выключении Системы модуль с изменениями не был сохранен, останется резервная копия, созданная при предыдущем завершении работы.

Рекомендации по хранению данных

  • Общие рекомендации по хранению данных в ОС:
  • устанавливать ПО необходимо отдельными модулями, чтобы избежать потери изменений;
  • размер модуля с пользовательскими данными не должен превышать 300–500 МБ;
  • для хранения крупных файлов рекомендуется использовать раздел NTFS, который создается по умолчанию при установке ОС на носителе объемом 16 ГБ и больше. Этот раздел будет доступен как в ОС РОСА "БАРИЙ", так и в Windows;
  • системные изменения рекомендуется сохранять в отдельные модули, чтобы избежать их смешивания с пользовательскими данными;
  • при необходимости исключения временных файлов использовать переменные (GARBAGE);
  • если модуль содержит только статические файлы, отключить его пересборку (REBUILD=no).

Конфигурационный файл toxzm.cfg

Файл ROSA-DATA/saves/toxm.cfg управляет процессом сохранения данных в модули.

Каждая секция в файле определяет отдельный модуль и содержит следующие параметры:

  • XZM – имя модуля (если не указано, генерируется автоматически);
  • MODE – режим подключения модуля (copy, mount, mount+wh);
  • REBUILD – признак пересборки модуля при выключении (yes, no, once);
  • ADDFILTER – список файлов и каталогов, которые нужно включить в модуль;
  • DROPFILTER – список файлов и каталогов, которые не нужно включать в модуль;
  • SQFSOPT – параметры сжатия модуля (например, mksquashfs с xz или lz4);
  • MAXCOPYSIZE – максимальный размер модуля; при превышении создается новый модуль.

Система автоматически управляет сохранением изменений, обеспечивая возможность гибкой настройки.

Для удобства конфигурирования в файле toxzm.cfg можно использовать переменные для группировки путей, которые не должны сохраняться либо требуют отдельного хранения.

Пример определения переменных:

GARBAGE="/var/log /var/spool /var/tmp /var/cache"
PAM="/etc/pam.d /etc/pam_pkcs11 /etc/pki /xdg/autostart/"

Сохранение домашних каталогов пользователей

Домашние каталоги пользователей и суперпользователя (/home и /root) сохраняются в отдельный модуль homes.xzm:

XZM0=homes.xzm
MODE0=copy
REBUILD0=no
ADDFILTER0="/home /root"
DROPFILTER0=
SQFSOPT0='-comp lz4 -b 512k'
MAXCOPYSIZE0=300

В этом примере:

  • модуль homes.xzm будет содержать только пользовательские данные;
  • режим copy означает, что модуль будет полностью загружаться в ОЗУ при старте Системы;
  • пересборка REBUILD=no отключена, чтобы модуль не обновлялся при каждом выключении;
  • максимальный размер MAXCOPYSIZE=300 ограничивает размер модуля 300 Мб.

Сохранение системных изменений

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

XZM1=
MODE1=mount+wh
REBUILD1=no
ADDFILTER1=
DROPFILTER1="$GARBAGE /home /root"
SQFSOPT1='-comp lz4 -b 512k'
MAXCOPYSIZE1=

В этом примере:

  • режим mount+wh означает, что модуль будет монтироваться при загрузке с возможностью записи;
  • фильтр DROPFILTER1 исключает из сохранения файлы журналов, временные данные ($GARBAGE), а также каталоги /home и /root, которые сохраняются в отдельном модуле.

Примеры конфигурации модулей без пересборки:

  • Хранение конфигураций PAM (Pluggable Authentication Modules) в отдельном модуле:
XZMpam='pam.xzm'
MODEpam='copy'
REBUILDpam='no'
ADDFILTERpam="$PAM"
DROPFILTERpam=
SQFSOPTpam='-comp xz -b 512k'
MAXCOPYSIZEpam=

Здесь файлы аутентификации ($PAM) сохраняются в отдельном модуле pam.xzm, который загружается в ОЗУ (copy).

  • Хранение контрольных сумм (cts) в отдельном модуле:
XZMcts='cts.xzm'
MODEcts='copy'
REBUILDcts='no'
ADDFILTERcts='/etc/cts /etc/prelink.conf.d/cts.conf'
DROPFILTERcts=
SQFSOPTcts='-comp xz -b 512k'
MAXCOPYSIZEcts=

Этот модуль cts.xzm сохраняет конфигурации, связанные с контрольными суммами, обеспечивая целостность Системы.

Параметры uird.mounts и uird.home

Параметры uird.mounts и uird.home являются важными элементами механизма сохранения данных в ОС, позволяя гибко настраивать, какие изменения будут сохраняться в каталоги, а какие — в модули.

Параметр uird.mounts

Параметр uird.mounts используется в нескольких случаях:

  • разгрузка записи в uird.from при сложном вложенном монтировании. Этот параметр помогает разгрузить запись в uird.from при сложной конфигурации, например, когда ISO-образ доступен по сети через HTTP, внутри которого находится squashfs, а внутри — файл с ext3. Это стандартная конфигурация для современных ISO-образов;
  • автомонтирование раздела для пользователя;
  • операция bind (mount -o bind), которая позволяет выполнить операцию монтирования каталога на носителе внутрь Системы. Пример записи:
uird.mounts=/my_WWW::MNT=/var/www::MNTOPTS=noexec+rw::FORCE=yes::INIT=yes

В этой записи указано, что каталог /my_WWW, доступный на момент загрузки, будет смонтирован в /.memory/mounts/0 с параметрами noexec и rw. Каталог /var/www будет биндом на /my_WWW. Параметр FORCE=yes позволяет продолжить загрузку, даже если каталог /my_WWW не был найден. Параметр INIT=yes означает, что в случае пустого каталога будет выполнена инициализация: данные из модуля будут скопированы в каталог /var/www. Таким образом, все изменения, которые будут сделаны в каталоге /var/www, окажутся в каталоге /my_WWW, расположенном в корне одного из доступных разделов.

Параметр uird.home

Параметр uird.home является подмножеством uird.mounts и используется исключительно для каталога /home. Пример записи:

uird.home=/dev/sda1/homes

Эта запись указывает, что каталог /home будет монтироваться с устройства /dev/sda1 в каталог /homes.