Accorgimenti per migliorare e impedire blocchi di Davfs2.
Premessa
Davfs2 è un programma per Linux e i sistemi Unix che permette di montare una risorsa WebDav come se fosse un disco fisico.
Se movimentiamo pochi e piccoli file funziona molto bene.
Se lo usiamo per movimentare molti file, di piccole e\o grandi dimensioni e annidati in diversi livelli di directory cominciamo a vedere che progressivamente le prestazioni degradano e dopo alcune migliaia di file copiati-spostati si blocca come se fosse in attesa di qualcosa.
Se ispezioniamo il file di log /var/log/syslog troviamo delle tracce come le seguenti:
Oct 19 20:28:50 MYpc mount.davfs: open files exceed max cache size by 93582 MiBytes
Indizio che indica la necessità di dimensionare la cache.
Possiamo ovviare ai problemi sopra evidenziati agendo sulla configurazione di Davfs2 e sul servizio updatedb.plocate:
- configurazione Davfs2: la dimensione della cache e il posizionamento della cache;
updatedb.plocate: va sospeso perché porta a bloccare la copia dei file.
Quanto segue è descritto per un sistema Linux Mint. Per altre distribuzioni non derivate da Debian cambiano i comandi base, ma tutto resta sostanzialmente uguale. Ad esempio in Mint si invoca apt per gestire i pacchetti, mente in RedHat e derivate si usa dnf.
Tempo di copia
Da considerare che la copia di molti file di piccole dimensioni necessita di molto tempo. Se spostiamo un file grande come la somma dei file piccoli impiega pochi secondi. Questo non dipende da Davfs2, ma dal processo di copia che comporta più accessi e un commit finale. Questo si traduce in tempo aggiuntivo per ciascun file. La somma di tutto per copiare molti file di piccole o piccolissime dimensioni diventa un tempo aggiuntivo anche di decine di volte maggiore rispetto allo spostamento di un file solo grande come la somma di tutti i file.
Inoltre dobbiamo considerare che il protocollo WebDav non è concepito per essere veloce anche se negli ultimi tempi le connessioni internet sono diventate molto veloci un po' per tutti.
Installazione
L'installazione è molto semplice:
sudo apt install davfs2
Dopo l'installazione Davfs2 è immediatamente pronto da usare con un comando come segue:
mount -t davfs 'https://www.example.com/webdav' /mnt
Per smontare la risorsa:
umount /mnt
L'installazione di Davfs2 crea i seguenti file-directory che ci interessano:
/etc/davfs2/davfs2.conf/etc/davfs2/secrets/etc/davfs2/certs/var/cache/davfs2
/etc/davfs2/davfs2.conf è il file di configurazione generale, mentre /var/cache/davfs2 è la directory default dove viene creata la cache.
Cache: dimensione
Per aumentare la dimensione della cache dobbiamo operare su davfs2.conf:
- editiamo il file
sudo nano /etc/davfs2/davfs2.conf
- ipotizzando di portarla a 256000 mega byte
cache_size 256000
L'impostazione sarà esecutiva da subuto su ogni nuovo montaggio.
Cache: directory
Di default Davfs2 crea una cache in /var/cache/davfs2:
- la cache assume dimensioni molto grandi a seconda di quanto copiamo-spostiamo
- assicuratevi di avere un adeguato spazio disponibile (per spostare circa 300 GB Davfs2 ha creato una cache di circa 110 GB)
- avere un disco cache molto veloce non comporta benefici in quanto il collo di bottiglia è la rete ed il protocollo WebDav.
Se vogliamo posizionare la cache in un'altra directory basta operare sul file davfs2.conf: ogni direttiva è commentata. Inoltre la documentazione sul sito ufficiale ( http://savannah.nongnu.org/projects/davfs2 ) è molto utile.
plocate, mlocate e locate
Queste utility servono per trovare rapidamente i file. Funzionano creando un database che periodicamente viene aggiornato da updatedb.*.
Se usiamo Davfs2 io processo updatedb.* comincerà a scansionare e interrogare anche la risorsa WebDav, ma a causa dei lunghi tempi di scansione e interrogazione portano ad una progressiva saturazione della connessione e a tenere aperti decine e decine di file fino a giungere ad una saturazione del disco WebDav che sembrerà bloccato e non sembra nemmeno smontabile. Nei log non troviamo tracci di questo, ma lo possiamo vedere tramite lsof:
sudo lsof /mnt
Per evitare questo /blocco/ possiamo disattivare il servizio di indicizzazione.
Linux Mint di default installa plocate e updatedb.plocate. Possiamo disattivare updatedb.plocate con la seguente istruzione:
sudo systemctl disable plocate-updatedb.timersudo systemctl stop plocate-updatedb.timer
Svuotare la cache
Davfs2 ha un comportamento conservativo della cache. Ciò significa che se ha creato 110 GB di cache, al riavvio del nostro PC li troveremo ancora occupati.
Anche se in generale i computer recenti hanno dischi molto capienti può essere una buona idea svuotarla manualmente:
- verifichiamo la directory della cache
sudo ls /var/cache/davfs2www.example.com-webdav+mnt+root
- diamo il comando di cancellazione
sudo rm -R '/var/cache/davfs2/www.example.com-webdav+mnt+root'
Conclusione
Una configurazione di dettaglio di Davfs2 permette di intervenire su molti altri parametri.
Quanto qui esposto e spiegato serve per migliorare il funzionamento ed evitare blocchi, apparentemente inspiegabili, quanto operiamo da una postazione Linux Mint (ma non solo!)