Сайт | Скачать | Видео | Wiki

Автор Тема: mkpfs -w (тени)  (Прочитано 9834 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: mkpfs -w (тени)
« Ответ #30 : 08 Февраль 2020, 11:22:41 »
А если начать так
Код
find $SYSMNT/bundles$N -name .wh.*|sed "s:$SYSMNT/bundles$N/*/:/:" 
и сразу завернуть в цикл
Код
while read w; do
  file=$(echo $w|sed 's:.wh.::g')
  [ -f $aufsroot$name ] || continue
  mkdir -p $builddir$(dirname $file)
  touch $builddir$w
done
где aufsroot это корень дополнительной aufs, builddir - сборочный каталог контейнера.
Примерно такая вот идея...
« Последнее редактирование: 08 Февраль 2020, 11:30:52 от DdShurick »
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: mkpfs -w (тени)
« Ответ #31 : 08 Февраль 2020, 12:16:19 »
 У контейнера нет сборочного каталога, он собирается из ауфс напрямую. Создать в ауфс тень невозможно. Попробуйте например:
> /.wh.bla-bla
Если корень в ауфс, то файл создать не даст.
Если будет слишком сложное или не надежное решение, то лучше оставить как есть. Давайте еще варианты подумаем.
Да, и mkdir для папки в которую переносим тень тоже плохо. Права на папки потеряем, по этому извращался с cp -parents
« Последнее редактирование: 08 Февраль 2020, 12:18:48 от betcher »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: mkpfs -w (тени)
« Ответ #32 : 08 Февраль 2020, 13:50:04 »
Создать в ауфс тень невозможно. Попробуйте например:
> /.wh.bla-bla
Код
# > /.wh.bla-bla
bash: /.wh.bla-bla: Операция не позволена
# mkdir builddir
# touch builddir/.wh.bla-bla
# ls -a builddir/
.            ..           .wh.bla-bla
Значит надо сначала "cp -a aufs_root/* builddir/ ", потом добавить туда тени и только после этого "mksquashfs builddir"
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: mkpfs -w (тени)
« Ответ #33 : 08 Февраль 2020, 16:04:20 »
Значит надо сначала "cp -a aufs_root/* builddir/ ", потом добавить туда тени и только после этого "mksquashfs builddir"
Да, вариант. Но мне кажется нашел более хитрый ход, при этом с минимальными изменениями кода mkpfs и pfs.
Вот собственно что добавил, плюс пару строк в pfs.

Код
if [ $WH ] ; then
find $n |sed "s:$n/::" > /tmp/allfiles-wh
mount -t aufs -o remount,shwh $n
for line in $(find $n  |sed "s:$n/::" |sed 's:/.wh.:/:' |sort |uniq -d) ; do
if grep -q $line /tmp/allfiles-wh ; then
echo $line |sed -r 's:(^.*/)(.*$):\1.wh.\2:' >> /tmp/mkpfs_excludes
else
#это возможно не нужно
echo $line  >> /tmp/mkpfs_excludes
fi
done
rm /tmp/allfiles-wh
fi

С ключем -w сохраняются все тени, кроме тех, что "накрыты" файлом. То есть получается так ( W - тень F - файл, X - ничего):

F - W --> W
W - F --> F

F - X   --> F
X - F   --> F

W - X  --> W
X - W  --> W

ну и
X - X   --> X 

На большем числе слоев аналогично, тут важно только что выше в стопке ауфс.
Запушил в v4, просьба проверить, надеюсь с логикой не напутал нигде.
З.Ы. параллельно сохраняются артефакты ауфс если они были в корне, надо наверное их в trim дописать.


Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: mkpfs -w (тени)
« Ответ #34 : 08 Февраль 2020, 16:50:10 »
Код
find $n  |sed "s:$n/::" |sed 's:/.wh.:/:' |sort |uniq -d
Код
find $n  |sed "s:$n/::;s:.wh.::g' |sort |uniq -d
Обработает и ".wh..wh."
Код
echo $line |sed -r 's:(^.*/)(.*$):\1.wh.\2:'
Не пойму, что должно получиться на выходе
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: mkpfs -w (тени)
« Ответ #35 : 08 Февраль 2020, 17:05:29 »
Обработает и ".wh..wh."
Нет. Надо?
Не пойму, что должно получиться на выходе
Из имени файла делает имя тени.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: mkpfs -w (тени)
« Ответ #36 : 08 Февраль 2020, 17:23:23 »
Нет.
Код
# echo .wh..wh.qwerty|sed 's:.wh.::g'
qwerty
Из имени файла делает имя тени.
Код
# echo qwerty|sed -r 's:(^.*/)(.*$):\1.wh.\2:'
qwerty
Тогда уж
Код
grep \.wh\.$line /tmp/allfiles-wh > /tmp/mkpfs_excludes
и никакого цикла.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: mkpfs -w (тени)
« Ответ #37 : 08 Февраль 2020, 17:23:30 »
find $n  |sed "s:$n/::;s:.wh.::g'
Обычно делаю sed -e 'бла-бла' -e 'бла-бла',  это аналогично?
« Последнее редактирование: 10 Февраль 2020, 15:11:53 от betcher »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: mkpfs -w (тени)
« Ответ #38 : 08 Февраль 2020, 17:28:31 »
Обычно делаю sed -s 'бла-бла' -s 'бла-бла',  это аналогично?
Наверно да, не пробовал. "g" в конце подразумевает многократное удаление из одной строки.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: mkpfs -w (тени)
« Ответ #39 : 08 Февраль 2020, 17:33:14 »
# echo qwerty|sed -r 's:(^.*/)(.*$):\1.wh.\2:'
qwerty
нужно с путями.

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: mkpfs -w (тени)
« Ответ #40 : 08 Февраль 2020, 17:34:28 »
Наверно да, не пробовал. "g" в конце подразумевает многократное удаление из одной строки.
Да, все найденные. А .wh..wh.* они откуда берутся?

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: mkpfs -w (тени)
« Ответ #41 : 08 Февраль 2020, 17:36:13 »
и никакого цикла.

Обойтись без цикла это правильно. Циклы в баше очень медленные. Только тут еще преобразовать файлы в тени надо.
А вот там где "else удалить файл",  сделал только потому, что у вас было. Создать такую ситуацию не получилось. Не уверен, что это нужно. То есть и файл и тень с shwh у меня получались только если файл выше. Если выше тень то там только тень. Уверены что нужно?
« Последнее редактирование: 08 Февраль 2020, 17:41:15 от betcher »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: mkpfs -w (тени)
« Ответ #42 : 08 Февраль 2020, 17:54:11 »
А .wh..wh.* они откуда берутся?
Так обозначается удалённый каталог.
Только тут еще преобразовать файлы в тени надо.
/tmp/allfiles-wh полный список, тени там тоже записаны.
Уверены что нужно?
Ни в чём я не уверен. Но я pfs-utils не пользуюсь, обхожусь. Идея допускать наличие теней в модулях кроме save плохая. Из-за теней получится привязка модулей к однажды заданным слоям, и если их поменять местами можно получить весьма интересные неприятности. Если же расположение слоёв жёстко зафиксировать, чем это лучше одного монолитного модуля?
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: mkpfs -w (тени)
« Ответ #43 : 08 Февраль 2020, 18:00:43 »
Ни в чём я не уверен
Это есть в mksavepfs.
По остальному согласен. Теней быть не должно. Это частный случай, кроме склейки сохраненок и примеров то придумать не могу. По этому только с ключем -w

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: mkpfs -w (тени)
« Ответ #44 : 10 Февраль 2020, 16:51:46 »
Так обозначается удалённый каталог.
Пробовал. У каталога обычная тень с одним .wh.
Так что это за .wh..wh, и что с ними делать?