Сборка UIRD в магее

Но upperdir=/dev/sda1/changes у меня это Ext4

ни /memory/changes и /memory/ovl/changes это не Ext4
Получилось /memory/changes это примонтированная /dev/sda1/changes
Расположил workdir на /dev/sda1/workdir и все заработало.

Разрабы пишут
Опция “workdir” должна указывать на пустой каталог в той же файловой системе, где находится “upperdir”
upperdir находится у меня на Ext4

Верно, а как в вашем варианте сделать чтобы /memory/changes был /dev/sda1, а не /dev/sda1/changes?

Извините, это не мой вариант. Почитал wiki разрабов и собрал и получилось.
Я всего лишь упростил запуск режима changes, удалив /memory/ovl

И перенаправил Overlay=/dev/sda
Дальше все делает UIRD.
Но , мне кажется, я понял откуда появился ваш вариант.
Дело в том что я запускаю changes от UIRD с диска и сбоев нет.
Но если запускать режим changes с флэшки, то могут быть проблемы.
Т к быстродействие у флэшек всякое, да и место на флэшке может кончится.
Если быстродействие у флэшки низкое, то будет тянуть.
Вот тут то, вероятно, и нужен вариант с промежуточной папкой.
Но зачем загружать режим chenges на флэшке, когда есть TOXZM ?

PS
Надо не торопиться и все обдумать. И тестировать

Провел тестирование. Запускал режим Changes на флэшке (Mirex 16 Gb)
Причем тестировался первый запуск, когда changes на флэшке пустой.
В обоих вариантах !!!
Копирование модуля 468 Мб из папки ~/base на флэшке в папку /etc заняло 35 сек.
Есть флэшка похуже и там в обоих вариантах тянуло и сильно. После 1 мин копирования выключал процесс
Увы но чуда с дополнительной точкой монтирования не произошло.

У меня на флэшке changes системы пишется в папку syschanges

В вашем варианте в aufs в папке syschanges стали писаться изменения системы.
В overlay в папке syschanges появились папки changes и workdir. И в ~syschanges/changes пишутся изменения.
В условно моем изменения пишутся в ~syschanges/changes и в aufs и changes.

PS
Избегать надо применения режима changes на флэшке.
К примеру при запуске режима changes на диске работа нормальная.

Не понял, а какого чуда вы ждали?

Об этом и говорю. Если, допустим, вы привыкли к uird.changes=/dev/sda1, то с оверлеем это не работало потому, что если смонтировать /dev/sda1 в /memory/changes негде разместить папку workdir чтобы она оказалась в той же FS. Для этого и была добавлена промежуточная точка монтирования. Больше не для чего. И никаких чудес ждать тут не надо.

Пример работы UIRD в режиме changes.
Система у меня грузится с диска и точка монтирования - /memory/layer-base/0
Changes будут лежать на диске - /memory/layer-base/0/syschanges/changes

Ваш вариант UIRD

Инициализация источника персистентных изменений: /memory/changes
mount_data_source syschanges /memory/changes /memory/data/changes  /tmp/parameters/uird.changes/1
Поиск и инициализация источника: syschanges
find_data syschanges /memory/data/changes  /tmp/parameters/uird.changes/1
find_file syschanges /memory/data/changes /tmp/parameters/uird.changes/1
find_file syschanges /memory/data/changes /tmp/parameters/uird.changes/1
find_filepath /memory/layer-base/0 syschanges /memory/data/changes /tmp/parameters/uird.changes/1
RETURNFOUND=/memory/layer-base/0/syschanges
data_from RESULT - /memory/layer-base/0/syschanges
DATA_FROM - /memory/layer-base/0/syschanges
mount_device /memory/layer-base/0/syschanges /memory/ovl
mount -n -o rbind  /memory/layer-base/0/syschanges /memory/ovl

Получилось что вы содержимое папки /memory/layer-base/0/syschanges, в которой находятся changes и workdir сначала монтируете в /memory/ovl а потом уже overlay, из /memory/ovl/changes, монтирует систему.

Еще раз пишу
В папке /memory/layer-base/0/syschanges в вашем варианте появляются changes и workdir
Они в одной файловой системе.
Никакого другого workdir искать не надо

А надо просто указать путь до папок changes и workdir в команде монтирования Overlay

Мой вариант UIRD
Система грузится с диска и точка монтирования - /memory/layer-base/0
Changes будут лежать на диске - /memory/layer-base/0/syschanges/changes

Инициализация источника персистентных изменений: /memory/changes
mount_data_source syschanges /memory/changes /memory/data/changes  /tmp/parameters/uird.changes/1
Поиск и инициализация источника: syschanges/changes
find_data syschanges/changes /memory/data/changes  /tmp/parameters/uird.changes/1
find_file syschanges/changes /memory/data/changes /tmp/parameters/uird.changes/1
find_file syschanges/changes /memory/data/changes /tmp/parameters/uird.changes/1
find_filepath /memory/layer-base/0 syschanges/changes /memory/data/changes /tmp/parameters/uird.changes/1
RETURNFOUND=/memory/layer-base/0/syschanges/changes
data_from RESULT - /memory/layer-base/0/syschanges/changes
DATA_FROM - /memory/layer-base/0/syschanges/changes
mount_device /memory/layer-base/0/syschanges/changes /memory/changes
mount -n -o rbind  /memory/layer-base/0/syschanges/changes /memory/changes

Или Changes,как в вашем варианте, будут лежать на диске -
/memory/layer-base/0/changes/changes

Инициализация источника персистентных изменений: /memory/changes
mount_data_source changes /memory/changes /memory/data/changes  /tmp/parameters/uird.changes/1
Поиск и инициализация источника: changes/changes
find_data changes/changes /memory/data/changes  /tmp/parameters/uird.changes/1
find_file changes/changes /memory/data/changes /tmp/parameters/uird.changes/1
find_file changes/changes /memory/data/changes /tmp/parameters/uird.changes/1
find_filepath /memory/layer-base/0 changes/changes /memory/data/changes /tmp/parameters/uird.changes/1
RETURNFOUND=/memory/layer-base/0/changes/changes
data_from RESULT - /memory/layer-base/0/changes/changes
DATA_FROM - /memory/layer-base/0/changes/changes
mount_device /memory/layer-base/0/changes/changes /memory/changes
mount -n -o rbind  /memory/layer-base/0/changes/changes /memory/changes

Мне кажется вы забываете, что раздел для changes может быть на совершенно отдельном устройстве, которое не будет смонтировано заранее в /memory/layer-base/0 или куда либо еще. Либо не понимаю вас ).

Извините, а что здесь непонятного ?

Поиск раздела я не трогал. Значит найдет changes на совершенно отдельном устройстве.
Я привел примеры моего использования.

/memory/layer-base/0 это точка монтирования первого источника. Если источник для изменения на отдельном разделе его там не будет.
Что у вас в итоге в /memory/changes? Корневая фс или подпапки syschanges и workdir? Должно быть как в корневой фс /bin, /etc, /usr. и т.д. потому, что иначе сломаем скрипты в pfs-utils и магос.

Давайте закончим эту бесплодную дискуссию.

/memory/layer-base/0 - папка с загруженной системой
syschanges/changes - для режима changes

Ничего не ломается. У меня все работает

Извините, но “У меня все работает” слабый аргумент ). Я не против изменений, в том числе нарушающих совместимость, если изменение полезно, но конкретно тут вижу только нарушение общей логики монтирований уирд без ощутимых плюсов. Ну или, как вариант, до сих пор вас не понял.

Это в вашем варианте как раз по правилам

Папку syschanges сделал для наглядности.

И Changes у вас находятся не в корне раздела а в ~ changes/changes

ЗЫ
Вы хоть читаете что я пишу ?
Нет времени, так у меня то же его мало.

Именно так. Это обход проблемы с workdir. Где по вашему должен находиться workdir если /dev/sda1 монтировать сразу в /memory/changes? Я ревльно вас не понимаю. Объясните уже словами, а не кусками логов.

Вся логика от UIRD.
А когда в системе болтается 3 папки changes это как раз верх совершенства.

Уже все сказал. И словами и логами. Осталось только спеть или сплясать

Видно что forum занят да так, что особо то и не читал мои объяснения
Ну у меня то же времени нет заниматься глупостью.
Теперь точно тема закрывается. Ее можно удалить.

На aufs мы пишем uird.changes=changes, пусть будет syschanges, как у вас, не суть. Вы убрали лишнее монтирование и теперь на overlay вы пишете uird.changes=syschanges/changes.
И теперь, если вместо syschanges у вас корень диска, то uird.changes будет равен, например, /dev/sda1/changes или LABEL@/changes.
Не знаю поняли вы или нет, но лишнее монтирование добавлено для того, чтобы можно было писать, как и раньше, просто uird.changes=changes, для диска uird.changes=/dev/sda1, не указывая дополнительно UPPERDIR. То есть независимо от используемого UNIONFS uird.changes=changes будет работать. В вашем же случае uird.changes=changes на overlay выдаст ошибку (или нет?)

Я запускаю систему с диск
Ваш вариант

AUFS
uird.changes=changes
Это у меня /memory/layer-base/0/changes и тут пишутся изменения

Overlay
uird.changes=changes
Это у меня
/memory/layer-base/0/changes/changes - тут пишутся изменения
/memory/layer-base/0/changes/workdir

Если OVERLAY=/memory/layer-base/0/changes
То Overlay соберет систему
mount -t overlay -o ......,upperdir=${OVERLAY}/changes,workdir=${OVERLAY}/workdir overlay $LUNION

Но у вас, как я понял, папка /memory/layer-base/0/changes монтируется в /memory/ovl
И уже /memory/ovl/changes монтируется в Overlay
Так то ничего страшного и все работает, но просто лишняя операция.
И Overlay в /memory странновато смотрится
Так как путь ~/changes/changes для поисковых систем сложен и порою непредсказуем я и задал
uird.changes=syschanges

Но в AUFS изменения стали писаться в /memory/layer-base/0/syschanges

Мой вариант

1) /usr/share/uird/modules.d/00uird/livekit/uird-init
OVERLAY=$MEMORY
2) /usr/share/uird/modules.d/00uird/livekit/livekitlib

  • Удалил формирование /memory/ovl
  • в setup_changes() изменения (измененная часть)
	local FPARS UMODE CHANGESVAL SOURCE CHANGESMNT
	debug_log "setup changes" "$*"
	UMODE="$(getpar $UIRD_MODE 1 1)"
	[ "$UMODE" != "changes" -a "$UMODE" != "clear" -a "$UMODE" != "hybrid" ] && return

	CHANGESVAL=$(getpar $UIRD_CHANGES 1 1 )
	DATA_CHGS=$(find_data "$CHANGESVAL" "$1"  "$FPARS" )
	mkdir -p $DATA_CHGS/changes
	OVERLAY="$DATA_CHGS"
	if [ "$UNION_FS" = 'overlay' ]; then
	rm -rf $DATA_CHGS/workdir /memory/workdir
	mkdir -p $DATA_CHGS/workdir
	mkdir -p  /memory/workdir
	fi
	FPARS="/tmp/parameters/$UIRD_CHANGES/1" 
	[ -z "$CHANGESVAL" ] && CHANGESVAL="changes"
	
	echo_green_star
	echolog "$SETUP_CHANGES" $brown"$2"$default

	if ! echo "$CHANGESVAL" | grep -q [XxLl][Zz][Mm]$; then
		log "mount_data_source $CHANGESVAL $2 $1  "$FPARS""
        mount_data_source $CHANGESVAL/changes $2 $1 "$FPARS"
	else

Поиск задал отдельно в DATA_CHGS=…
Так как не смог разобраться с mount_data_source()
Крутая прога и мудреная но стр 1782 задал на всякий случай так

[ ! -d "$DST_DIR" ] && mkdir -p $DST_DIR

Ну и все правки и кода я не тронул.

3 ) Изменения /usr/share/uird/modules.d/00uird/shutdown-uird.sh

 if [ -d ${SYSMNT}/workdir ] ; then
		UNIONFS=overlay
		SRCWORK=${SYSMNT}/workdir
		DEFSRC=${SYSMNT}/changes
fi

PS
Задаю
uird.changes=syschanges

AUFS
uird.changes=syschanges
/memory/layer-base/0/syschanges/changes - тут пишутся изменения

Overlay
uird.changes=syschanges
/memory/layer-base/0/syschanges/changes - тут пишутся изменения
/memory/layer-base/0/syschanges/workdir - для Overlay

Извините но я тут не виноват. Все заработало без /memory/ovl
Скачать - UIRD для Магеи
Собран на ядре - 6.1.6-desktop-1.mga8