tmpfs: файловая система в памяти
tmpfs: файловая система в оперативной памяти.
Что такое tmpfs
tmpfs — файловая система, которая держит свои файлы в оперативной памяти, а не на диске. Каталог выглядит как обычный, туда пишут и читают привычными командами, но за этим нет ни одного блока на носителе.
Из этого следует главное свойство: содержимое живёт только до перезагрузки. Выключили или перезагрузили машину — всё, что лежало в tmpfs, пропало. Никакого восстановления не будет, потому что записывать было некуда.
$ echo test > /run/mydata
$ cat /run/mydata
test
# после reboot файла /run/mydata уже не существует
Память выделяется по мере записи
Частая путаница: tmpfs называют «ramdisk фиксированного размера». Это не так. Ramdisk резервирует блок памяти сразу, а tmpfs занимает ровно столько, сколько в неё реально записали, и растёт до заданного лимита.
Пустая точка монтирования на 512 МБ не отъедает 512 МБ памяти. Она возьмёт память только когда туда положат файлы, и не больше лимита.
$ df -h /run
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.6G 1.3M 1.6G 1% /run
# Size — это лимит, Used — реально занятое сейчас
Второе отличие от ramdisk: под давлением памяти ядро может вытеснить неиспользуемые страницы tmpfs в swap (раздел или файл подкачки на диске). То есть данные способны временно уйти на диск, если оперативной памяти не хватает.
Где tmpfs встречается
Посмотреть все смонтированные tmpfs можно фильтром по типу:
$ mount | grep tmpfs
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=1600000k)
Типичные точки монтирования:
| Точка | Для чего |
|---|---|
/run | runtime-состояние служб: pid-файлы, сокеты, временные конфиги |
/dev/shm | разделяемая память (shared memory) между процессами |
/run/user/<uid> | сессионные файлы конкретного пользователя |
/run держит то, что имеет смысл только для текущей загрузки: pid-файлы демонов, unix-сокеты, промежуточное состояние. После перезагрузки всё это создаётся заново, хранить его на диске нет смысла.
/dev/shm использует shared memory: несколько процессов кладут туда общий кусок данных и работают с ним без копирования через ядро.
/tmp — как повезёт
Ещё одно заблуждение: «/tmp всегда tmpfs». На деле это зависит от дистрибутива и настроек. Где-то /tmp монтируют как tmpfs через unit tmp.mount, где-то это обычный каталог на корневом разделе диска.
Проверить, что у вас, можно так:
$ findmnt /tmp
# если строка есть и TYPE=tmpfs — /tmp в памяти
# если вывода нет — /tmp лежит на диске в составе корневой ФС
Разница ощутима на практике. Если /tmp в tmpfs, крупный временный файл съедает оперативную память и может упереться в лимит. Если /tmp на диске, тот же файл переживёт даже перезагрузку до очистки, но упрётся в место на разделе, а не в память.
Что важно запомнить
tmpfs — файловая система в оперативной памяти, содержимое исчезает при перезагрузке.
Память берётся по мере записи до лимита, а не резервируется сразу; под нехватку памяти данные могут уйти в swap.
mount | grep tmpfs и df -h /run показывают, что смонтировано и сколько занято.
Типичные точки: /run (состояние служб), /dev/shm (shared memory); /tmp — как настроит дистрибутив, проверяется через findmnt /tmp.
В следующем уроке — разделы диска и swap.
Дрилл · вопросы как на собесе
Проверь себя без подсказок
Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.
Что такое tmpfs и чем она отличается от ramdisk?
LIN-134Чем /run отличается от /tmp?
LIN-136Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс