Tmpfs — управление каталогами виртуальной файловой системы
Введение
В Linux каталог `tmpfs` — это временная файловая система, хранящая данные в оперативной памяти (и при необходимости в swap).
Такие каталоги активно используются системой для временных файлов и сокетов:
`/run`, `/var/run`, `/var/lock`, `/tmp`, `/var/tmp`.
После перезагрузки всё содержимое tmpfs очищается.
Для того чтобы при старте системы нужные каталоги создавались с правильными правами и владельцами, используется механизм tmpfiles.d (часть systemd).
В этой теме показано, как создавать такие каталоги и управлять ими автоматически.
Создание каталога вручную
Простейший способ вручную создать каталог в tmpfs с нужными правами:
- Код: выделить все
install -dpm770 -o mysql -g mysql /var/run/mariadb
где:
- `-d` — создать каталог,
- `-p` — создать родительские каталоги при необходимости,
- `-m770` — установить права доступа (восьмерично),
- `-o mysql` — владелец,
- `-g mysql` — группа.
Такой подход можно использовать при ручной настройке или для тестов.
Но чтобы каталог создавался автоматически при загрузке — лучше использовать конфигурацию tmpfiles.
Создание каталога через tmpfiles.d
Файл с описанием каталога создаётся, например, как:
- Код: выделить все
/etc/tmpfiles.d/mariadb.conf
Содержимое:
- Код: выделить все
d /var/run/mariadb 0750 mysql mysql -
Где:
- `d` — создать каталог,
- `/var/run/mariadb` — путь,
- `0750` — права доступа,
- `mysql mysql` — владелец и группа,
- `-` — каталог не удаляется автоматически по времени (нет TTL).
Проверить и применить можно командой:
- Код: выделить все
systemd-tmpfiles --create /etc/tmpfiles.d/mariadb.conf
Примеры для разных сервисов
1. Nginx — хранение PID и сокета
- Код: выделить все
cat /etc/tmpfiles.d/nginx.conf
d /var/run/nginx 0755 nginx nginx -
Иногда сюда же можно добавить строку для создания pid-файла:
- Код: выделить все
f /var/run/nginx/nginx.pid 0644 nginx nginx -
2. SSHD — каталог для runtime данных
- Код: выделить все
cat /etc/tmpfiles.d/sshd.conf
d /var/run/sshd 0755 root root -
3. Dnsmasq — временные PID-файлы и leases
- Код: выделить все
cat /etc/tmpfiles.d/dnsmasq.conf
d /var/run/dnsmasq 0750 dnsmasq dnsmasq -
4. CUPS (принтерный сервис)
- Код: выделить все
cat /etc/tmpfiles.d/cups.conf
d /var/run/cups 0755 lp lp -
5. Systemd-journald — если журналы пишутся в tmpfs (например, при ограничении /var/log)
- Код: выделить все
cat /etc/tmpfiles.d/systemd-journal.conf
d /var/run/systemd/journal 0755 root systemd-journal -
6. Собственное приложение (пример для сервиса myapp)
- Код: выделить все
cat /etc/tmpfiles.d/myapp.conf
d /var/run/myapp 0750 myuser mygroup -
Теперь после перезагрузки все нужные каталоги будут созданы с правильными владельцами и правами доступа.
Это избавляет от ручного создания директорий через скрипты в `/etc/rc.local` или init.d.
Управление tmpfs и проверка
Посмотреть, какие tmpfs-разделы смонтированы:
- Код: выделить все
df -hT | grep tmpfs
Результат обычно выглядит так:
- Код: выделить все
tmpfs tmpfs 1.6G 2.5M 1.6G 1% /run
tmpfs tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs tmpfs 5.0M 0.0M 5.0M 0% /run/lock
Если каталог не создаётся, можно вручную пересоздать все tmpfiles:
- Код: выделить все
systemd-tmpfiles --create
Или проверить, применяются ли нужные правила:
- Код: выделить все
systemd-tmpfiles --cat-config | grep myapp
Ограничение размера tmpfs
При необходимости можно задать лимит на использование памяти tmpfs.
Для этого добавь в `/etc/fstab` строку, например:
- Код: выделить все
tmpfs /run tmpfs defaults,size=256M 0 0
или укажи индивидуальные параметры монтирования в `/etc/systemd/system/tmp.mount`:
- Код: выделить все
[Mount]
What=tmpfs
Where=/run
Type=tmpfs
Options=mode=755,size=512M
Перезапусти сервис:
- Код: выделить все
systemctl daemon-reload
systemctl restart tmp.mount
Важные замечания
- tmpfs хранится в оперативной памяти, при нехватке места может использовать swap.
- Всё содержимое tmpfs очищается после перезагрузки.
- Если tmpfs переполнен, возможны ошибки записи или зависания служб.
- Размер tmpfs можно ограничивать через `fstab` или юнит `tmp.mount`.
- Каталоги в `/run` должны создаваться автоматически — если нет, проверь `systemd-tmpfiles`.
Заключение
Использование tmpfs повышает скорость доступа к временным файлам и снижает износ дисков.
При правильной настройке через `tmpfiles.d` можно добиться того, чтобы все каталоги служб создавались автоматически с нужными правами.
Главное помнить, что tmpfs — временная файловая система: все данные исчезают после перезагрузки.