я правильно понял, что при монтировании фс в tmpfs создаются свои опции, отличные от тех, что в fstab?
Смотря как монтировать. Если монтировать руками командой mount, то используются те опции, которые переданы параметром -o. Если же просто «mount /path/to/mountpoint» или «mount -a», то читается /etc/fstab. Ничего не мешает tmpfs записать в fstab.
есть на диске / и /home в нём же, при этом получится смонтировать хомяк с noexec, правильно?
а вот например есть каталог /a, в нём подкакталог /b и ещё несколько файлов- можно ли смонтировать в tmpfs каталоги /a и /b, чтоб каталог /b не занимал двойной объём памяти? или и так не будет?
а вот например есть каталог /a, в нём подкакталог /b и ещё несколько файлов- можно ли смонтировать в tmpfs каталоги /a и /b, чтоб каталог /b не занимал двойной объём памяти?
По-моему, ты не до конца понимаешь, что происходит при монтировании tmpfs, да и вообще как работает монтирование. Если есть каталог /a/b и в нём несколько файлов — то нафига в /a и /a/b монтировать tmpfs? При монтировании tmpfs в /a там окажется пустой каталог.
Всё-таки почитай ещё раз про монтирование. Смонтировать можно что-то куда-то. Что-то — это либо блочное устройство, либо нечто абстрактное (зависящее от ФС) в случае nodev-файловой системы (tmpfs является nodev). Куда-то — это всегда каталог в VFS. Tmpfs — это тип файловой системы, а не каталог.
mount -t tmpfs tmpfs /a
mkdir /a/b
mount -t tmpfs tmpfs /a/b
Если честно, не могу даже представить, как надо смонтировать, чтобы что-то занимало двойной объём памяти. Боюсь, что это невозможно (если, конечно, не хранить файлы под точками монтирования на нижних ФС, например, смонтировав ФС поверх непустого каталога).
Если честно, не могу даже представить, как надо смонтировать, чтобы что-то занимало двойной объём памяти
если на диске есть каталог /a/b надо смонтировать ОТДЕЛЬНО /a, потом ОТДЕЛЬНО /b . т.е есть /etc , в НЁМ /home, нужно смонтировать хоме -o noexec, при этом /etc БЕЗ noexec
если на диске есть каталог /a/b надо смонтировать ОТДЕЛЬНО /a, потом ОТДЕЛЬНО /b . т.е есть /etc , в НЁМ /home, нужно смонтировать хоме -o noexec, при этом /etc БЕЗ noexec
o_O А при чём тут вообще tmpfs?
т.е есть /etc , в НЁМ /home
Зачем так делать?
на диске есть каталог /a/b
Т.е. есть диск, на нём единственный каталог /etc, в котором ещё и /etc/home? Мда…
К тому же это не получится, потому что и etc, и etc/home на одной ФС, а не на разных.
толи я тебя не понял, толи ты меня... хочу систему разместить на двух разделах - на одном /etc (при этом в его корне лежит хомяк), на втором всё остальное. нужно будет монтировать /etc, затем хомяк с опцией noexec. (и /etc и хому в память). возможно ли смонтировать /home, который находится в уже смонтированном в tmpfs /etc к корню tmpfs но с другой опцией? если реально, то не будет ли хом занимать двоёной объём, он ведь ещё и в /etc смонтирован?
а нужен ли тогда initrd вообще, если можно на одном разделе разместить загрузочные скрипты и несколько бинарей, нужных только для монтирования, а в конфигах инита преред запуском демонов с другого носителя просто прописать монтирование бинарями с этого носителя, а потом какой-нить chroot? или это будет не совсем правильно? просто если можно так будет сделать, то initrd окажется велосипедом
лучше скажи, нужен ли вообще initrd. т.е можно ли ПОСЛЕ передачи управления ядру подмонтировать другой / с другими /etc /bin и остальными БДж и Ш без каких либо CCЗБ-ностей?
ну то есть по сути полностью сменить корень на подмонтированный раздел. как бы chroot, но я не знаю, вдруг у чрута есть какие-нибудь недостатки, что лучше не использовать его для полнофункциональной смены корня. т.е просто пытаюсь выяснить, можно ли обойтись без initrd для запуска системы, раскиданой по разным разделам/устройствам с помощью базового комплекта бинарей, необходимых для подмонтирования каталогов /bin /etc с внешнего, ещё не подмонтированного устройства/раздела. или всё равно менее костыльным вариантом будет каждый раз создавать initrd для каждого ядра? просто хочется один раз создать бинарный миникомплект, который сможет подгружать нужное ядро с любого устройства на любом компе, заместо того чтобы на каждом компе каждый раз initrd делать, тем более наверняка компактней и шустрее получтся
ёпрст. можно ли обойтись без инитрд если нужно запустить систему, у которой и /boot и /bin и /lib и /etc находятся на разных разделах, созданием в разделе с /etc комплекта бинарей, необходимых для замены initrd?
можно ли обойтись без инитрд если нужно запустить систему, у которой и /boot и /bin и /lib и /etc находятся на разных разделах, созданием в разделе с /etc комплекта бинарей, необходимых для замены initrd?
Можно запихнуть аналог initramfs в подкаталог в /etc и передать ядру параметр типа init=/etc/preinit/init. Только придётся скрипты руками писать. Просто распаковать initramfs в /etc/preinit не получится — без изменений работать не будет.
просто хочется один раз создать бинарный миникомплект, который сможет подгружать нужное ядро с любого устройства на любом компе, заместо того чтобы на каждом компе каждый раз initrd делать
как бы уже написал чего хочется. интересно просто узнать, не будет ли это более велосипедным чем инитд
В принципе, там очевидно всё. Нужно сделать то же, что делается в initrd (смонтировать всё, что нужно, и exec'нуть /sbin/init), но учесть то, что пути к программам другие, т.е. /etc/preinit/bin вместо /bin и т.п. И ещё switch_root в конце не нужен.
Для примера можно почитать содержимое каталога /lib/preinit и скрипта /etc/preinit в OpenWrt, но это не простой пример, на котором можно понять суть, и он там не заменяет initrd, а просто является частью процесса загрузки.
или initd окажется менее костыльным вариантом?
Моё мнение, что лучше использовать initrd, чем пытаться сгородить какой-то костыль-велосипед в файловой системе, который будет выполнять задачу initrd вместо него. В данных условиях даже не получится сэкономить на дублировании бинарников, потому что тут хватит урезанного busybox'а, который после загрузки будет бесполезен.