Как изменить размер tmpfs в Linux

Быстрые ссылки
- Что такое tmpfs
- Как узнать текущий размер tmpfs
- Как увеличить tmpfs
- Изменение tmpfs без перезагрузки
- Практические рекомендации и безопасность
- Отладка и восстановление
- Контрольные списки и критерии приёмки
- Короткое объявление для команды
Что такое tmpfs
tmpfs — это временная (volatile) файловая система, которая хранит файлы в оперативной памяти (RAM) и управляется ядром Linux. Основные свойства:
- Быстрая: задержки чтения/записи намного ниже, чем у дисков.
- Временная: содержимое теряется при выключении/перезагрузке (за исключением случаев, когда ядро обмена (swap) выгружает части tmpfs на диск).
- Гибкая: размер обычно выделяется динамически по мере использования, но может быть ограничен параметром size.
Короткое определение: tmpfs — это файловая система в памяти для временных данных, где содержимое может быть выгружено в swap по решению ядра.
Важно понимать разницу между tmpfs и «ramdisk» (постоянно выделенный участок RAM, см. раздел альтернатив). tmpfs более гибок и может занимать только столько пространства, сколько фактически требуется, при этом имеет ограничение size, если вы его задали.
Почему tmpfs не всегда полностью в оперативной памяти
Ядро Linux может переместить страницы tmpfs в swap, если системе не хватает свободной памяти. То есть tmpfs — это гибрид: он стремится хранить данные в RAM, но при необходимости часть может быть записана на диск через swap. Это обеспечивает безопасность работы системы, но снижает гарантию, что все данные tmpfs будут исключительно в памяти.
Как узнать текущий размер tmpfs
Основные команды для проверки:
df -h | grep -Ei 'shm|tmpfs|size'Пример объяснения:
- df -h — показывает используемое и доступное пространство в удобном формате.
- grep -E -i — фильтрует строки по регулярному выражению, нечувствительному к регистру.
Кроме того, можно посмотреть конкретно /dev/shm:
df -h /dev/shmИли получить детальный вывод монтирования:
mount | grep tmpfsИнтерпретация результатов:
- Поле Size/Available в df покажет максимальный размер (если задан) и текущее использование.
- Если размер не ограничен явно, ядро указывает «total» в зависимости от политики (часто это около половины ОЗУ).
Факты, которые полезно принять во внимание:
- По умолчанию tmpfs часто монтируется на /dev/shm, /run и других служебных точках.
- По умолчанию ограничение у некоторых дистрибутивов может быть set to half of RAM (половина оперативной памяти). Это не универсальное правило, но широко распространено.
Как увеличить tmpfs (через /etc/fstab)
Самый надёжный способ задать фиксированный размер tmpfs — добавить запись в /etc/fstab, чтобы система монтировала tmpfs с нужными опциями при загрузке.
Шаблон строки fstab:
# Пример для /dev/shm с фиксированным размером 2 ГБ:
tmpfs /dev/shm tmpfs defaults,rw,nodev,nofail,noatime,nosuid,size=2G 0 0Разбор параметров:
- tmpfs — указывает тип файловой системы.
- /dev/shm — точка монтирования (чтобы совместить со стандартной пространственной организацией).
- defaults — стандартный набор опций (rw, suid и т. д. в зависимости от реализации).
- rw — монтировать как читаемую/записываемую.
- nodev — не разрешать специальные устройства в этой точке (рекомендуется для безопасности).
- nofail — не останавливать загрузку, если монтирование не удалось.
- noatime — не обновлять атрибут access time при чтении (увеличивает производительность).
- nosuid — запрещает setuid биты (рекомендуется для tmpfs, где запускаемые файлы не нужны).
- size=2G — ограничивает максимальный размер в 2 гигабайта (локализация единиц: используем ГБ в тексте, в конфиге пишем G или M).
Важно: не копируйте строку-заголовок (комментарий) в /etc/fstab — она уже присутствует в файле.
Рекомендации по выбору размера:
- Оцените реальные потребности сервисов: сколько временных файлов создаётся одновременно.
- Оставьте запас для ядра, кэшей и других приложений. Для небольших систем не следует ставить >70–80% RAM.
- На серверах с большим объёмом ОЗУ можно использовать более высокий процент, но всегда учитывайте пиковую нагрузку.
Как изменить tmpfs без перезагрузки
Иногда нужно изменить ограничение «на лету», например, чтобы не перезагружать продовую систему. Для этого используется команда mount с опцией remount:
mount -o remount,size=4G /dev/shmПояснение:
- mount -o remount — заставляет ядро перемонтировать уже смонтированную файловую систему с новыми опциями.
- size=4G — новое ограничение размера.
Проверка изменений:
df -h /dev/shmЗамечание: если у вас несколько точек tmpfs, убедитесь, что вы перемонтируете правильную. Некоторые дистрибутивы используют /run/shm или другие пути.
Альтернативы tmpfs и когда tmpfs не подходит
Альтернатива: ramdisk (initramfs или tmpfs как ramdisk)
- ramdisk создаёт статически выделенный блок памяти под файловую систему (block device в RAM). Это полезно, когда требуется гарантировать, что место в RAM зарезервировано заранее.
- Недостаток ramdisk — давлению на систему памяти: зарезервированная RAM недоступна для остального ПО.
Когда tmpfs не подходит:
- Нужна персистентность данных между перезагрузками — тогда tmpfs не подходит.
- Сильно ограниченная оперативная память и высокий риск OOM — tmpfs может привести к вытеснению важного ПО в swap или к OOM-killer.
- Политики безопасности требуют явного контроля устройства/атрибутов, недопустимых для tmpfs.
Лучший подход в таких случаях — использовать дисковые хранилища (SSD/HDD) с кешированием, или выделенный ramdisk только при строгой необходимости.
Безопасность и параметры монтирования
Рекомендуемые опции безопасности для tmpfs:
- nodev — предотвращает создание символических/специальных устройств.
- nosuid — запрещает выполнение setuid-бинов, повышая безопасность.
- noexec — запрещает выполнение двоичных файлов в tmpfs (если вам не нужно запускать исполняемые файлы), это повышает безопасность.
Пример с noexec:
tmpfs /dev/shm tmpfs defaults,rw,nodev,nosuid,noexec,nofail,noatime,size=1G 0 0Примечание: use noexec осторожно — некоторые приложения (например, тестовые среды, которые выполняют временные бинарники) могут нуждаться в exec.
Отладка проблем после изменения tmpfs
Если после изменения /etc/fstab система не стартует как ожидалось:
- Проверьте /var/log/boot или используйте journalctl:
journalctl -b -p err- Просмотрите сообщения ядра:
dmesg | tail -n 200Если вы использовали опцию nofail, система должна продолжить загрузку, даже если монтирование tmpfs упало.
Если вы не используете nofail и система не загружается в GUI, переключитесь в recovery mode или используйте live-USB для редактирования /etc/fstab и отката изменений.
Проверяйте синтаксис /etc/fstab: ошибка в формате — частая причина проблем. Можно протестировать монтирование вручную:
mount -aЭто попытается смонтировать все файловые системы, указанные в /etc/fstab, и выведет ошибки.
Откат изменений
Если необходимо вернуть всё как было:
- Удалите или прокомментируйте строку tmpfs в /etc/fstab.
- Перемонтируйте точку:
mount -o remount,size=... /dev/shmили просто перезагрузите систему.
- Если система не загружается, загрузитесь в rescue mode/live-USB и отредактируйте /etc/fstab.
Практические примеры и сценарии использования
- Тестовая среда (CI):
- Для CI-пайплайнов часто полезно размещать временные артефакты в tmpfs для ускорения тестов. В этом случае рекомендуется включить noatime и noexec, а размер подбирать согласно среднему пиковому использованию.
- База данных in-memory для прототипа:
- Если вы запускаете in-memory базу данных для тестов, tmpfs может ускорить операции. Но помните, что данные не переживут перезагрузку и могут быть выгружены в swap.
- Кэширование упаковок / сборок:
- При сборке ПО в CI стоит кешировать промежуточные артефакты в tmpfs, чтобы ускорить ввод-вывод, но отслеживать использование памяти.
Контрольные списки
Контрольный список администратора перед изменением tmpfs:
- Оценить текущее использование RAM и swap.
- Вычислить безопасный лимит tmpfs (учитывать пиковую нагрузку).
- Подумать о параметрах безопасности (nodev, nosuid, noexec).
- Сделать бэкап /etc/fstab.
- Протестировать команду mount -o remount локально.
- Мониторить систему после изменения (free -h, top, vmstat, dmesg).
Контрольный список для разработчика/QA:
- Убедиться, что временные файлы корректно копируются на диск при необходимости.
- Написать тесты на поведение при нехватке места.
- Логировать ошибки записи в tmpfs и корректно их обрабатывать.
Критерии приёмки
- tmpfs смонтирован с указанным размером и опциями (проверено командой df -h и mount).
- После перезагрузки запись в /etc/fstab работает корректно и система не падает.
- Нагрузка на память и swap остаётся в допустимых пределах при нагрузочном тестировании.
- Приложения, использующие tmpfs, функционируют корректно без ошибок доступа.
Тест-кейсы и приёмочные сценарии
- Проверка корректности монтирования:
- Действие: добавить запись в /etc/fstab и выполнить mount -a.
- Ожидание: /dev/shm доступен и имеет указанный размер.
- Проверка поведения при достижении лимита:
- Действие: заполнить tmpfs файлами до ограничения.
- Ожидание: приложения получают ошибки ENOSPC (No space left) и корректно их обрабатывают.
- Проверка отказоустойчивости при ошибке fstab:
- Действие: внести ошибку в запись /etc/fstab (например, опечатку) и перезагрузить.
- Ожидание: система не блокируется на этапе загрузки при наличии nofail; при отсутствии nofail — система попадает в режим восстановления, где можно откатить изменения.
Мини-методология выбора размера tmpfs
- Считать пиковое использование временных файлов за N дней/неделю.
- Добавить запас: +20–30% к пиковому использованию.
- Проверить суммарное потребление RAM при этом размере на тестовом стенде.
- Если суммарная RAM-потребность слишком велика, либо уменьшите tmpfs, либо добавьте RAM/смените стратегию на дисковое кеширование.
Ментальные модели
- Стоимость vs скорость: RAM быстрее, но дороже и временно.
- Власть ядра: ядро может свопать tmpfs в swap — значит гарантии «в мемори» нет.
- Баланс ресурсов: tmpfs — ускоритель I/O, но потребляет память, которая могла бы пойти на кэш ядра или приложения.
Пример ошибок и когда tmpfs может подвести
- Система использует слишком много tmpfs и переходит в swap: производительность падает.
- Критичное приложение теряет данные при перезагрузке, потому что полагалось на tmpfs.
- Неверные опции в /etc/fstab блокируют загрузку (если не указано nofail).
Рекомендации по мониторингу
- Следите за свободной памятью и страницами в swap: free -h, vmstat 1.
- Настройте оповещения на превышение использования tmpfs (например, если /dev/shm выше 70% от лимита).
- Периодически проверяйте журналы на предмет ошибок записи в tmpfs.
Роль-based чек-листы
Администратор:
- Иметь бэкап /etc/fstab.
- Подготовить план отката.
- Проверить совместимость с systemd/systemd-tmpfiles, если используется.
Разработчик:
- Проверить обработку ошибок ENOSPC.
- Не полагаться на сохранение данных между перезагрузками.
QA инженер:
- Произвести стресс-тесты записи в tmpfs.
- Проверить время реакции приложений при переходе в swap.
Короткое объявление для команды (100–200 слов)
Мы планируем изменить размер tmpfs на сервере test01 для ускорения CI-пайплайнов. tmpfs — это файловая система в RAM для временных данных. Изменение выполняется через /etc/fstab и не повлияет на постоянные данные; при перезагрузке содержимое tmpfs будет потеряно. Мы установим лимит 4 ГБ, добавим опции nodev,nosuid,noatime и сделаем резервную копию текущего /etc/fstab. План отката: удалить строку из /etc/fstab и перезагрузить систему. Мониторинг: watch free -h и проверка journalctl на наличие ошибок. Ожидаемая дата и время: сегодня 02:00 (локальное время), окно 15 минут. Если у вас есть сервисы, которые зависят от данных в /dev/shm, сообщите до 23:00 сегодня.
Пример записи /etc/fstab с пояснениями
# tmpfs для /dev/shm, ограничение 4 ГБ, безопасные опции
tmpfs /dev/shm tmpfs defaults,rw,nodev,nosuid,noatime,size=4G 0 0После внесения изменений выполните:
mount -aИ проверьте:
df -h /dev/shmDecision tree для выбора метода изменения tmpfs (Mermaid)
flowchart TD
A[Нужно изменить размер tmpfs?] --> B{Требуется перезагрузка}
B -- Да --> C[Изменить /etc/fstab и перезагрузить]
B -- Нет --> D{Можно ли перемонтировать на живой системе}
D -- Да --> E[Использовать mount -o remount,size=X]
D -- Нет --> C
C --> F[Проверить df и журналы]
E --> F
F --> G{Проблемы?}
G -- Нет --> H[Закрыть задачу]
G -- Да --> I[Откатить изменения /просмотр dmesg/journalctl]1-строчная глоссарий
- tmpfs — временная файловая система в памяти; данные могут попадать в swap.
- ramdisk — статически выделенный блок памяти, используемый как блочное устройство.
- swap — пространство для подкачки, используемое ядром для выгрузки страниц памяти на диск.
Секьюрити и приватность
- Храните в tmpfs только те данные, которые безопасно терять при перезагрузке.
- Не используйте tmpfs для постоянного хранения секретных ключей без дополнительной шифровки; содержимое может быть выгружено в swap или прочитано пользователями с правами доступа.
- Рассмотрите шифрование swap, если в системе хранятся чувствительные данные и вы боитесь утечек через swap.
Локальные особенности для Ubuntu и systemd
- В Ubuntu/derivatives бывают нюансы с опцией nofail/nobootwait; на современных системах systemd умеет обрабатывать таймауты через параметры x-systemd.device-timeout.
- Если используете systemd-tmpfiles, учтите, что он может создавать/очищать каталоги в /run и /tmp в соответствии с конфигурациями в /usr/lib/tmpfiles.d/ и /etc/tmpfiles.d/.
Заключение
tmpfs — ценный инструмент для ускорения ввода-вывода временных данных, но он требует осознанного подхода к размеру и безопасности. Правильная практика: измерить текущее потребление, выбрать безопасный лимит, задать его в /etc/fstab или изменить на лету через mount, протестировать и настроить мониторинг. Всегда имейте план отката и бэкап конфигурации.
Вопросы и примеры из вашей инфраструктуры приветствуются — укажите текущий объём ОЗУ и тип нагрузки, и можно будет подобрать рекомендуемый размер tmpfs.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента