По идее на больших списках должно работать в разы быстее чем цикл фор, тем более с find внутри. На небольших может наоборот медленнее работать, но не думаю что заметно. Но надо проверять. Ингваро, прогоните на своих проблемах с cups. С простым тестом прошло вроде нормально.
З.Ы. Можно еще ускорить немного если обойтись без временных файлов.
За вами то и не угонишся
У меня модифицированный DdShurick работает
wh_exclude() {
echo ‘’ > /tmp/wh_exclude
find $1 -name ‘.wh.*’ |sed “s:$1::” | while read WH ; do
F=$(echo $WH | sed ‘s/.wh.//g’)
FS=$( find “${SYSMNT}/changes”"$F" -print 2>/dev/null )
#. if [ -e ${SYSMNT}/changes/$F ] ; then
if [ -n “$FS” ] ; then
echo $WH >> /tmp/wh_exclude
echo “” >> /tmp/wh_files
echo “F=$FS” >> /tmp/wh_files
echo “WH=$WH #delete” >> /tmp/wh_files
else
echo ‘’ >> “$LOGUIRD/wh_exclude.log” && echo “WH=$WH” >> /tmp/wh_files
#. elif [ -e $2/$F ] ; then
#. echo $F >> /tmp/wh_exclude
fi
done
}
Для удаленных теней выводится в логи найденный файл тени а сама удаленная тень отмечается как #delete
Все !!! Зависших теней нет. Даже как то пусто стало и уныло
Фильтры у меня в Магее стали теперь со слэшем (было без слэша)
Пробовал задать
Заблокировал в фильтре /usr/share/plymouth/themes/breeze-magosm
Теперь у меня получился полноценный toxzm и Plymouth даже работает
Но как то нетрадиционно для меня.
Я всегда изменения писал да магос-модуля
Т е старался разделить систему и магос. И я мог, например, на одной сборке делать два запуска.
Магеиа-МагОС и LiveDVD для Магеи
И то же самое для Убунту
Пробовал установит конфиг для toxzm в /memory/layer-base/0
Теперь я могу задать запись модуля в любую папку. Допустим
XZM0=/toxzm/uirdsave.xzm
или
XZM0=/base/uirdsave.xzm
или
XZM0=/machines/uirdsave.xzm
Вывод логов понравился. Информативно, емко и все в одном месте
file + .wh.file = .wh.file
это file с предыдущей записи
И свежий .wh.file из /memory/changes
То file автоматически нигелтруется в образе aufs
Т е нечего удалять
Если встречается
.wh.file + file = .wh.file +file
То есть .wh.file с предыдущей записи
И свежий file из /memory/changes
Тут то .wh.file и надо удалять
Проверял раньше на тесте эти ситуации
Ну и пршел тест для проблемного сервиса cups
модифицированный DdShurick работает просто
Находится тень и если в образе сборки находится файл тени то тень удаляется
Поиск файла мне пришлось сделать на find
Т к условие if [ -e … ] работало у меня в Магее некорректно
Скорее всего basybox не так собрался
При монтировании с shwh тени не работают. Ауфс их рассматривает как обычные файлы. То есть если в одном слое файл, а в другом его тень в ауфс будет и файл и его тень. Если мы запакуем это в модуль то получим модуль в котором есть файл и его тень. Это не допустимо. Получается, что либо файл либо тень нужно перед запаковкой удалить (отфильтровать).
Если файл в ченджез то удаляем тень.
Если файл в старом модуле удаляем файл.
Во всех остальных случаях в shwh ауфс будет либо файл, либо тень. Это нормально и ничего делать не нужно.
P.S. Похоже был не прав. Если файл “накрыт” тенью то файла не будет в ауфс. То есть удалять надо только тени файл исчезнет сам.
А он и не удалится. И чего делать бедному ауфсу когда он видит тень и файл в одном и том же слое? Имею виду ауфс в uird, не shwh. Такую ситуацию допускать нельзя.
Только провел тест. Опять же на проблемном cups
Где uirdsave.xzm мой модуль сохранения
Деактивировал cups из systemd. Выключился с сохранением
В /memory/bundles/uirdsave.xzm/etc/systemd/system появились тени cups
Активировал cups в systemd. Выключился с сохранением
В /memory/bundles/uirdsave.xzm/etc/systemd/system появились файлы cups
Если снова деактивировать cups из systemd то должны в модуле сохранения быть и файлы и тени
Деактивировал cups из systemd. Выключился с сохранением
В /memory/bundles/uirdsave.xzm/etc/systemd/system появились тени cups
Файлов cups нет
Активировал cups в systemd. Выключился с сохранением
В /memory/bundles/uirdsave.xzm/etc/systemd/system появились файлы cups
Теней cups нет
mageia printer.target.wants # systemctl status cups
● cups.service - CUPS Scheduler
Loaded: loaded (/usr/lib/systemd/system/cups.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-02-05 15:03:31 MSK; 16min ago
Docs: man:cupsd(8)
Main PID: 7845 (cupsd)
Status: “Scheduler is running…”
Memory: 5.2M
CGroup: /system.slice/cups.service
Если вы на счет удаления файла, то тест должен быть не таким.
Создаете файл, к примеру /usr/111, перегружаетесь. Файл в модуле. Удаляете файл и снова перегружаетесь. Смотрите что у нас в системе, есть ли файл. И главное смотрите что в модуле. Там должна быть только тень. Если в модуле и файл и тень то все работает не правильно и ждите грабли типа тень-тени или еще чего. Если тень еще и в системе видна то всё, кранты, сушите весла :))
Тут мысль пришла.
Все мои рассуждения о файлах и тенях относится к ситуации когда файлы и их тени генерирует система ( в частности Магеиа в моем случае).
AUFS каким то непонятным для меня образом различает тени верхнего ровня, т е сделанные системой. И тени нижнего уровня
Если в модуле удалить .wh…wh.aufs то локальные тени нигелируются.
Тени верхнего уровня останутся.
А может она и файлы то же различает ?
Возможно когда файл генерируется локально ( в uird или в pfs), то ситуация может быть и такая
file + .wh.file = file + .wh.file
Т е действительно может оказаться что файл из старого модуля не удалится тенью из /memory/changes. Т к тень системная а файл из старого модуля может быть локальным
Но я стараюсь не “влазить” сильно в систему и поэтому то таких ситуаций у меня вероятно нет
Т е строчки
Ок. Спасибо.
Надо на днях наметить варианты которые надо протестировать. Постепенно проверять и вычеркивать. Ну или чинить и вычеркивать.
А то часто бывает, что одно чинишь другое отваливается.
На свежем варианте на reboot система ругается.
По виду вроде в команде какой то опции для Магеи не подходят
Но все так быстро что не успеваешь разглядеть
И как тут быть ?
Можно ли из системы выключиться в режиме debug
Еще reboot в Магее записывает модуль в toxzm
Это баг toxzm или мне систему надо настроить что бы писала в конфиге
Добавляете в разные места скрипта /bin/ash и вычисляете на каком месте сбоит.
Для продолжения работы скрипта - exit.
Можно добавлять read qqq например или sleep 5
Тестировал на днях режим mount+wh в shutdown-uird.sh
В wh_exclude есть стр
~ > /tmp/wh_exclude
Однако в логах wh_exclude не появляются. Но зависшие тени при этом нормально удаляются
Сделал свой вариант wh_excludehttps://cloud.mail.ru/public/4dnk/n5s3MaEhF
Тут и логи появляются и з. тени удаляются
Только /tmp/wh_files это у меня все тени присутствующие в модуле
Инфа полезная. Я уже нашел, благодаря ей, ошибки в других скриптах.
Тестировал на днях режим mount и none в shutdown-uird.sh на тесте с сервисом cups из systemd.
Удалил из системы и выключился с сохр. В модуле записи появились тени
Активировал сервис cups из systemd и выключился с сохр. .
В модуле записи появились файлы теней нет
Судя по логам wh_exclude не работает но зависшие тени удалились .
Что то зря что ли делали mount+wh ?
Как бы да. Специально для Вас. Плюс только в том, что модуль один.
Заьо натолкнуло на мысль как склеивать модули в mkpfs, так чтоб тени сохранялись. Уже вроде работает, подробности у паппирусов в форуме.
Опять же мой модифицированный DdShurick
Для порядка включил запись запрета в wh_exclude не только тени но и файла тени
Работает так:
Если в $1 есть file +.wh.file
wh_files - список всех теней в модуле. Отдельно отмечаются удаленные тени и присутствует
файл удаленной тени. Инфа может и избыточная, но компактная и более удобная в восприятии
PS
Режимы mount и mount+wh по виду различаются только тем что у mount+wh у меня выводятся дополнительные логи
При проведении тестов, в записываемом модуле, различий не обнаружено
Ну и в mount+wh все в одном модуле и легче анализировать