Linux / Commande sync : synchroniser les écritures et choisir leur portée
sync demande au noyau de synchroniser des écritures en mémoire avec le stockage persistant. Avec GNU sync, vous pouvez viser un fichier ou le système de fichiers qui le contient ; sans argument, la portée est le système entier. Cette opération ne démonte pas un volume et ne remplace pas la fermeture des applications avant de retirer un disque.
Comprendre ce qui est synchronisé
Pour améliorer les performances, le système peut différer des écritures et garder des données ou métadonnées en mémoire. Le retour d’une commande de copie ne signifie donc pas que toutes les étapes jusqu’au stockage ont nécessairement terminé. sync utilise les appels de synchronisation du système pour demander leur achèvement.
sync
Cette forme sans argument concerne l’ensemble des écritures en attente des systèmes de fichiers. Sur Linux, les appels sync et syncfs attendent la fin des opérations d’entrée-sortie ; ne généralisez pas cette règle à toutes les implémentations Unix, car la spécification peut permettre un retour plus tôt.
sync ne récupère pas un document qui n’a jamais été enregistré par son application. Les données encore seulement dans les tampons internes de l’application doivent d’abord être transmises au système par l’application elle-même.
Viser un fichier ou son système de fichiers
Pour un fichier existant, dans le répertoire où il se trouve :
sync report.txt
sync -d report.txt
Dans GNU sync, le premier appel emploie fsync pour les données du fichier et ses métadonnées. -d emploie fdatasync : les données et les métadonnées nécessaires à leur lecture cohérente sont synchronisées, sans exiger toutes les modifications de métadonnées comme les seuls horodatages.
Ces formes illustrent deux portées de métadonnées ; il n’est pas nécessaire de les enchaîner pour toute copie. Le fichier doit exister et l’environnement doit permettre la synchronisation demandée. Si l’outil signale une erreur d’ouverture ou de synchronisation, lisez le diagnostic et ne supposez pas que le travail a terminé.
Pour le système de fichiers contenant un fichier donné :
sync -f /mnt/data/report.txt
-f utilise syncfs sur le système de fichiers qui contient ce chemin. Il ne vise pas seulement report.txt. Choisissez donc un fichier réellement situé dans le volume concerné. Un nœud tel que /dev/sdb1 est un fichier spécial dans /dev : le passer à -f peut viser le système contenant ce nœud, plutôt que le volume représenté par le périphérique.
| Forme GNU | Portée |
|---|---|
| sync | Écritures en attente du système entier. |
| sync FICHIER | Données et métadonnées du fichier via fsync. |
| sync -d FICHIER | Données et métadonnées nécessaires à leur restitution via fdatasync. |
| sync -f FICHIER | Système de fichiers contenant le chemin via syncfs. |
Vérifier une réussite silencieuse et traiter une erreur
Une synchronisation réussie est généralement silencieuse. Pour contrôler le statut sans le perdre derrière une autre commande :
if sync report.txt; then
printf 'Synchronisation terminee.\n'
else
sync_status=$?
printf 'Echec de synchronisation, statut %s\n' "$sync_status" >&2
fi
Ce bloc exécute une synchronisation : utilisez-le à la place de l’appel simple si vous avez besoin de cette vérification. Dans GNU sync, 0 indique la réussite et un statut non nul un échec. L’absence d’un fichier, des droits insuffisants, une fonction non prise en charge ou une erreur d’entrée-sortie peuvent demander des traitements différents ; ajouter sudo sans comprendre la cause ne constitue pas un diagnostic.
La portée du résultat compte aussi. L’appel système sync sans argument ne fournit pas de remontée détaillée d’erreurs de chaque fichier ; un retour global ne vérifie pas individuellement tous vos documents. N’interprétez pas un silence ou un code 0 comme une validation du contenu d’une sauvegarde.
Respecter les limites avant le retrait d’un support
Une autre application peut écrire de nouvelles données après la synchronisation. Terminez donc d’abord les opérations et fermez les fichiers, puis effectuez un démontage normal avec umount et sa vérification. sync ne supprime pas les références qui peuvent rendre une cible occupée et ne détache aucun montage.
La persistance dépend de la chaîne complète : système de fichiers, pilote, contrôleur, périphérique et leur traitement des demandes de vidage. Le système attend les garanties fournies par cette chaîne ; cela ne teste ni une panne future ni la validité des données sauvegardées.
À l’échelle d’une application, synchroniser un fichier ne garantit pas nécessairement que son nouveau nom ou son entrée de répertoire a aussi atteint le stockage. Les applications qui ont besoin d’une création ou d’un renommage durable doivent gérer également le répertoire et l’ordre des opérations ; une commande sync sur un fichier isolé n’est pas un protocole complet de transaction.
Le manuel GNU sync détaille les options. Les descriptions Linux de sync et syncfs et de fsync et fdatasync précisent l’attente, les erreurs et les métadonnées concernées.




