Jump to content

tmpfs (Italiano)

From ArchWiki

tmpfs è un filesystem temporaneo che risiede nella memoria e/o nelle partizioni di swap. Montare le directory come tmpfs può velocizzare l'accesso ai loro file e garantire che il loro contenuto venga automaticamente cancellato al riavvio.

Tip: I file temporanei nelle directory tmpfs possono essere ricreati all'avvio usando systemd-tmpfiles.

Uso

Alcune directory su cui tmpfs(5) è comunemente usato sono /tmp, /var/lock e /var/run. Non usarlo su /var/tmp, perché questa directory è destinata ai file temporanei che vengono conservati durante i riavvii.

Arch usa come directory tmpfs /run, con /var/run e /var/lock presenti come collegamenti simbolici ad essa per compatibilità. È usata anche per /tmp dalle impostazioni predefinite di systemd e non richiede una voce in fstab a meno che non sia necessaria una configurazione specifica.

glibc 2.2 e superiori si aspettano che tmpfs sia montato su /dev/shm per la memoria condivisa POSIX. Il montaggio del tmpfs su /dev/shm è gestito automaticamente da systemd e la configurazione manuale in fstab non è necessaria.

In generale, i task e i programmi che eseguono frequenti operazioni di lettura/scrittura possono trarre beneficio dall'uso di una directory tmpfs. Alcune applicazioni possono addirittura ottenere un guadagno sostanziale scaricando alcuni (o tutti) i loro dati sulla memoria condivisa. Ad esempio, riposizionare il profilo di Firefox in RAM mostra un significativo miglioramento delle prestazioni.

Esempi

Nota: Il consumo effettivo di memoria/swap dipende dalla quantità di memoria utilizzata, poiché le partizioni tmpfs non consumano memoria finché non è effettivamente necessaria.

La dimensione massima di una partizione tmfps è, di default, pari alla metà della RAM disponibile, ma è possibile sovrascrivere questo valore. Per impostare una dimensione massima, in questo esempio per sovrascrivere il montaggio predefinito di /tmp, usare l'opzione size:

/etc/fstab
tmpfs /tmp tmpfs rw,nodev,nosuid,size=2G 0 0

Per specificare un montaggio più sicuro, specificare le seguenti opzioni:

/etc/fstab
tmpfs /www/cache tmpfs rw,size=1G,nr_inodes=5k,noexec,nodev,nosuid,uid=user,gid=group,mode=1700 0 0

Per ulteriori informazioni, consultare la pagina man di tmpfs(5) e Security#File systems.

Riavviare per rendere effettive le modifiche. Sebbene si possa essere tentati di eseguire semplicemente mount -a per rendere immediatamente effettive le modifiche, ciò renderà inaccessibili tutti i file che attualmente risiedono in queste directory (questo è particolarmente problematico per l'esecuzione di programmi con lockfile, ad esempio). Tuttavia, se tutte le directory sono vuote, dovrebbe sicuro eseguire mount -a invece di riavviare (o montarle una alla volta).

Dopo aver applicato le modifiche, verificare che abbiano avuto effetto controllando /proc/mounts e usando findmnt:

$ findmnt /tmp
TARGET SOURCE FSTYPE OPTIONS
/tmp tmpfs tmpfs rw,nosuid,nodev,relatime

Il tmpfs può anche essere temporaneamente ridimensionato senza bisogno di riavviare, per esempio quando un lavoro di compilazione di grandi dimensioni deve essere eseguito a breve. In questo caso, eseguire:

# mount -o remount,size=4G /tmp

Oppure per ridimensionare in base alla RAM:

# mount -o remount,size=80% /tmp

Disabilitare il montaggio automatico

Con systemd, /tmp viene montato automaticamente come tmpfs, se non è già un punto di montaggio dedicato (tmpfs o on-disk) in /etc/fstab. Per disabilitare il mount automatico, effettuare il mask dell'unità systemd tmp.mount.

I file non saranno più memorizzati in un tmpfs, ma sul dispositivo. Il contenuto di /tmp sarà ora conservato tra i riavvii (viene comunque ripulito dopo 10 giorni), il che potrebbe non essere il comportamento desiderato. Per ripristinare il comportamento precedente e pulire automaticamente la cartella /tmp al riavvio, si può usare tmpfiles.d(5):

/etc/tmpfiles.d/tmp.conf
# vedere tmpfiles.d(5)
# abilita sempre la pulizia della directory /tmp
D! /tmp 1777 root root 0

# rimuove i file in /var/tmp più vecchi di 10 giorni
D /var/tmp 1777 root root 10d

# i mountpoint dello spazio dei nomi (PrivateTmp=yes) sono esclusi dalla rimozione
x /tmp/systemd-private-*
x /var/tmp/systemd-private-*
X /tmp/systemd-private-*/tmp
X /var/tmp/systemd-private-*/tmp

Risoluzione dei problemi

L'apertura di link simbolici in tmpfs come root fallisce

Supponendo che /tmp stia usando tmpfs, cambiare la directory corrente in /tmp, creare un file e creare un link simbolico a quel file nella stessa directory /tmp. Al tentativo di lettura del link ci si deve aspettare un errore di autorizzazione negata, dovuto al fatto che /tmp ha il bit sticky impostato.

Questo comportamento può essere controllato tramite /proc/sys/fs/protected_symlinks o semplicemente tramite sysctl: sysctl -w fs.protected_symlinks=0. Vedere Sysctl#Configuration per renderlo permanente.

Attenzione: La modifica di questo comportamento può portare a problemi di sicurezza!

Vedi anche