tmpfs (Italiano)

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: infatti, provando a eseguire
mount -a
per rendere immediatamente effettive le modifiche, verranno resi inaccessibili tutti i file che attualmente risiedono nelle directory tmpfs (questo è particolarmente problematico per l'esecuzione di programmi con lockfile, ad esempio). Tuttavia, se tutte le directory sono vuote, dovrebbe essere sicuro eseguire il comando invece di riavviare (o montarle una alla volta).
Applicate 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ò 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 rendere questa configurazione permanente.
Attenzione
La modifica di questo comportamento può portare a problemi di sicurezza!
Vedi anche
Documentazione del kernel Linux