Думал над тем как сохранить тени при склейке модулей. Если и файл и тень в склеиваемых модулях то проблем нет ауфс разберется, а если тень от файла которого в источниках нет, то она просто исчезнет, а она может быть нужна. Такая ситуация может быть при склейке сохраненок в которых есть тени для файлов из системных модулей.
Вариант 1. По сценарию mksavexzm. С shwh ауфс. Только все сильно усложнится из-за количества слоев. Если вариант ДядиШурика я переписал без циклов, то тут думаю не получится и все будет очень медленно. И нужно будет в mkpfs оба варианта монтирования ауфс делать. Не айс.
Вариант 2. Зайти с другой стороны. Монтировать ауфс как обычно, а потерянные тени искать в бандлах. Но тут другая проблема, как это потом запихать в модуль. Расчитывал на возможность дописывать в сквош, оказалось это работает совсем не так как я ожидал. Пока сделал чтоб собирался отдельный модуль с потерянными тенями.
Нужны идеи!!!
Вот кусок mkpfs v4 начиная со 180 строки и до конца. Код возможно кривой, просто для эксперимента.
lost_wh() {
mkdir $SYSMNT/lost_wh$N
find $SYSMNT/bundles$N |sed "s:$SYSMNT/bundles$N/[^/]*/:/:" > $SYSMNT/lost_wh$N/allfiles
((cat $SYSMNT/lost_wh$N/allfiles |grep /.wh.* |sed 's/.wh.//' ; cat $SYSMNT/lost_wh$N/allfiles ) \
|sort |uniq -d |sed -r 's:(/.*/)(.*):\1.wh.\2:' ; cat $SYSMNT/lost_wh$N/allfiles |grep /.wh.* ) |sort |uniq > $SYSMNT/lost_wh$N/lost_whiteout
mkdir $SYSMNT/lost_wh$N/whiteouts
curpwd=$(pwd)
for a in $(cat $SYSMNT/lost_wh$N/lost_whiteout) ; do
adir=$(find $SYSMNT/bundles$N |grep -m1 $a | sed -r "s:($SYSMNT/bundles$N/[^/]*/)(.*$):\1:")
cd $adir
cp --parents .$a $SYSMNT/lost_wh$N/whiteouts/
done
cd $curpwd
[ $(ls -A $SYSMNT/lost_wh$N/whiteouts/ |wc -l) -ne 0 ] && echo $SYSMNT/lost_wh$N/whiteouts/
}
[ $TRIM ] && trim $n
w=$(lost_wh)
if echo ${userout} | grep -q "^.*\.$EXT$" ; then
mksqmod "${n}" "${userout}" noexit
mksqmod "${w}" "lost_wh_${userout}" noexit
else
echo "Please wait..."
rmdir ${userout} 2>/dev/null
if [ -d "${userout}" ] ; then
delaufs "$nn"
exitmsg "Output diectory already exist" 6
fi
mkdir -p "$(dirname ${userout})"
cp -fax "${n}" "${userout}"
cp -fax "${w}" "lost_wh_${userout}"
fi
rm -rf $SYSMNT/lost_wh$N 2>/dev/null
exitmsg "mksqmod error" $? noexit
delaufs "$nn"
exitmsg "delaufs error" $?