Форум проекта PuppyRus Linux

Разработки проекта PuppyRus => Разработка PFS и Initrd => Тема начата: sfs от 24 Март 2018, 08:01:26

Название: pivot_root vs switch_root
Отправлено: sfs от 24 Март 2018, 08:01:26
в портеус используется pivot_root, а надо было switch_root, не пришлось бы столько костылей городить.
Можно подробнее...
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 24 Март 2018, 08:46:22
Можно подробнее...
Смотри linuxrc после строки 9. Комментарии на русском сам писал? Значит читал.
Строка 9
Код
# Включить pivot_root в initramfs чтобы он вел себя как initrd:
Строка 11
Код
exec switch_root /m linuxrc "$@"
Строка 670
Код
pivot_root /union  /union/mnt/live
Строка 673
Код
exec $chroot . /mnt/live/bin/init "$@" <dev/console >dev/console 2>&1
Зачем все эти "прыжки в сторону"?
Для сравнения init (Richy)
Строка 303
Код
exec switch_root /pup_new /sbin/init
Получаем ту же самую aufs (или overlayfs)
Понял? Или дальше жевать?
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 24 Март 2018, 09:00:29
Комментарии на русском сам писал? Значит читал.
Нет - переводили из оригинала. Честно говоря смысла этого текста я не понял
Зачем все эти "прыжки в сторону"?
Не знаю. автор не я
Я руководствовался - "не понимаешь - не лезь" + "работает не трогай"
Понял?
Не понял главного: кроме экономии пары строк кода - какие-то плюсы есть?
дальше жевать?
да. Хорошо бы
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 24 Март 2018, 09:06:14
какие-то плюсы есть?
Не знаю. автор не я
Надеюсь, понятно?
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 24 Март 2018, 09:10:24
Про неподкапотные плюсы не понятно
Я "не автор" не только  портеуса но и ядра и всей репы и что с того?
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 24 Март 2018, 09:22:42
Про неподкапотные плюсы не понятно
Я "не автор"
Init Richy автор я, но вам на это наплевать, вам милее "непонятный" porteus. Позвольте и мне быть "взаимно вежливым".
кроме экономии пары строк кода
Весь процесс создания aufs проще и понятнее.
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 24 Март 2018, 09:33:00
Init Richy автор я, но вам на это наплевать
Нет. Я очень уважительно отношусь к людям, которые могут что-то довести до результата
Предлагал Вам сделать доку и initrd для ПРа
Весь процесс создания aufs проще и понятнее.
Автору - наверное да
Но для меня оба варианта чужие
Ваш менее документированнный и функциональный
Про уменьшение костылей и пользы для юзеров я пока ничего внятного не услышал
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 24 Март 2018, 09:47:49
пользы для юзеров
Если уж вам непонятно, то что говорить про юзеров.
Честно говоря, надоела мне до чёртиков "борьба с ветряными мельницами". Линукс катится в пропасть, а в одиночку всё не перепишешь, жизни не хватит. Поэтому позвольте мне остаться в моём "единственном однопользовательском" и делайте что хотите.
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 24 Март 2018, 09:50:50
Если уж вам непонятно, то что говорить про юзеров.
Ну так объясните чтобы всем было понятно
Пока кроме того, что автору ближе свой код - мне ничего не понятно
У Вас же : вброс - пафос - слив с обидами на весь мир
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 24 Март 2018, 12:13:47
Ну так объясните
Попробую. Правда популяризатор из меня.....
Init Richy до строки 92 мало отличается от init Puppy и PR.
Стр. 9 -33 функция check_status, выдаёт "готово" или "ошибка"
Стр. 35 - загрузка шрифта
Далее до строки 69 задаются переменные
Стр. 71 - 73 монтируются внутренние ФС
Стр. 80 - 90 секция tuxonice
Дальше моё "художество". Сначала определяем $PDEV и $PDIR если не заданы dev и dir в /proc/cmdline, иначе говоря в строке загрузки menu.lst, при этом dev может быть указан и как sd.. и как uuid.
В строке 134 - копирование DISTRO_SPECS в /etc/initvars.
После этого разбираемся с $PCOPY, если устройство "removable"  && PCOPY="yes"
Дальше совсем просто, ищем по имени и сразу монтируем базу, затем файл или каталог сохранения, затем kernel (по uname -r) и отмечаем его наличие переменной ZLAYER=':/kernel=ro'.
Аналогично, только циклом, происходит монтирование модулей из modules и их запись в $UMNTRO
Стр. 236 -241 записываем переменные в /etc/initvars
Стр. 245 - главная строка монтирования aufs
После этого модули перемонтируются в /pup_new/... и монтируется раздел /home, если таковой указан.
В завершение отмонтируются внутренние ФС (/proc и /sys) и exec switch_root /pup_new /sbin/init - переходим внутрь созданной aufs и запускаем init.
Вот и всё
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 24 Март 2018, 13:37:37
Не понятно главного - чем именнно в портеус хуже?
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 24 Март 2018, 17:25:24
Не понятно главного - чем именнно в портеус хуже?
А вы сами не догадались? У них "масло масляное".
Initrd (https://ru.wikipedia.org/wiki/Initrd) - Initial RAM Disk, запускается где? В RAM. Так какого же хрена в первых же строках linuxrc создаётся tmpfs и всё туда копируется с последующим switch_root
Код
if [ -d /m ]; then
    mount -nt tmpfs tmpfs -o mode=0755 /m
    cp -a ??* /m 2>/dev/null
    exec switch_root /m linuxrc "$@"
fi
Дальше можно не смотреть, квалификация борзописцев понятна.
Из-за этой "двойной виртуальности" получается усложнённое дерево каталогов, а так же эффект двойного монтирования.
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 24 Март 2018, 18:44:26
Я не знаю зачем так сделано
А плохо то (юзеру) чем?
Больше памяти естся или проблемы какие-то?

Кстати - в портеус не первоисточник. Это модификация https://www.linux-live.org/
Без проблем юзается еще в uird (https://www.opennet.ru/opennews/art.shtml?num=48315)
Цитата
сценарий инициализации uird-init и библиотека функций к нему livekitlib (доработанный аналог liblinuxlive проекта slax).
debiandog
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 24 Март 2018, 18:57:27
Вот кстати автор поясняет
https://github.com/Tomas-M/linux-live/blob/master/livekitlib
Цитата
# Move entire initramfs tree to tmpfs mount.
# It's a bit tricky but is necessray to enable pivot_root
# even for initramfs boot image
This file indicates that we successfully escaped initramfs
# Переместить все дерево initramfs в mount tmpfs.
# Это немного сложно, но необходимо включить pivot_root
# даже для загрузочного образа initramfs
Этот файл указывает, что мы успешно сбежали от initramfs
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 24 Март 2018, 19:01:04
А плохо то (юзеру) чем?
Юзеру всё это фиолетово.
Больше памяти естся или проблемы какие-то?
Больше памяти, потому что две копии рамдиска. Проблемы, например, двойное монтирование, когда кликаешь sda3 а попадаешь в какие-то дебри.
Кстати - в портеус не первоисточник.
Как обычно, один намудил, остальные повторяют, ибо нет ума разобраться, или просто лень.
Без проблем юзается еще в uird
Я не утверждаю, что мой вариант init лучший, но я его знаю, понимаю и могу изменять его как захочу.
Всё. Хорош. Надоело всё до чёртиков.
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 24 Март 2018, 19:22:36
Вот это хоть что-то проясняет
https://wiki.gentoo.org/wiki/Initramfs/Guide/ru
https://www.linux.org.ru/forum/general/11516791

https://ru.wikipedia.org/wiki/Initrd
Цитата
Initramfs
В ядре Linux 2.6 появилась новая концепция загрузочного диска — он представляет собой сжатый gzip'ом cpio-архив.
Похоже - историческая вещь. Раньше было по другому нельзя
А дальше "работает - не трогай"
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 25 Март 2018, 08:38:10
один намудил, остальные повторяют, ибо нет ума разобраться, или просто лень.
Больше памяти, потому что две копии рамдиска.
Так ли это - первая копия после скачка разве не самоуничтожается?
Там хоть и мало, но если можно лучше - отлично

Чтобы по итогу темы был результат:
Можете поправить пра-портеус? (http://ftp://ftp.yandex.ru/puppyrus/puppyrus-a/kernel/initrd.xz)
Только то что обсуждали
Ну или если есть еще идеи - готов обсудить

В арче (и соответственно rootaufs2) switch_root
В UIRD похоже pivot_root - интересно было бы услышать авторов
Название: Re: pivot_root vs switch_root
Отправлено: betcher от 25 Март 2018, 09:53:56
Я, честно говоря, не в теме. Антон говорит, что switch то есть то что в дракуте.
Название: Re: pivot_root vs switch_root
Отправлено: neobht от 25 Март 2018, 09:58:22
В livekitlib есть функция передачи управления через pivot_root. Ее не удаляли, но и не используем. Аналогично с рядом других функций с pxe связанных.

А реально отрабатывает dracut через switch при этом как в режиме обычного init, так и в режиме когда systemd в роли init.

Название: Re: pivot_root vs switch_root
Отправлено: sfs от 25 Март 2018, 10:04:36
В итоге старый ivekitlib  чем хуже то?
Название: Re: pivot_root vs switch_root
Отправлено: neobht от 25 Март 2018, 12:20:33
В итоге старый ivekitlib  чем хуже то?

Какой старый?
Livekitlib что в uird переписан на 80%.
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 25 Март 2018, 15:44:59
Не важно. Как по Вашему правильнее и почему: pivot_root vs switch_root
Название: Re: pivot_root vs switch_root
Отправлено: neobht от 25 Март 2018, 16:47:17
Это разные механизмы. Один для блочного устройства - initrd, другой для ramfs - initramfs.

Initramfs - более современно. Ядро копирует архив в tmfs и передает управление. При initrd надо при создании делать блочное устройство, но зато проще редактировать - можно сделать mount.

Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 25 Март 2018, 18:05:40
Это разные механизмы. Один для блочного устройства - initrd, другой для ramfs - initramfs.
Теперь понятно объяснил. Получается что в porteus switch_root + chroot используется как костыль для pivot_root. Впрочем они этого и не скрывают.
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 26 Март 2018, 09:32:32
Initramfs - более современно
Это единственный плюс?
Один для блочного устройства - initrd, другой для ramfs - initramfs.
По ссылкам выше тоже это понял. Только не понятно каким образом определить где initrd, а где initramfs... Вроде везде cpio.*z и внутри примерно одинаково
Или отличие как раз в pivot|switch?
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 26 Март 2018, 10:12:29
 Для старых ядер надо было указывать системный раздел параметром загрузки root (например root=/dev/sda1 или root=/dev/ram). При full установке Puppy загружался намного быстрее без initrd.gz, строка initrd в menu.lst просто удалялась. Указанный раздел сразу монтировался в корень как блочное устройство. С современными ядрами такой фокус не проходит, обязателен initrd, который загружается в RAM, получается initramfs. Отсюда делаю вывод - pivot_root устарел.
 А вообще всё это, о чём мы спорим, "мышиная возня". Любой грамотный программист на коленке напишет скрипт инициализации. Не верите? Спросите у Гугла.
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 26 Март 2018, 10:33:06
А вообще всё это, о чём мы спорим, "мышиная возня".
Вы ее затеяли. И как всегда намутив, сливаетесь. Меня устраивало "Работает - не трогай"
каким образом определить где initrd, а где initramfs...
Понятнее не стало
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 26 Март 2018, 10:59:28
Понятнее не стало
https://wiki.gentoo.org/wiki/Initramfs/Guide/ru
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 26 Март 2018, 11:32:53
Если уже разобрались - можете коротко объяснить?
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 26 Март 2018, 11:51:22
Цитата
Содержимое initramfs делается путем создания cpio-архива.
Все наши initrd.gz, initrd.xz, initrd.lz внутри cpio-архивы и, следовательно, загружаются в initramfs
Цитата
initramfs - это начальная файловая система в оперативной памяти, основанная на tmpfs
Значит надо использовать switch_root. В porteus switch_root применяется как костыль
Код
# Включить pivot_root в initramfs чтобы он вел себя как initrd:
if [ -d /m ]; then
    mount -nt tmpfs tmpfs -o mode=0755 /m
    cp -a ??* /m 2>/dev/null
    exec switch_root /m linuxrc "$@"
fi
Цитата
Хотя способ, включающий в себя initrd - это все, что требуется, он имеет несколько недостатков:

    Это полноценное блочное устройство, требующее дополнительные расходы на целую файловую систему, и оно имеет фиксированный размер. Если выбрать initrd достаточно маленьким, то все требуемые скрипты не поместятся. Если сделайте его слишком большим, то растратите память впустую.

    По той причине, что это действительное устройство, оно также требует кэш-память ядра Linux и подлежит используемым методам управления памятью и файлами (таким как подкачка страниц), что делает расходы памяти еще более худшими.

Чтобы решить эти вопросы, была создана initramfs.
Сопоставив это получаем, что в porteus неоправданно усложнён процесс начальной загрузки, неоправданный перерасход памяти и неоправданное усложнение дерева каталогов создаваемой системы. О чём я вам и твержу уже не первый год.
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 26 Март 2018, 12:38:47
Так ли это - первая копия после скачка разве не самоуничтожается?
Там хоть и мало, но если можно лучше - отлично

Чтобы по итогу темы был результат:
Можете поправить пра-портеус?
Только то что обсуждали
Ну или если есть еще идеи - готов обсудить
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 26 Март 2018, 13:00:02
если есть еще идеи
Идей нет, желания тоже, gtk+-3 меня окончательно добил. Бесполезно всё это.
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 26 Март 2018, 13:14:32
gtk+-3 меня окончательно добил.
Ну хоть где-то не я виноват  :D :D :D
Название: Re: Ядро и зависимые программы
Отправлено: DdShurick от 06 Январь 2021, 14:12:51
porteus, fatdog - нет. Опять "не читал, но осуждаю"
Как раз читал, коды, потому и осуждаю. Причину я уже неоднократно озвучивал, неправильное, двойное, монтирование. Носом ткнуть?
Название: Re: Re: Ядро и зависимые программы
Отправлено: sfs от 06 Январь 2021, 14:49:39
неправильное, двойное, монтирование.
Это инитрд, а не ядро
Носом ткнуть?
да. Чем это плохо?
Название: Re: Re: Ядро и зависимые программы
Отправлено: DdShurick от 06 Январь 2021, 15:43:20
да. Чем это плохо?
Ok.
Код
 grep -n pivot linuxrc 
9:# Включить pivot_root в initramfs чтобы он вел себя как initrd:
670:    pivot_root /union  /union/mnt/live
Код
bash-4.4$ grep -n chroot linuxrc 
672:    [ -e bin/chroot ] && chroot=bin/chroot || chroot=usr/sbin/chroot  #sfs
673:        exec $chroot . /mnt/live/bin/init "$@" <dev/console >dev/console 2>&1
Код
9: # Включить pivot_root в initramfs чтобы он вел себя как initrd:
10: if [ -d /m ]; then
11:     mount -nt tmpfs tmpfs -o mode=0755 /m
12:     cp -a ??* /m 2>/dev/null
13:     exec switch_root /m linuxrc "$@"
14: fi
Тебе не кажется, что здесь что-то лишнее?
Насчёт pivot_root споров много и они древние. (https://yandex.ru/search/?lr=22&text=pivot_root%20vs%20switch_root)
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 06 Январь 2021, 17:19:47
Перечитал тему - мутновато.
неоправданный перерасход памяти
Бездоказательно

Дайте исправленный init - протестирую. Так будет проще всем
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 06 Январь 2021, 19:55:41
Дайте исправленный init - протестирую.
Это мне? А почему я должен чужие ошибки исправлять. У меня свой init, бери и пользуйся, я не жадный.
minitrd (https://github.com/DdShurick/minitrd)
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 07 Январь 2021, 07:41:23
Нет - так нет
Если не готовы улучшать - зачем постоянно поднимать тему  :'(
Название: Re: pivot_root vs switch_root
Отправлено: DdShurick от 07 Январь 2021, 07:52:57
Если не готовы улучшать
Это бессмысленно. С такими врождёнными пороками только переписывать с нуля. А зачем, если есть мой init?
Название: Re: pivot_root vs switch_root
Отправлено: sfs от 07 Январь 2021, 08:54:35
https://forum.puppyrus.org/index.php?topic=21855.msg174652#msg174652