Barium saves system
Способы сохранения изменений в ОС Барий (Barium OS)
Большая часть особых свойств, что отличают ОС Барий от других дистрибутивов РОСА, собранных на той же пакетной базе, заложены в UIRD
UIRD это init ram disk (initrd) собираемый с использованием dracut, но кардинально отличающийся сценарием загрузки ОС. Предназначен для загрузки модульных дистрибутивов. В настоящее время используется в MagOS, Барии, ublinux, MOS-flash доступен как дополнительный initrd в дистрибутивах puppyrus. А значит описанное далее в целом справедливо и для них.
Именно UIRD отвечает за то как будут сохраняться ваши данные.
Немного теории
Модульными дистрибутивами называются сборки где корневая ФС линукс собирается \ на этапе initrd из слоев. Каждый из слоев содержит свою часть файлов. В качестве слоя может быть все что возможно смонтировать в линукс: раздел, \ папка, iso, img. Но чаще всего это squashfs архивы это и есть модули. Все эти слои объединяются с пощью aufs/overlayfs в один каталог, который и \ будет корнем / для дальнейшей загрузки дистрибутива. Все эти слои монтируются read only, кроме последнего, верхнего слоя. Еще \ немного и будет понятного к чему вся эта предыстория. Итак. Система загружена, модули RO. А что будет если добавить в систему файл \ или изменить существующий? Все эти изменения фиксируются в последнем слое, который мы называем changes. При удалении существующего файла, в changes будет \ оставлена метка (тень или whiteout), и объединяющая модули ФС будет считать что этого файла нет. А что может быть смонтировано в верхний слой? Опять же все \ что можно смонтировать в Линукс с возможностью записи.
В UIRD способ работы с верхним слоем, то есть иначе говоря способ сохранения \ данных между перезагрузками, управляется параметром uird.mode. Доступно 4 \ варианта:
uird.mode=clean
Если смонтировать в верхний слой aufs каталог в tmpfs, то все изменения будут \ храниться в ОЗУ и после выключения исчезнут. Это называем - чистый режим, в \ большинстве конфигураций это состояние по умолчанию.
uird.mode=changes
Если смонтировать туда папку на диске или по сети (не принципиально), или \ файл-образ , то данные будут сохраняться после перезагрузки. Таких папок или \ файлов может быть несколько, с разным набором установленного софта и настройками. Эти папки \ или файлы-образы мы называем - профилями. Такой режим используется по умолчанию в MagOS. Кроме uird.mode=changes вам нужно указать где находится \ файл или папка для сохранений uird.chages=/куда/писать (способы указания путей смотрите в Barium:UIRD)
uird.mode=clear
Гибридный режиме между clean и changes, слой подключается как для changes, но \ перед подключением зачищается. То есть для пользователя выглядит как clean, но не задействует ОЗУ для хранения изменений во время работы системы.
uird.mode=toxzm
Режим добавляющий к режиму clean возможность сохранения. Во время работы \ изменения пишутся в папку в ОЗУ, (для Бария это блочное устройство zram со \ сжатием). При выключении машины эти изменения пакуются в модули. Для включения режима \ кроме uird.mode=toxzm нужно передать путь к файлу с настройками режима uird.changes=/где/конфиг.cfg и uird.shutdown
Режим имеет возможность очень тонкой настройки сохранений, можно указать для \
любого файла или папки нужно ли сохранять и в какой модуль.
Для каждого модуля в конфигурационном файле который указываете в uird.changes \
для этого режима есть отдельная секция состоящая из нескольких параметров.
Название параметра завершается индексом, именно по индексу определяется \
принадлежность параметра секции. Цифровые индексы должны идти по порядку,
в этом порядке модули подключаются при старте.
XZM - имя модуля, если оставить пустым то будет сгенерировано по характеристикам \
железа, то есть модуль будет иметь свое имя на каждой машине
MODE - режим подключения модуля при загрузке, варианты: copy, mount, mount+wh.
REBULID - нужно ли пересобрать модуль при выключении машины, варианты: yes, no, once
ADDFILTER - фильтры (grep) для получения списка файлов и каталогов, которые нужно \
сохранить в модуль
DROPFILTER - фильтры для исключения файлов и каталогов из списка полученного после \
ADDFILTER
SQFSOPT - опции для mksquashfs, обычно это алгоритм сжатия и размер блока
MAXCOPYSIZE - Максимальный размер разрешенный для модуля, после чего параметр MODE модуля \
будет переведен в mount, REBUILD в no и создана новая секция с MODE=copy и \
REBUILD=yes
Далее на примере конфигурационного файла из бария:
Для удобства списки можно заносить в переменные
GARBAGE=/var/log /var/spool /var/tmp /var/cache
PAM=/etc/pam.d /etc/pam_pkcs11 /etc/pki /xdg/autostart/
Сохраняем домашние каталоги пользователей в модуль homes.xzm
XZM0=homes.xzm
MODE0=copy
REBUILD0=no
ADDFILTER0=/home
DROPFILTER0=
SQFSOPT0='-comp lz4 -b 512k'
MAXCOPYSIZE0=300
Системные изменения сохраняем в свой модуль для каждой машины.
(если имя для модуля не указано, оно генерируется на основе железа)
XZM1=
MODE1=mount
REBUILD1=no
ADDFILTER1=
DROPFILTER1=$GARBAGE /home
SQFSOPT1=-comp lz4 -b 512k
MAXCOPYSIZE1=
Примеры с отключенной пересборкой
XZMpam='pam.xzm'
MODEpam='copy'
REBUILDpam='no'
ADDFILTERpam=$PAM
DROPFILTERpam=
SQFSOPTpam='-comp xz -b 512k'
MAXCOPYSIZEpam=
Контрольные суммы cts
XZMcts='cts.xzm'
MODEcts='copy'
REBUILDcts='no'
ADDFILTERcts=/etc/cts /etc/prelink.conf.d/cts.conf
DROPFILTERcts=
SQFSOPTcts='-comp xz -b 512k'
MAXCOPYSIZEcts=
uird.mounts и uird.home
От части к способам сохранений имеют отношения еще и эти два параметра, \ позволяющие объединить, например, сохранение части изменений в каталог, а \ другой части в модуль.
uird.mounts
Параметр используется в трех случаях.
- для того, чтобы разгрузить запись в uird.from при сложном вложенном \
монтировании. Например iso в сети по http, внутри которого файл со squashfs, \ внутри которого файл с ext3 (стандартная конфигурация для современных исо)
- чтобы организовать автомонтирование раздела для пользователя
- чтобы сделать бинд (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 будет биндом на эту папку. FORCE=yes означает не прерывать загрузку если каталог /my_WWW не будет найден, \ а INIT=yes означает в случае если каталог пуст скопировать туда все что есть в \ модулях в /var/www, то есть как бы инициализировать.
uird.home
По сути подмножество uird-mounts для конкретного каталога /home
uird.home=/dev/sda1/homes