Я использую Linux на серверах примерно с 1996 года и привык видеть что-то вроде этого:

$ mount
proc on /proc type proc
/dev/sda1 on / type ext3
/dev/sda2 on /usr type ext3
/dev/sdb1 on /home type ext3

(Я удалил «варианты», потому что они здесь неуместны.)

Несколько позже я начинаю видеть:

$ mount
proc on /proc type proc
/dev/sda1 on / type ext3
/dev/sda2 on /usr type ext3
/dev/sdb1 on /home type ext3
devtmpfs on /dev type devtmpfs 
tmpfs on /run type tmpfs 
tmpfs on /run/lock type tmpfs 
sysfs on /sys type sysfs
tmpfs on /run/shm type tmpfs 
devpts on /dev/pts type devpts 

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

Недавно я получил живой ISO-образ настольного дистрибутива (в данном конкретном случае Linux Mint, но я видел его в Debian, Kali и других), и там есть это безумие:

$ mount
sysfs on /sys type sysfs 
proc on /proc type proc 
udev on /dev type devtmpfs 
devpts on /dev/pts type devpts 
tmpfs on /run type tmpfs 
/dev/sda1 on / type ext4 
securityfs on /sys/kernel/security type securityfs 
tmpfs on /dev/shm type tmpfs 
tmpfs on /run/lock type tmpfs 
tmpfs on /sys/fs/cgroup type tmpfs 
cgroup on /sys/fs/cgroup/systemd type cgroup 
pstore on /sys/fs/pstore type pstore 
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup 
cgroup on /sys/fs/cgroup/pids type cgroup 
cgroup on /sys/fs/cgroup/hugetlb type cgroup 
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup 
cgroup on /sys/fs/cgroup/blkio type cgroup 
cgroup on /sys/fs/cgroup/freezer type cgroup 
cgroup on /sys/fs/cgroup/perf_event type cgroup 
cgroup on /sys/fs/cgroup/cpuset type cgroup 
cgroup on /sys/fs/cgroup/memory type cgroup 
cgroup on /sys/fs/cgroup/devices type cgroup 
systemd-1 on /proc/sys/fs/binfmt_misc type autofs 
mqueue on /dev/mqueue type mqueue 
debugfs on /sys/kernel/debug type debugfs 
hugetlbfs on /dev/hugepages type hugetlbfs 
fusectl on /sys/fs/fuse/connections type fusectl 
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc 
cgmfs on /run/cgmanager/fs type tmpfs 
tmpfs on /run/user/1000 type tmpfs 
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse 

В чем причина такого распространения «маунтов»? Являются ли такие вещи, как cgroups, особенно удобными для просмотра как «смонтированных» файловых систем, а не для доступа к ним, например, через программные API?

6
don_crissti 21 Дек 2017 в 15:35
1
Да, в самом деле. Я начал вводить mount | grep ^/, чтобы получить список того, что я ищу: реальные точки монтирования.
 – 
hschou
21 Дек 2017 в 02:20
1
Или вы можете просто запустить, например, mount -t ext4,nfs4,zfs, чтобы получить список только этих типов файловых систем.
 – 
cas
21 Дек 2017 в 14:38

1 ответ

Это выбор вида API.

В старых системах было принято использовать устройства и IOCTL на таких устройствах (например, для создания виртуальных терминалов). Проблема заключалась в том, что он полагался на использование номера для доступа к определенной услуге, поэтому его было нелегко улучшить/обновить. Кроме того, один и тот же номер запроса может иметь совершенно другое значение на другом устройстве, поэтому при переименовании устройств (более описательных, виртуальных систем и т. д.) можно дать неправильную команду (например, спутать, какой тип устройства должен быть указан для программа).

Так что были и другие варианты. Некоторое время были созданы новые системные вызовы, но в основном для общих случаев, и также не идеально создавать много новых системных вызовов. /proc также стал обычным интерфейсом, но с некоторой проблемой, поскольку интерфейс такой файловой системы (со стороны ядра) одинаков для всех сервисов. APCI и сеть широко использовали такой интерфейс. Возникла проблема с удалением модулей, когда другая программа имела доступ к их файлу в proc. Теперь модули (и тем самым их удаление для освобождения памяти) не такая уж и проблема

Было использовано несколько попыток использования сетевого сокета, но это не так удобно для одноразового использования.

Так что теперь стало проще создавать новые файловые системы и давать больше свободы драйверам/сервисам в том, как это реализовать. Есть и преимущество: для получения и извлечения данных можно использовать только cat и echo. так легче тестировать и использовать новые функции.

3
Giacomo Catenazzi 21 Дек 2017 в 12:15