← Linux: файловая система вглубь
10 мин · просто · Урок 4 из 7

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)

Типичные точки монтирования:

ТочкаДля чего
/runruntime-состояние служб: 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.

Дрилл · вопросы как на собесе

Проверь себя без подсказок

Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.

01

Что такое tmpfs и чем она отличается от ramdisk?

LIN-134
02

Чем /run отличается от /tmp?

LIN-136

Прошли материал до конца? Отметьте урок пройденным.