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

Cвежая версия toxzm выдерживала вроде 3 -4 попытки записи. Но точно не помню
Но на предыдущей версии toxzm это было при где то на 6 попытке

И после правки у меня даже записался сбойный модуль

Вот закоментированные строчки из shutdown

_cnt=0
while [ $_cnt -le 40 ]; do
umount_a 2>/dev/null || break
_cnt=$(($_cnt+1))
done

[ $_cnt -ge 40 ] && umount_a

Что за переменная _cnt ?

Счетчик. Дается 40 попыток на отмонтирование.

Не пойму как этому анмоунту удается размонтировать aufs чтоб размонтировать /memory.

В чем проблема в общем понятно, но решение не очень подходящее. Скрипт shutdown не наш, он из дракута. Лезть в в него не правильно. Понять бы при каких условиях становится возможным размонтирование, может нашли бы как обойти. Я до сих пор такого не встречал.

С другой стороны для дракут uird вероятно чужой процесс, который надо обнулить.
Вероятно сам дракут надо проверить.

Наш скрипт для дракута - хук. Это штатная возможность дракута запускать пользовательские скрипты в этом месте. Проблема, как я понимаю, в том, что при определенных условиях скриптам дракута удается размонтировать /memory, чего раньше не случалось. Я такого до сих пор не видел.

Вероятно 40 попыток на отключение системы ?
Вроде как аварийное отключение системы.

Вероятно это все тот же злополучный сервис cups
При отключении его из системы формируется три тени

Именно на umount_a, на наш скрипт тоже 40. Циклы выполняется пока не завершится удачно либо пока количество попыток не достигнет сорока.

Маловероятно что именно он виноват.

А где можно обнулить этот счетчик
Т е где задать

_cnt=0

Может он где то запоминается и, как в моем случае, при 6 попытке записи лимит кончился ?

Нет :slight_smile:
Это тупо попытки запуска функции или скрипта в случае нашего. Всегда с 0 начинается.

Это все следствие. Причина что если модули от toxzm монтируются в системе то их временами скрипам от toxzm не удается отмотировать. Пишет что модуль занят. Почему это так я и не понял.
Дракут работает как положено
Старая версия toxzm почему то лучше справляется с отмонтированием ( сбой на 6 цикл записи)
Свежая версия сбоит на 2 или 3 цикл записи
Дело в том что я удалил скрипты из /usr/lib/magos/rc.halt и /usr/lib/magos/rc.halt.pre
И возложил отключение системы на toxzm. Но видимо так делать не стоит
Восстановил деактивирование модулей в rc.halt и все ок !
Бага нет и даже в свежей версии toxzm !!!

Вы обе папки удаляли? Хочу попробовать разобраться.

В /usr/lib/magos/rc.halt.pre/ оставил только 10-shutdown
Это запуск $HALTSERVICESSTOP и $HALTPROCESSESKILL
А так все

  1. Непонял стр из /run/initramfs/usr/lib/dracut/hooks/shutdown/99-shutdown-uird.sh

#umount bundles
IMAGES=/oldroot${SYSMNT}/bundles
egrep “$IMAGES” /proc/mounts | awk ‘{print $2}’ | while read a ; do
mount -t aufs -o remount,del:"$a" aufs /oldroot
if umount $a ; then
echolog “[ ${green}OK${default} ] Umount: $a”
else
echolog “[${red}FALSE!${default}] Umount: $a”
fi
done

Вроде как модули монтируются в /oldroot

mount -t aufs -o remount,del:"$a" aufs /oldroot

Но там никаких модулей нет, а все оказывается примонтировано в /memory
Но если удалить эти стр то и модуль не пишется и папки /oldroot и /memory пустые

Эта строчка отмонтирует слои от aufs. Здесь /oldroot это старый корень, то есть точка монтирвания aufs.

А это размонтирует squashfs модуля.

Тестирование toxzm на - https://forum.mageia.org.ru/viewtopic.php?id=1303

Мой uirdsave.cfg (/memory/layer-base/0/uirdsave.cfg)

XZM0=toxzm/base0.xzm
MODE0='mount+wh'
REBUILD0='yes'
ADDFILTER0='/boot /etc /opt /root /usr /shares /var'
DROPFILTER0="$(cat /memory/layer-base/0/optional/base-filtr)"

XZM1=toxzm/home0.xzm
MODE1='mount+wh'
REBUILD1='yes'
ADDFILTER1='/etc /home'
DROPFILTER1="$(cat /memory/layer-base/0/optional/home-filtr)"

Где XZM0 это системные изменения
А XZM1 это пользовательские изменения
Запись ведется в папку /memory/layer-base/0/toxzm

Причем toxzm у меня уже основной в сборке и других методов записи нет.
Пишет изменения toxzm довольно быстро, но вот подготовка списка файлов для исключения из модуля записи может затянуться и сам процесс записи может подвиснуть
Но надо отдать должное. Висит toxzm столько сколько нужно и преждевременных
отключений процесса записи не наблюдалось

Для XZM1 (пользовательские изменения) проблему удалось решить чисткой $HOME/.cache/mozilla
Но чистить надо в /memory/changes, т к если чистить в корне сборки то появятся тени в модуле записи

Ну а с XZM0 (систмные изменения) особо не разбирался,

А если фильтровать этот кэш не ускоряется?

Что за /shares - опечатка?

Не пробовал, но по идее можно фильтровать папку $HOME/.cache/mozilla
Скрипт для чистки у меня был сделан ранее и он чистит все кэши распространенных браузеров
Но чиска папок из /memory/changes может не совсем правильно но дает нормальный результат

Задержки в XZM0 (систмные изменения) у меня были связаны в основном с обновлениями системы, кот писались через toxzm.
Обновляю редко и поэтому беспокоит не так сильно

Это у меня шары для samba
В Магее они изначально были в $HOME
Но писать туда неудобно, т к $HOME у меня это пользовательские изменения
А samba это вроде системные изменения

К сожалению надо только удалять, т к скрипт
/run/initramfs/usr/lib/dracut/hooks/shutdown/99-shutdown-uird.sh в стр 204

find $SRC/ -type d | sed 's|'$SRC'||' | while read a ;do
grep -q "^$a" /tmp/includedfiles && continue
echo "$a" | grep -vf /tmp/savelist.black | grep -qf /tmp/savelist.white && continue
echo "$a" >> /tmp/$n/excludedfiles
				done

Пишет список удаляемых файлов. Это и дает задержку
Не совсем понятна логика работы. Т к если я удаляю папку $HOME/.cache/mozilla из процесса записи модуля, то зачем же мне список содержимого папки mozilla ?
А так нет файлов то и нет и проблемы

Надо подумать как ускорить создание списка.

Вроде сделал
shutdown-uird.sh - https://cloud.mail.ru/public/4zmV/4Sc3RyL45
Положить его надо в /usr/share/uird/modules.d/00uird/shutdown-uird.sh для конфигурирования загрузчика
Или переименовав как 99-shutdown-uird.sh в /run/initramfs/usr/lib/dracut/hooks/shutdown
И просто проверить работу при выключении системы

Заменил

на

        find $SRC/  -maxdepth 1  | sed 's|'$SRC/'||'  > /tmp/changesfiles
        for a in $ADDFILTER ;do
        sed -i s/$a//  /tmp/changesfiles 2>/dev/null
        done
       echo "$(cat /tmp/changesfiles)"  >> /tmp/$n/excludedfiles
      rm -f /tmp/savelist.white /tmp/savelist.black /tmp/includedfiles  /tmp/changesfiles

PS

  • Удаленные строки часто дублировали исключения в /tmp/$n/excludedfiles
    Т е список исключений возможно конфигурировался как минимум два раза
  • Предложенные строки делают список исключений неразрешенных папок и файлов из папки /memory/changes. Список разрешенных папок берется из ADDFILTER
  • Непонятно список файлов из фильтра в DROPFILTER должны быть со слэшем (/) или без него
    У меня теперь идут оба варианта. Ну оставил без слэша.
  • ADDFILTER получился без слэша. Иначе не получилось
XZM0=toxzm/base0.xzm
MODE0='mount+wh'
REBUILD0='yes'
ADDFILTER0='boot etc  opt root run usr shares var'
DROPFILTER0="$(cat /memory/layer-base/0/optional/base-filtr)"

XZM1=toxzm/home0.xzm
MODE1='mount+wh'
REBUILD1='yes'
ADDFILTER1='etc home'
DROPFILTER1="$(cat /memory/layer-base/0/optional/home-filtr)"
Где XZM0 это системные изменения
А XZM1 это пользовательские изменения
Мой uirdsave.cfg  лежит в   /memory/layer-base/0/
Запись ведется в папку /memory/layer-base/0/toxzm

Не шедевр и еще тестировать надо. Пишет две пустые строки и их не смог удалить, но создание списка. теперь идет достаточно быстро
Обновил ядро на Магее и нормально выключился с сохранением