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

Автор Тема: addlayer  (Прочитано 21249 раз)

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

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: addlayer
« Ответ #45 : 28 Февраль 2017, 09:00:21 »
Чем это лучше pfsload ?

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: addlayer
« Ответ #46 : 28 Февраль 2017, 10:56:14 »
это и будет pfsload, добавится только обновление менюшек, depmod, ldconfig и т.д.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: addlayer
« Ответ #47 : 28 Февраль 2017, 11:01:03 »
Т.е. addlayer - одна из функций. Не надо из нее лепить что-то другое

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: addlayer
« Ответ #48 : 28 Февраль 2017, 16:29:32 »
Т.е. addlayer - одна из функций. Не надо из нее лепить что-то другое
Да я так думаю. Просто pfsload будет ее использовать как и остальные скрипты.

Оффлайн DdShurick

  • Это Риччи
  • Модератор
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: addlayer
« Ответ #49 : 28 Февраль 2017, 17:17:59 »
addlayer - одна из функций.
Добавил addlayer в mkpfs, вот что получилось:
Код
#!/bin/sh
## mkaufs, DdShurick 28.02.2017, GPL v2. The idea of betcher.
usage () {
if [ "$1" ]; then
echo "$0: $1"
else
echo "Использовать:"
echo " $0 [-r|--root dir] - изменения сохраняются в tmpfs"
echo " $0 [-r|--root dir] <раздел> <каталог> - изменения сохраняются в
  каталог на указанном разделе"
echo " -r|--root указать корень создаваемой aufs, по умолчанию /$SYSMNT/aufs$N"
echo "  раздел - \"sd[a-f][1-9]*\""
echo "  каталог - любое имя без пробела"
fi
exit 0
}

addlayer () {
[ "$(id -u)" = 0 ] || usage "Разрешено только root"
while true; do
echo "Для выхода нажмите Enter или укажите подключаемый модуль или каталог:"
read D
[ "$D" ] || exit
NEWLAYER=$(realpath "$D") || usage "Файл не найден"
[ "$(df "$NEWLAYER" | egrep '^aufs|^unionfs')" ] && usage "Ошибка!
    '$2' находится на разделе с aufs.
    Переместите на раздел с другой файловой системой."
    MODNAME=$(basename "$NEWLAYER")

case $(file -b $NEWLAYER) in
*directory) ;;
Squashfs*4.0*|Linux*ext*)
mkdir -p /$SYSMNT/bundles$N/"$MODNAME"
mount -o loop "$NEWLAYER" /$SYSMNT/bundles$N/"$MODNAME"
NEWLAYER=/$SYSMNT/bundles$N/"$MODNAME";;
*) usage "Invalid format $MODNAME" ;;
esac

mount -o remount,add:1:"$NEWLAYER" "$AUFSROOT" || usage "Ошибка монтирования"
done

}

SYSMNT=$(cut -f2 -d/ /sys/fs/aufs/si_$(grep ' / aufs' /proc/mounts | cut -f2 -d= | tr ',' ' ' | cut -f1 -d' ')/br0)
AUFSROOT="/"

[ "$0" = "addlayer" ] && addlayer

N=$(ls /sys/fs/aufs/ | wc -w) # № для aufs если несколько.
AUFSROOT="/$SYSMNT/aufs$N"

O=$(getopt -l help,root: -- hr: $@) || usage
eval set -- "$O"
for OPT in $O
do
case "$OPT" in
-h|--help) usage; break;;
-r|--root) AUFSROOT="$2"
shift 2;;
--) shift; break;;
esac
done

[ "$(id -u)" = 0 ] || usage "Разрешено только root"

if [ $# = 0 ]; then
mkdir /$SYSMNT/changes$N
mount -t tmpfs tmpfs /$SYSMNT/changes$N
elif [ $# = 2 ]; then
MNTPT="$(grep $1 /proc/mounts | awk '{print $2}')"
if [ "$MNTPT" = "" ]; then
[ "$(grep $1 /proc/partitions)" ] || usage "Такого раздела не существует"
[ "$(blkid $DEV | grep ext)" ] || usage "ФС не Linux"
MNTPT=/mnt/$1
mkdir $MNTPT
mount /dev/$1 $MNTPT
fi
mkdir $MNTPT/$2
ln -s $MNTPT/$2 /$SYSMNT/changes$N
else
usage
fi

mkdir -p $AUFSROOT
mount -t aufs -o dirs=/$SYSMNT/changes$N/=rw aufs "$AUFSROOT"

echo "Создана aufs с корнем $AUFSROOT"

addlayer
Неудобно, нет автодополнения при наборе имени модуля.
Моноблок 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

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: addlayer
« Ответ #50 : 28 Февраль 2017, 17:27:59 »
Неудобно, нет автодополнения при наборе имени модуля.
http://wiki.puppyrus.org/puppyrus/pr218/pfs#editor_pfs

Оффлайн DdShurick

  • Это Риччи
  • Модератор
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: addlayer
« Ответ #51 : 28 Февраль 2017, 17:44:36 »
Моноблок 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

Оффлайн DdShurick

  • Это Риччи
  • Модератор
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: addlayer
« Ответ #52 : 09 Март 2017, 22:52:22 »
 Внёс некоторые изменения, возможно станет удобнее.
Моноблок 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: addlayer
« Ответ #53 : 10 Март 2017, 06:50:18 »
Я так понял изменения касаются /tmp/aufs$n?
Собирался делать что-то подобное, но не для переноса пути к ауфс, а для блокировки. В принципе можно совместить наверное. Надо подумать.

Оффлайн DdShurick

  • Это Риччи
  • Модератор
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: addlayer
« Ответ #54 : 10 Март 2017, 07:51:42 »
изменения касаются /tmp/aufs$n?
Да. Теперь mkaufs создаёт /tmp/aufs$n в котором записывается $AUFSROOT (корень aufs$N). Туда можно и другие переменные записывать.
Ещё. Не обязательно указывать № aufs, при необходимости спросит. Если aufs$N нет, автоматически будет запущен mkaufs.
Моноблок 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: addlayer
« Ответ #55 : 10 Март 2017, 07:51:51 »
О, есть идея как сделать надежно.
1. Научить delaufs взвращать ошибку если осталась хоть одна папка aufs|bundles|changes($n)
2. В mkaufs после получения свободного $n, запускать delaufs $n, если ошибка n=n+1 и снова delaufs $n пока полностью чистый не найдет.

Оффлайн DdShurick

  • Это Риччи
  • Модератор
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: addlayer
« Ответ #56 : 10 Март 2017, 08:00:11 »
1. Научить delaufs взвращать ошибку
Возвращает при невозможности удалить.
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: addlayer
« Ответ #57 : 10 Март 2017, 08:11:16 »
При невозможности удалить недостаточно. Это же баш кодом завершения скрипта будет код завершения последней команды. Нужно после размонтирований и удалений проверять наличие папок с $n. Если найдено завершаться с ошибкой, если нет удалять /tmp/aufs$n.

Оффлайн DdShurick

  • Это Риччи
  • Модератор
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: addlayer
« Ответ #58 : 10 Март 2017, 08:19:55 »
Код
 [ -d /$SYSMNT/aufs$N -a -d $AUFSROOT ] && usage "Выполнение $0 завершилось с ошибкой" || rm /tmp/aufs$N 
??
Моноблок 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: addlayer
« Ответ #59 : 10 Март 2017, 08:25:03 »
По п.2.
delaufs в некоторых ситуациях может отработать некорректно. Или вообще не отработать если скрипт был поерван. Changes монтируется до aufs и в этот момент $n будет свободен. То есть два одновременно запущенных mkaufs с высокой вероятностью приведут к ошибке. По этому предлагаю такой алгоритм для mkpfs.
Получаем $n как сейчас.
Delaufs $n
если ошибка,  ищем следующий свободный и снова
delaufs $n
Пока не найдется свободный полностью.
Затем создаем /tmp/aufs$n - нужно, чтоб наличие этого файла запрещало другим эуземплярам mkaufs испрльзовать этот $n.
и только тогда создавать ченджз и ауфс.
Как то так.