LINUX.ORG.RU
решено ФорумAdmin

Откуда systemd может брать настройки для монтирования каталога, кроме fstab?

 , ,


0

2

Вчера весь день ковырялся с systemd. В общем есть два сервера на Gentoo. На обоих установлена systemd версии 256.5 с одинаковыми флагами сборки:

[ebuild   R    ] sys-apps/systemd-256.5:0/2::gentoo  USE="acl cryptsetup curl dns-over-tls elfutils gcrypt gnutls http idn kernel-install kmod lz4 lzma openssl pam pcre pkcs11 policykit resolvconf seccomp sysv-utils zstd -apparmor -audit -boot -bpf -cgroup-hybrid -fido2 -homed -importd -iptables -pwquality -qrcode -secureboot (-selinux) (-split-usr) -test -tpm -ukify -vanilla -xkb" PYTHON_SINGLE_TARGET="python3_12 -python3_10 -python3_11"

В /etc/fstab диски монтируются так на обоих компах:

LABEL=rootfs   /      ext4  noatime,defaults,nodev,discard,errors=remount-ro             0 1
proc           /proc  proc  noatime,rw,nosuid,nodev,noexec,hidepid=2,gid=wheel           0 0
tmpfs          /run   tmpfs noatime,rw,async,auto,nodev,nosuid,relatime,mode=755         0 0
tmpfs          /tmp   tmpfs noatime,rw,async,auto,nouser,nosuid,nodev,noexec,size=32G    0 0

Однако каталог /dev почему-то оказывается примонтирован с разными опциями. на одном так:

# findmnt -l | grep "/dev "
/dev  devtmpfs  devtmpfs  rw,nosuid,noexec,relatime,size=32693188k,nr_inodes=8173297,mode=755

на втором так:

# findmnt -l | grep "/dev "
/dev  devtmpfs  devtmpfs  rw,relatime,size=8194240k,nr_inodes=2048560,mode=755

Как так? Откуда он может ещё брать nosuid,noexec настройки кроме /etc/fstab и по умолчанию? Пробовал перезагружать обе машины, настройки сохраняются.

★★★★

Последнее исправление: keeper_b (всего исправлений: 1)

дефолтный размер tmpfs - половина физической памяти.
это забито ажно прям в драйвере.

size
The limit of allocated bytes for this tmpfs instance. The default is half of your physical RAM without swap. If you oversize your tmpfs instances the machine will deadlock since the OOM handler will not be able to free that memory.

kernel.org tpmpfs

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от keeper_b

grep DEVTMPFS /boot/config-6.1.0-25-amd64, потом погуглил наиболее подходящую по названию опцию. Просто тоже интересно стало, откуда /dev берётся, если в systemd нет даже динамического mount-юнита.

anonymous
()
Ответ на: комментарий от anonymous

Вообще-то это касается только devtmpfs.

За монтирование tmpfs отвечает таки systemd. У него для этого есть соответствующий маунт и им даже можно управлять.

$ findmnt --target /tmp
$ systemctl cat tmp.mount

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

За монтирование tmpfs отвечает таки systemd

За монтирование всего остального, в т.ч. сабжа — тоже. Но в этих случаях параметры захардкожены.

С другой стороны, конкретно /dev ядро умеет монтировать и самостоятельно, да. Тут кто первый встал, того и тапки. А это, в свою очередь, зависит от того, есть ли initramfs (когда есть initramfs, ядро ничего не монтирует автоматически, даже если CONFIG_DEVTMPFS_MOUNT=y).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от anonymous

неа, ядру пофиг на /dev ибо ядро работает со своими внутренностями своими же системными функциями. /dev нужон для интерфейса с внешними програмулинами.
натыкался на строки монтирования в каком-то скрипте внутри initramfs. монтирование /dev скорей всего там же.

ядро монтирует для себя лишь корень, ибо в корне лежит куча всего, чего не впихнулось в инитрамфс, ну и /sbin/init ну и за время запуска как минимум один раз перемонтируется. при запуске ядра он монтируется в ro, а потом инитрам или системд перемонтирует корень в rw.

pfg ★★★★★
()
Ответ на: комментарий от pfg

devtmpfs монтируется ядром, когда CONFIG_DEVTMPFS_MOUNT=y (и когда нет initramfs).

Ты хотя бы проверяй свои знания, прежде чем писать.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

разобрал initramfs ото домашней убунту
в корне лежит скрипт /init
внутри

.....      
[ -d /dev ] || mkdir -m 0755 /dev     
.....
# Note that this only becomes /dev on the real filesystem if udev's scripts
# are used; which they will be, but it's worth pointing out
mount -t devtmpfs -o nosuid,mode=0755 udev /dev

# Prepare the /dev directory
[ ! -h /dev/fd ] && ln -s /proc/self/fd /dev/fd
[ ! -h /dev/stdin ] && ln -s /proc/self/fd/0 /dev/stdin
[ ! -h /dev/stdout ] && ln -s /proc/self/fd/1 /dev/stdout
[ ! -h /dev/stderr ] && ln -s /proc/self/fd/2 /dev/stderr

mkdir /dev/pts
mount -t devpts -o noexec,nosuid,gid=5,mode=0620 devpts /dev/pts || true
......

глянул менюшку груба в нем ядру ничего такого не передается ни в одном случае. видать необходимость CONFIG_DEVTMPFS_MOUNT редко бывает, с этим спорить не буду.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от pfg

CONFIG_DEVTMPFS_MOUNT — это опция в конфиге ядра, а не в командной строке ядра. И, опять же, когда есть initramfs, эта настройка не работает, только при прямом монтировании ядром корневой ФС.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Вот мне в голову не пришло, что они могут так захардкодить. Я проверил только опции ядру при загрузке, а лазить по .config не стал, а оно вон как оказывается.

keeper_b ★★★★
() автор топика
Ответ на: комментарий от intelfx

ок, хардкор я не отрицаю. ядро приткнуть куда только не хотят.
я скажу, так понял, глупость, но ядро монтирует корневую фс всегда (исключений в моей практике не было :) опять же я не всё знаю).

@keeper_b спробуй разобрать инитрамфс, если он есть.

pfg ★★★★★
()