Linux tmpfs: filesystem in memoria per build più veloci e storage temporaneo ad alte prestazioni
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)
Eye
in reply to Chuck Berray • • •This is so lovely! 💕
Good on you for not wanting to disturb them. 👍
ivan
in reply to Chuck Berray • • •