Alcune funzionalità di Linux sono nascoste in bella vista. tmpfs è una di queste. La si usa ogni giorno senza pensarci: ogni volta che si usa /dev/shm, si ispeziona /run, o si lavora su un sistema che monta /tmp come storage in memoria, si sta interagendo con tmpfs. In questa guida vediamo cos’è, dove Linux lo usa già, come montare istanze personalizzate, renderle persistenti e quando ha davvero senso sfruttarlo.
Cos’è tmpfs?
tmpfs è un tipo di filesystem che archivia tutto nella memoria virtuale — RAM e, se necessario, spazio di swap. Si comporta come un filesystem normale: è possibile creare file, impostare permessi e nidificare directory. La differenza è che tutto scompare nel momento in cui viene smontato o il sistema viene riavviato.
Non è la stessa cosa di un RAM disk. Un RAM disk tradizionale (come ramfs) alloca un blocco fisso di memoria in anticipo, lo mantiene indipendentemente da quanto si usa effettivamente e non ha un limite di dimensione, quindi un processo impazzito può silenziosamente consumare tutta la RAM disponibile.
tmpfs è dinamico: consuma solo la memoria necessaria per i file attualmente archiviati. Impostare un limite di 512 MB e usarne solo 50 MB significa che vengono consumati solo 50 MB di RAM. Il kernel gestisce tmpfs direttamente: nessun dispositivo a blocchi, nessun passaggio di formattazione, nessun fsck.
Dove Linux usa già tmpfs
Prima di configurare qualcosa, vale la pena vedere quanto il sistema si affidi già a tmpfs. Eseguire:
mount | grep tmpfs
Su un moderno sistema Linux si otterrà un output simile a questo:
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=1633768k,mode=700)
Ogni punto di mount ha uno scopo specifico:
- /run: dati runtime per il boot corrente — PID file, socket, lock file.
- /dev/shm: memoria condivisa POSIX, usata dalle applicazioni per la comunicazione inter-processo ad alta velocità.
- /run/lock: lock file specifici, montati con
noexec per sicurezza. - /tmp: file temporanei (non tutte le distro lo montano come tmpfs di default).
- /run/user/1000: directory runtime per-utente gestita da systemd-logind.
Per vedere dimensioni e utilizzo attuale:
df -h -t tmpfs
La dimensione predefinita per
/run e
/dev/shm è tipicamente metà della RAM totale — il default del kernel, modificabile.
Montare un filesystem tmpfs manualmente
Creare un mount tmpfs è immediato:
sudo mkdir -p /mnt/ramdisk
sudo mount -t tmpfs -o size=256m tmpfs /mnt/ramdisk
Verifica:
df -h /mnt/ramdisk
# Filesystem Size Used Avail Use% Mounted on
# tmpfs 256M 0 256M 0% /mnt/ramdisk
Per smontare (e cancellare tutto il contenuto):
sudo umount /mnt/ramdisk
Opzioni di mount
Il flag -o accetta diverse opzioni utili (combinabili con virgole):
size= # Dimensione massima: k, m, g o percentuale RAM (es. size=25%)
nr_inodes= # Limite numero di inode (file/directory)
mode= # Permessi sulla root del filesystem (default 1777)
uid= / gid=# Owner della directory root
noexec # Impedisce l'esecuzione di binari
nosuid # Ignora i bit setuid sui binari
nodev # Non consente device file
Un mount scratch sicuro e generico:
sudo mount -t tmpfs -o size=512m,nosuid,nodev,noexec,mode=1777 tmpfs /mnt/scratch
Rendere i mount tmpfs persistenti con /etc/fstab
I mount manuali scompaiono dopo un riavvio. Per renderli persistenti, aggiungere una riga a /etc/fstab:
tmpfs /mnt/ramdisk tmpfs defaults,size=256m,nosuid,nodev,noexec,mode=1777 0 0
I campi sono: filesystem, mount point, tipo, opzioni, dump, pass. Sia dump che pass devono essere 0 per tmpfs — non c’è nulla da eseguire come backup né da fsck.
Per applicare la nuova voce senza riavviare:
sudo mount /mnt/ramdisk
# oppure per ricaricare tutte le voci fstab:
sudo mount -a
Ridimensionare un mount tmpfs a caldo
È possibile ridimensionare un tmpfs live senza smontarlo — utile quando si sottostima lo spazio necessario per una build:
sudo mount -o remount,size=1g /mnt/ramdisk
Il contenuto viene preservato e il ridimensionamento ha effetto immediato.
Casi d’uso pratici
Accelerare le build software
L’output del compilatore, i file oggetto e gli artefatti intermedi vengono scritti e cancellati costantemente durante una build. Su disco questo genera molto seek time (su HDD) o write amplification inutile (su SSD). Su tmpfs sono solo operazioni RAM.
Per un progetto C/C++ o Rust, è possibile reindirizzare la directory di build su tmpfs:
sudo mount -t tmpfs -o size=4g tmpfs /mnt/build
export CARGO_TARGET_DIR=/mnt/build # per Rust
# oppure per CMake:
cmake -B /mnt/build -S /path/al/progetto
Ridurre le scritture su SSD e schede SD
Le schede SD e i drive eMMC hanno cicli di scrittura limitati. Montare /tmp come tmpfs riduce significativamente l’usura. Su Raspberry Pi e sistemi embedded questo può prolungare sensibilmente la vita del supporto.
Su systemd, abilitare il mount di /tmp come tmpfs:
systemctl enable --now tmp.mount
Scratch space rapido per script e processing dati
Quando uno script elabora file di grandi dimensioni (log, dump CSV, file di testo), usare tmpfs come directory di lavoro elimina la latenza I/O. I file scompaiono automaticamente al riavvio senza necessità di pulizia manuale.
Monitorare l’utilizzo di tmpfs
# Panoramica con df
df -h -t tmpfs
# Per dettagli su un mount specifico
stat -f /mnt/ramdisk
# Monitoraggio in tempo reale con watch
watch -n 2 "df -h -t tmpfs"
Limitazioni e avvertenze
- I dati non sono persistenti: tutto ciò che non viene copiato altrove va perso al riavvio o all’unmount.
- Consuma RAM: un tmpfs pieno mette pressione sulla memoria di sistema e può innescare l’uso dello swap.
- Il limite di dimensione non riserva memoria: è un tetto massimo, non un’allocazione anticipata. Impostare size=8g su un sistema con 4 GB di RAM non fallisce immediatamente — fallisce quando si tenta di usare più memoria di quella disponibile.
- Non sostituisce uno storage affidabile: per qualsiasi dato che deve sopravvivere a un riavvio, tmpfs non è lo strumento giusto.
Conclusioni
tmpfs è uno degli strumenti più sottovalutati nell’arsenale del sistemista Linux. Richiede due minuti di configurazione e i benefici sono immediati: build più veloci, meno scritture su disco, scratch space che si pulisce da solo al riavvio. Il punto chiave da ricordare è la natura volatile: tutto ciò che viene salvato in tmpfs deve essere copiato su storage permanente prima dello spegnimento, se ha valore.
Per ambienti di build, sistemi embedded, pipeline di processing dati o semplicemente per ridurre l’usura su SSD, tmpfs è la risposta giusta.
Fonte originale: Linux tmpfs for Speed and Temporary Storage – LinuxBlog.io
tmpfs lets you mount a filesystem entirely in RAM. Here is how Linux already uses it, how to create your own mounts, and where it actually makes sense to use one.
Hayden James (LinuxBlog.io)