Концепт режима сохранения в модуль

У меня проблем с чистым mount нет. Просто сейчас вот никаких нет
Не вижу смысла в его замене
Ну так и закончим наверно обсуждение.

То есть нет такого кейса?

Извините за бестолковость но что то о кейсе не понял.

Вот ваше монтирование

mount -t aufs -o br:$SRC=rw:${AUFS}-bundle=ro+wh aufs $AUFS

Конфиги модулей

XZM0=mac-dc0ea1fbbb19.xzm
MODE0=‘mount’
REBUILD0=‘yes’

XZM1=wh.xzm
MODE1=‘copy’
REBUILD1=‘yes’
ADDFILTER1=’.wh.’

А тени то откуда будут копироваться в модуль XZM1
Первая запись с /memory/changes и там тени есть

Вторая запись вероятно с $AUFS
А там уже теней нет
И запись ${AUFS}-bundle=ro+wh вроде как не помогает

Тени в ${AUFS} есть когда монтирование

mount -t aufs -o shwh,br:$SRC=rw:${AUFS}-bundle=ro aufs $AUFS

Или тени в XZM1 и во второй и далее записей будут копироваться с /memory/changes ?

Так мне тени в ауфс и не нужны. Первый модуль собирается из ауфс собранной из старого модуля и /memory/changes. В него тени не попадают, потому что не позволяют параметры монтирования.
А второй модуль в режиме copy и он собирается не из aufs, а из /memory/changes напрямую и в него попадают все тени которые есть в /memory/chanages на момент сборки. Но не попадают другие файлы, потому что не подходят под фильтр ‘.wh.’. Я из /memory/changes не удаляю ничего и сколько бы секций не собиралось им всем достанется нетронутый /memory/changes.

То есть еще раз, если модуль был смонтирован при старте, то он пересобирается из ауфс, а если скопирован то из changes. Ауфс всегда новая, для каждого пересобираемого модуля. /memory/changes всегда неизменный для каждого пересобираемого модуля.

Другими словами существует ли в природе такая ситуация когда с вашим вариантом будет работать корректно, а с toxzm - нет.

Однако я нашел автора вашей тенеудалялки :slight_smile:
http://forum.puppyrus.org/index.php?topic=16558.msg165016#msg165016

Тут вероятно вопрос сможет ли toxzm блокировать тени в XZM0 через DROPFILTER0
Но зачем тогда тени в $AUFS когда их надо будет потом блокировать ???
Вроде действительно бессмыслица какая то. И ничего хорошего тут вероятно не будет.
Т к вас все же как бы комбинированный режим то назвать его допустим mount-copy
У меня же чистый mount. И назвать его проcто mount
И для каждого режима свой вариант монтирования
Так можно сделать ?

Не нужно этого делать в XZM0 не будет теней, так как их нет в точке монтирования ауфс, которая и пакуется. Или вы тут про свой вариант монтирования?

Думаю нет. После вашего WHDELL уже нет чистого /memory/changes.

Но /memory/changes WHDELL не чистит. Это проверено отсутствием логов при первом запуске
В первом варианте WHDELL чистила /memory/changes
В последнем я это исправил

То есть /memory/changes это ro слой, а поверх есть еще rw?

Запускаю его из стр 146 из shutdown-uird.sh

	if [ -f "$SAVETOMODULENAME" -a "$MODE" = "mount" ]; then
		echolog "Old module exists, we have to concatenate it"
		AUFS=/tmp/aufs
		mkdir -p $AUFS ${AUFS}-bundle
		mount -o loop "$SAVETOMODULENAME" ${AUFS}-bundle
		mount -t aufs -o shwh,br:$SRC=rw:${AUFS}-bundle=ro aufs $AUFS 
		[ $? == 0 ] && SRC=$AUFS
                    WHDELL
                    WHDELL
	fi

Ну обозвать режим допустим mount2, тогда первая строка будет

if [ -f “$SAVETOMODULENAME” -a “$MODE” = “mount2” ]; then

А “$MODE” = “mount” это уже будет ваше монтирования

Особого смысла так и не вижу, но и мешать по идее не должно если сделать отдельный MODE под это дело. Например MODE0=mount+wh.
Нужно только удостовериться, что не портит /memory/changes иначе остальное сломает.

Если работает WHDELL то пишутся логи в /memory/layer-base/0/optional/whtoxzm.log
При таком запуске логов не было
Так что точно не чистит /memory/changes. Т к там зависших теней и быть не должно и чистить нечего

Как это доказывает что WHDELL удаляя тени из AUFS не удаляет их из /memory/changes. Нужно менять строку монтирования, так чтоб /memory/changes был ro, поверх него пустая папка rw, которая и будет аккумулировать изменения в aufs. Как-то так.

$AUFS это образ от /memory/changes и прежний файл сохранения
Особо не разбирался.
А где здесь /memory/changes

mount -t aufs -o shwh,br:$SRC=rw:${AUFS}-bundle=ro aufs $AUFS

Вот он.

Ну вроде заработало. MODE0=mount+wh
Надеюсь ничего не сломал.

Режим рабочий, но боюсь с ограничениями. Shwh в строке монтирования это SHow WHiteout, то есть - показать тени. В этом режиме ауфс не обрабатывает тени, а просто показывает все что есть, как обычные файлы. Алгоритм ДядиШурика работает так: Если в ауфс есть и файл и его тень, то дальше анализируются ченджез и “старый” модуль. Проверяется только наличие файла, не тени. Если файл в ченджез то удаляется тень, если а старом модуле то удаляется файл. В нашем случае вместо удаления дописываем в ексклуды mksquashfs. Все работает на предположении, что если файл не в ченджез и не в “старом” модуле, то он ниже старого модуля и делать ничего не нужно. В схеме toxzm модулей может быть больше одного и не факт, что именно этот последний.
То есть скорее всего режим можно использовать но с ограничениями. В идеале когда секция всего одна, как поведет себя в сочетании с другими предположить сложно.

То же пробовал - https://cloud.mail.ru/public/4dnk/n5s3MaEhF
Здесь измененные скрипты и логи тестирования

Но у меня почему то имя **mount+wh**  не воспринял uird.toxzm_mode

Сказал синтактическая ошибка. Пробовал mount_wh и то же самое
В итоге обозвал mountwh

Сделал монтирование в shutdown-uird.sh в mountwh и добавил

> 	if [ -f "$SAVETOMODULENAME" -a "$MODE" = "mountwh" ]; then

Само монтирование как у 81-savetovodule

mount -t aufs -o shwh,br:$AUFS-rw=rw:$SRC=ro:${AUFS}-bundle=ro aufs $AUFS

Если встречается
file + .wh.file = .wh.file
То file автоматически нигелтруется в aufs

Если встречается в aufs образе для записи тень от старого модуля и file ченджез
.wh.file + file = .wh.file + file

То это и есть проблемная ситуация
Тень будет висеть т к aufs образе для записи оторван от корня и ей не с чем нигелироваться
И WHDELL ищет тень и если находится файл в образе то тень удаляется
Но ченджез WHDELL не трогает
При первой чистой записи WHDELL вообще не работает т к в ченджез теней не может быть по определению

uird.toxzm_mode

Проделав вышеописанное попробовал запуститься и предыдущие записи не сохранялись.
В итоге добавил mountwh все как у mount
Но только без монтирования

  	if [ "$MODE" = "mountwh" ] ; then
  		BUN="$(basename "$MODNAME")"
  		if [ "$(getpar toram)$(getpar $UIRD_COPY2RAM)" ] ; then
  			mkdir -p "$5"
  			cp "$MODNAME" "$5"
  			log "$BUN to RAM"
  			echo -ne $yellow"  RAM"$default
  			MODNAME="$5/$BUN"
  		fi
  		mkdir -p "$3/$BUN"
  		FS="$(device_bestfs "$MODNAME")"
  		OPTIONS="$(fs_options $FS mount)"

#. mount -o $OPTIONS $FS “$MODNAME” “$3/$BUN”
#. mount -o remount,add:1:"$3/$BUN"=ro+wh aufs “$4”
#. [ $? -eq 0 ] && echolog " $blue–>" $purple"$MODNAME"$green" [Mount mode] "$default
fi

Сейчас у меня все работает.
Вроде как разновидность режима none
Модуль пишется но не монтируется

ЗЫ
За вами то и не угонишься.
Может устарело но все же вдруг инфа будет полезна
Пробовал задавать задержку, что бы посмотреть логи и появились проблемы
Задавал 10 сек и 5 сек
И пропадали тени из модуля записи.
Так что хорошо что я сделал запись логов работы WHDELL в /memory/layer-base/0/optional/uird-log

На счет wh_exclude из shutdown-uird.sh

Стр 54

if [ -e ${SYSMNT}/changes/$F ] ; then

Работает некорректно в среде uird. В системе все ок
С одиночными .wh.file + file справляется
Прбовал выключать из systemd сервис cups ( тут три тени формируется) с выключением и записью модуля так if [ -e не справилась
Выручил find

 F=$(echo $WHF | sed s/.wh.//g)
 FS=$( find  "$F" -print 2>/dev/null )
 if [ -n "$FS" ] ; then