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: 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

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