tmpfs to system plików, który żyje w pamięci operacyjnej (RAM), a nie na dysku. Zapisujesz do niego pliki tak samo jak do zwykłego katalogu, ale cała zawartość jest tymczasowa — znika w momencie odmontowania albo po restarcie systemu. Stąd nazwa: temporary filesystem. To nie jest plik-obraz dysku trzymany w RAM, tylko natywny mechanizm jądra Linuksa, który udaje kawałek pamięci jako normalne miejsce na pliki.
Najważniejsze, co musisz zrozumieć: tmpfs jest szybki, bo nie dotyka talerza ani SSD — operacje idą wprost do RAM. Rozmiar jest dynamiczny: jeśli przydzielisz mu 2 GB, ale wrzucisz tam 100 MB, to tylko tyle pamięci faktycznie zajmie. Gdy zabraknie RAM-u, dane mogą trafić do swap, więc tmpfs nie blokuje sztywno fizycznej pamięci. Dlatego dystrybucje montują na nim katalogi, które i tak nie powinny przeżyć restartu: /run, /dev/shm, a czasem /tmp.
Jak to wygląda w praktyce
Sprawdź, co masz zamontowane jako tmpfs:
df -h -t tmpfs
Zobaczysz tam zwykle /run czy /dev/shm. Możesz też zrobić własny montowany katalog, na przykład szybki bufor na pliki tymczasowe builda:
sudo mount -t tmpfs -o size=512M tmpfs /mnt/fastcache
Od teraz wszystko w /mnt/fastcache leci do RAM-u i odmontowanie (umount) wszystko czyści. Żeby montowanie przetrwało restart, dodaj wpis do /etc/fstab. Bywa to wykorzystywane np. do katalogów cache aplikacji webowych albo testów, gdzie liczy się prędkość, a trwałość danych jest zbędna.
Na co uważać
Najczęstszy błąd to traktowanie tmpfs jak zwykłego dysku. Wrzucisz tam 5 GB ważnych logów, zapomnisz, że to RAM, restart — i danych nie ma. Drugi klasyk: dasz mu za duży size i przy obciążeniu zjadasz pamięć potrzebną aplikacjom, co kończy się wpadnięciem w swap albo wizytą OOM killera. Mit, który warto rozbroić: tmpfs nie rezerwuje od razu całego zadeklarowanego rozmiaru — pamięć rośnie wraz z faktycznym użyciem. Pamiętaj też, że dane w tmpfs nie są szyfrowane na dysku, bo na dysk w ogóle nie trafiają (poza ewentualnym swapem).
Pojęcia powiązane: ramfs (starszy, prostszy, bez limitu rozmiaru i bez swapu), swap, /dev/shm, mount i /etc/fstab, RAM disk, oraz OOM killer.