Samba: Windows 10 e spazio disponibile insufficiente per la copia

Se Windows 10 comunica spazio insufficiente durante la copia su un disco di rete condiviso tramite Linux/Samba è possibile utilizzare l’opzione “dfree command”.

(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)

Autore: BuDuS

Disegnatore Meccanico, con la passione per l'Informatica. Come hobby, produco piccoli software di (in)utilità.