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

Автор Тема: pivot_root vs switch_root  (Прочитано 14049 раз)

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

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: pivot_root vs switch_root
« Ответ #15 : 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-архив.
Похоже - историческая вещь. Раньше было по другому нельзя
А дальше "работает - не трогай"

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: pivot_root vs switch_root
« Ответ #16 : 25 Март 2018, 08:38:10 »
один намудил, остальные повторяют, ибо нет ума разобраться, или просто лень.
Больше памяти, потому что две копии рамдиска.
Так ли это - первая копия после скачка разве не самоуничтожается?
Там хоть и мало, но если можно лучше - отлично

Чтобы по итогу темы был результат:
Можете поправить пра-портеус?
Только то что обсуждали
Ну или если есть еще идеи - готов обсудить

В арче (и соответственно rootaufs2) switch_root
В UIRD похоже pivot_root - интересно было бы услышать авторов

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: pivot_root vs switch_root
« Ответ #17 : 25 Март 2018, 09:53:56 »
Я, честно говоря, не в теме. Антон говорит, что switch то есть то что в дракуте.

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re: pivot_root vs switch_root
« Ответ #18 : 25 Март 2018, 09:58:22 »
В livekitlib есть функция передачи управления через pivot_root. Ее не удаляли, но и не используем. Аналогично с рядом других функций с pxe связанных.

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


Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: pivot_root vs switch_root
« Ответ #19 : 25 Март 2018, 10:04:36 »
В итоге старый ivekitlib  чем хуже то?

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re: pivot_root vs switch_root
« Ответ #20 : 25 Март 2018, 12:20:33 »
В итоге старый ivekitlib  чем хуже то?

Какой старый?
Livekitlib что в uird переписан на 80%.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re: pivot_root vs switch_root
« Ответ #21 : 25 Март 2018, 15:44:59 »
Не важно. Как по Вашему правильнее и почему: pivot_root vs switch_root

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re: pivot_root vs switch_root
« Ответ #22 : 25 Март 2018, 16:47:17 »
Это разные механизмы. Один для блочного устройства - initrd, другой для ramfs - initramfs.

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


Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: pivot_root vs switch_root
« Ответ #23 : 25 Март 2018, 18:05:40 »
Это разные механизмы. Один для блочного устройства - initrd, другой для ramfs - initramfs.
Теперь понятно объяснил. Получается что в porteus switch_root + chroot используется как костыль для pivot_root. Впрочем они этого и не скрывают.
Моноблок 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: pivot_root vs switch_root
« Ответ #24 : 26 Март 2018, 09:32:32 »
Initramfs - более современно
Это единственный плюс?
Один для блочного устройства - initrd, другой для ramfs - initramfs.
По ссылкам выше тоже это понял. Только не понятно каким образом определить где initrd, а где initramfs... Вроде везде cpio.*z и внутри примерно одинаково
Или отличие как раз в pivot|switch?

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: pivot_root vs switch_root
« Ответ #25 : 26 Март 2018, 10:12:29 »
 Для старых ядер надо было указывать системный раздел параметром загрузки root (например root=/dev/sda1 или root=/dev/ram). При full установке Puppy загружался намного быстрее без initrd.gz, строка initrd в menu.lst просто удалялась. Указанный раздел сразу монтировался в корень как блочное устройство. С современными ядрами такой фокус не проходит, обязателен initrd, который загружается в RAM, получается initramfs. Отсюда делаю вывод - pivot_root устарел.
 А вообще всё это, о чём мы спорим, "мышиная возня". Любой грамотный программист на коленке напишет скрипт инициализации. Не верите? Спросите у Гугла.
Моноблок 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: pivot_root vs switch_root
« Ответ #26 : 26 Март 2018, 10:33:06 »
А вообще всё это, о чём мы спорим, "мышиная возня".
Вы ее затеяли. И как всегда намутив, сливаетесь. Меня устраивало "Работает - не трогай"
каким образом определить где initrd, а где initramfs...
Понятнее не стало

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: pivot_root vs switch_root
« Ответ #27 : 26 Март 2018, 10:59:28 »
Моноблок 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: pivot_root vs switch_root
« Ответ #28 : 26 Март 2018, 11:32:53 »
Если уже разобрались - можете коротко объяснить?

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re: pivot_root vs switch_root
« Ответ #29 : 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 неоправданно усложнён процесс начальной загрузки, неоправданный перерасход памяти и неоправданное усложнение дерева каталогов создаваемой системы. О чём я вам и твержу уже не первый год.
Моноблок 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