Comando sync in Linux: sincronizzare le scritture prima di rimuovere un disco
sync chiede al sistema di trasferire verso la memoria persistente le scritture ancora conservate nelle cache del file system. Può servire ad attendere la sincronizzazione dopo una copia, ma non smonta il volume e non sostituisce la rimozione sicura di un dispositivo esterno.
Linux può tenere temporaneamente in memoria dati già scritti dalle applicazioni per migliorare le prestazioni. Senza argomenti, sync riguarda le scritture pendenti del sistema; con GNU sync puoi limitare la richiesta a determinati file o ai file system che li contengono. I buffer ancora interni a un'applicazione devono prima essere salvati dall'applicazione stessa.
Sintassi e implementazione
sync [option] [file...]
È una sintassi descrittiva: parentesi e segnaposto non si digitano. Qui le opzioni con file si riferiscono a GNU Coreutils. Controlla sync --version, sync --help e man sync sul sistema di destinazione; altre implementazioni possono avere interfacce diverse.
Nel caso GNU, il programma usa chiamate al sistema: senza file chiede una sincronizzazione generale; per un file usa normalmente fsync, con -d usa fdatasync e su Linux con -f usa syncfs. Questi nomi spiegano la differenza di ambito, non sono comandi da digitare nella shell al posto di sync.
Esempi di sincronizzazione
Scritture pendenti dell'intero sistema
sync
Chiede la sincronizzazione generale. Su Linux moderno la chiamata sottostante attende il completamento delle operazioni di ingresso e uscita coinvolte. Può impiegare tempo se vi sono molte scritture o un dispositivo lento: l'assenza di un indicatore di avanzamento non significa che il programma sia bloccato.
Un file specifico
sync report.txt
Il file report.txt deve già esistere nella directory corrente ed essere accessibile. Il comando non lo crea e non copia nulla. GNU sync richiede la sincronizzazione dei suoi dati e dei metadati associati, cioè delle informazioni che descrivono il file. Non equivale a sincronizzare tutti gli altri file del volume.
Il file system che contiene un file
sync -f /mnt/data/report.txt
Il percorso deve indicare un file presente nel file system desiderato. L'ambito è l'intero file system che lo contiene, quindi possono essere coinvolti anche altri file. Verifica prima che il volume atteso sia effettivamente montato su /mnt/data: se manca il montaggio, un percorso esistente può appartenere al file system sottostante.
Per scegliere il volume consulta le guide a lsblk e mount. Con -f usa un percorso dentro il volume, non il nodo /dev/sdb1: il nodo di dispositivo è un file nel file system di /dev e non identifica nello stesso modo il file system montato che vuoi sincronizzare.
Capire l'assenza di output e lo stato di uscita
Una sincronizzazione riuscita normalmente non stampa un messaggio. In una shell come Bash puoi leggere subito lo stato dell'ultimo comando:
sync
echo $?
Esempio di risultato quando il comando termina con successo:
0
$? contiene lo stato dell'ultimo comando della shell. Devi leggerlo subito dopo sync: eseguire prima un altro comando ne sostituisce il valore. Lo 0 dell'esempio non è una misura di velocità né un conteggio di byte.
Un valore diverso da zero o un messaggio di errore richiede di verificarne il motivo, per esempio un file inesistente, un problema di accesso o un errore segnalato dal sistema. Non scollegare il dispositivo trattando l'errore come un semplice ritardo. D'altra parte, la chiamata generale sync() non restituisce un rapporto completo degli errori di scrittura: uno stato 0 del comando senza file non certifica la salute del disco o la completezza del backup.
Opzioni e ambito della richiesta
| Forma | Ambito |
|---|---|
| Senza argomenti | Richiede la sincronizzazione generale delle scritture pendenti del sistema. |
file |
In GNU sync sincronizza dati e metadati del file indicato. |
-d |
Per i file indicati sincronizza dati e metadati necessari a recuperarli, evitando quelli non necessari. |
-f |
Sincronizza i file system che contengono i percorsi indicati. |
-d non significa ignorare qualunque metadato: per esempio, una dimensione del file necessaria alla lettura corretta deve essere sincronizzata. Non scegliere questa opzione soltanto come presunta garanzia di maggiore velocità. Se devi usare opzioni aggiuntive, verifica la loro combinazione nell'implementazione installata.
La sincronizzazione di un singolo file non rende automaticamente persistente ogni modifica alla directory che lo contiene, come una nuova voce o una rinomina. Le applicazioni che richiedono garanzie precise devono gestire correttamente file, directory e salvataggio dei propri buffer; sync non sostituisce quel protocollo.
Prima di scollegare una memoria esterna
- Attendi la fine delle copie e salva i documenti nelle applicazioni. Ferma le attività che potrebbero continuare a scrivere sul volume.
- Se usi sync, attendine il ritorno e controlla eventuali errori. File sincronizzati ora possono essere modificati di nuovo da un programma ancora attivo.
- Smonta normalmente i file system del dispositivo o usa la funzione di rimozione sicura dell'ambiente desktop. Verifica che l'operazione sia riuscita e riguardi tutti i volumi del dispositivo prima di scollegarlo.
La guida a umount spiega come gestire un volume occupato. Non ricorrere allo smontaggio differito come prova che tutte le attività siano già terminate. Un dispositivo che contiene più partizioni può avere più file system montati.
Su Linux la sincronizzazione attende il completamento segnalato dal sistema e dal dispositivo, ma non offre una garanzia assoluta contro hardware difettoso, errori del firmware o interruzioni di alimentazione. Non va interpretata come verifica di un backup o prova che ogni cache hardware funzioni correttamente. Le garanzie di persistenza possono inoltre differire tra sistemi operativi.
Domande frequenti
Basta sync prima di rimuovere una chiavetta USB?
No. La sincronizzazione non smonta il file system e non impedisce nuove scritture. Termina il lavoro, esegui uno smontaggio normale o la rimozione sicura e attendi che l'operazione riesca prima di scollegare il dispositivo.
Documentazione di riferimento
Il manuale GNU sync descrive le opzioni; il manuale Linux di sync e syncfs chiarisce ambito, attesa ed errori. Il manuale di fsync e fdatasync distingue i metadati e la directory. Il sorgente ufficiale GNU Coreutils di sync mostra le chiamate usate dalle diverse modalità.




