Sync
| Fiche express | |
|---|---|
| Domaine | Gestion de la mémoire — cache d'écriture disque (write-back) |
| Commande | sync
|
| Contexte | Avant shutdown/redémarrage ou retrait d'un média amovible — force l'écriture sur disque des pages modifiées en attente
|
| Voir aussi | Purger le cache mémoire (étape suivante si on veut aussi libérer le cache), Shutdown |
sync force l'écriture immédiate sur disque de toutes les données modifiées (« dirty ») encore présentes dans le cache mémoire du noyau (write-back cache), pour tous les systèmes de fichiers montés.
Le cache d'écriture (write-back)
Sous Linux, une écriture (write()) ne va en général pas directement sur le disque : elle est d'abord posée en mémoire, dans le page cache, et marquée comme « dirty » (modifiée mais pas encore synchronisée sur le support physique). Des threads noyau (writeback) se chargent ensuite de vider ce cache vers le disque de façon asynchrone, périodiquement ou quand la proportion de mémoire « dirty » dépasse certains seuils (vm.dirty_ratio, vm.dirty_background_ratio).
Ce mécanisme est ce qui rend les écritures rapides du point de vue de l'application, mais il a une contrepartie : tant que les données n'ont pas été effectivement écrites sur le disque, elles n'existent que dans une mémoire volatile. Une coupure de courant, un crash noyau ou un retrait physique du support à ce moment-là peut faire perdre ces écritures, même si l'application pense avoir déjà « écrit » le fichier.
sync
sync # force l'écriture sur disque de toutes les pages "dirty" en attente, tous systèmes de fichiers confondus
sync ne prend pas d'argument obligatoire : il agit globalement, sur l'ensemble des systèmes de fichiers montés, et rend la main une fois l'écriture effectivement terminée (ce n'est pas une simple demande asynchrone).
sync vs fsync/fdatasync
sync est une commande shell qui agit au niveau du système entier. À l'intérieur d'un programme, l'équivalent au niveau d'un seul fichier se fait via les appels système POSIX fsync(fd) et fdatasync(fd) :
fsync(fd)— force l'écriture sur disque des données du fichier et de ses métadonnées (taille, dates, propriétaire…).fdatasync(fd)— force l'écriture des données uniquement, en évitant de synchroniser les métadonnées si elles n'ont pas d'incidence sur une lecture ultérieure (par exemple la date de dernière modification) ; plus rapide quefsyncquand la taille du fichier n'a pas changé.
Ces deux appels sont utilisés par des applications qui ont besoin d'une garantie de durabilité précise sur un fichier donné (bases de données, journaux de transactions) sans attendre — ni imposer — un sync global de toute la machine.
Usage classique
- Avant un arrêt ou un redémarrage — historiquement
sync(souvent invoqué deux ou trois fois de suite, par prudence sur d'anciens systèmes) précédait unhaltou unrebootpour s'assurer qu'aucune donnée en cache ne serait perdue. Sur les systèmes modernes, Shutdown et l'arrêt propre des systèmes de fichiers s'en chargent déjà automatiquement, mais le réflexe reste utile en diagnostic ou sur un système qu'on s'apprête à couper brutalement (coupure d'alimentation forcée, halt d'une VM). - Avant de retirer un média amovible — après avoir copié des données sur une clé USB ou une carte SD (notamment avec
cpoudd, qui ne garantissent pas une écriture immédiate), unsyncavant de démonter (umount) et de débrancher le support évite de retirer le média avant que les données ne soient réellement écrites. Les outils de démontage graphiques (gestionnaires de fichiers,udisksctl) le font normalement pour vous, maissyncreste la vérification manuelle de référence.
Purge du cache mémoire
sync n'a pas pour effet de libérer le cache mémoire, seulement de le rendre cohérent avec le disque : les pages restent en cache tant que le noyau n'a pas besoin de cette mémoire ailleurs. Pour forcer explicitement la libération du cache après un sync, voir Purger le cache mémoire (echo 3 > /proc/sys/vm/drop_caches) — à réserver à un benchmark ou un diagnostic ponctuel, cette purge a un coût en I/O le temps que le cache se repeuple et n'est pas une opération de maintenance courante.
Voir aussi
- Purger le cache mémoire — libérer le cache de pages après un
sync - Shutdown — arrêt et redémarrage du système