(Samba / Windows 10: there is not enough space CIFS/SMB)
In azienda dove lavoro ho un Server Linux che condivide varie risorse tramite un unica condivisione.
Mi piace l’idea di avere un unico disco (ex: U:\) dal quale accedere a varie risorse (Documenti, Backup, ecc…) ed alcune workstation.
Per realizzare la cosa ho, appunto, creato un unico share via samba sul quale sono montate (via cifs o altro) le varie risorse.
Il problema nasce nel momento in cui ho scelto come mount point il percorso “/mnt” che risiede sulla partizione root, piccolissima (300Mb totale, liberi una manciata di Mb!) e samba, quando Windows 10 chiede quanto spazio disponibile per la copia dei files, risponde proprio “questa dimensione” e non quanto effettivamente è disponibile sul “mount-point”.
Lo ammetto: per non stare lì a tribolare troppo ho adottato una soluzione ortodossa ma implementata con i piedi, ma funziona e può comunque essere presa come spunto per soluzioni più articolate e corrette.
Sostanzialmente si tratta di sfruttare un’opzione di smb.conf che consente di specificare un comando del sistema operativo che samba deve utilizzare per calcolare lo spazio totale e disponibile su un determinato dispositivo:
dfree command = /usr/local/bin/dfree
Il “dfree”, che va utilizzato nella sezione “[global]” di “smb.conf”, può essere uno script o un eseguibile che risponde fornendo lo spazio totale e quello disponibile, separati da uno spazio.
In genere suggeriscono di creare uno script tipo questo:
#!/usr/bin/env bash
df $1 | tail -n1 | awk '{printf "%s %s\n", $2, $4}'
Nel mio caso specifico ho creato un eseguibile, per una questione di prestazioni; potete farlo creando un file “dfree.c” contenente:
#include <stdio.h>
int main (int argc, char **argv) {
printf("1000000 0\n");
return 0;
}
(il “1000000” potete variarlo per ottenere lo spazio massimo desiderato, praticamente la dimensione massima dei dati che volete avere la possibilità di copiare con una sola operazione … fermo restando che comunque il sistema vi darà picche se riempite la destinazione, ovviamente)
Per compilare e rendere eseguibile il sorgente usare:
gcc -o dfree dfree.c
chmod +x dfree
Se avete trovato l’articolo utile, commenti o insulti sono comunque graditi.
Riferimenti: dfree command (S)