Tmpfs — Управление каталогами (UP25)

Установка, настройка, эксплуатация.

Модератор: ROOT

Tmpfs — Управление каталогами (UP25)

Сообщение ROOT » 25 янв 2018, 01:53

Оглавление


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 — временная файловая система: все данные исчезают после перезагрузки.
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 2202 2083 5115 2302


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 463
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1