Jump to content

Barium saves system: различия между версиями

Нет описания правки
Нет описания правки
Строка 1: Строка 1:
=== Способы сохранения изменений в ОС Барий (Barium OS) ===
=== Способы сохранения изменений в ОС Барий (Barium OS) ===


Большая часть особых свойств, что отличают ОС Барий от других дистрибутивов РОСА, собранных на той же пакетной базе, заложены в [[ОС_Роса_Барий:UIRD]]
Большая часть особых свойств, что отличают ОС Барий от других дистрибутивов РОСА, собранных на той же пакетной базе, заложены в [[UIRD]]


'''UIRD''' это init ram disk (initrd) собираемый с использованием dracut, но кардинально отличающийся сценарием загрузки ОС. Предназначен для загрузки модульных дистрибутивов. В настоящее время используется в MagOS, Барии, ublinux, MOS-flash доступен как дополнительный initrd в дистрибутивах puppyrus. А значит описанное далее в целом справедливо и для них.
'''UIRD''' это init ram disk (initrd) собираемый с использованием dracut, но кардинально отличающийся сценарием загрузки ОС. Предназначен для загрузки модульных дистрибутивов. В настоящее время используется в MagOS, Барии, ublinux, MOS-flash доступен как дополнительный initrd в дистрибутивах puppyrus. А значит описанное далее в целом справедливо и для них.

Версия от 19:21, 27 марта 2025

Способы сохранения изменений в ОС Барий (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