Existe-t-il une vérité dans la philosophie que vous devez synchroniser; synchronisation; synchronisation; synchroniser?

27

Lorsque j'ai découvert Linux pour la première fois, en travaillant chez Cisco Systems en 2000, j'ai appris le bien-fondé de la synccommande, utilisée pour vider les tampons sur le disque pour éviter la corruption du système de fichiers / la perte de données. On m'a dit non seulement par des collègues là-bas, mais par des amis à l'université de toujours exécuter sync"quelques" ou "un tas" de fois, c'est-à-dire peut-être 5 à 10 fois, au lieu d'une seule fois.

J'ai continué cette habitude depuis, mais y a-t-il un mérite à cela? Quelqu'un d'autre a-t-il déjà entendu cela? Et surtout, quelqu'un peut-il fournir de bonnes raisons / preuves empiriques pour / contre l'idée que vous devez exécuter syncplus d'une fois pour que cela soit efficace?

Josh
la source

Réponses:

34

Je l'ai entendu (désolé, j'ai oublié où) en tapant la synccommande trois fois (comme dans S Y N C Return:, attendez l'invite, répétez, répétez). J'ai également lu que l'origine était un système particulier où il faudrait quelques secondes pour que le disque finisse de vider ses tampons, même après avoir dit au système d'exploitation que tout allait bien. Taper la commande deux fois de plus a donné au disque suffisamment de temps pour s'installer. Il semble qu'au fil des ans, le but a été oublié, et l'avis a été abrégé comme sync; sync; syncce qui n'aurait pas eu l'effet souhaité (puisque le disque avait signalé le "tout clair", les deuxième et troisième synchronisations se termineraient instantanément et l'invite reviendrait trop tôt).

Je n'ai jamais entendu parler d'un système où plusieurs syncopérations ont une utilité, et je suis très sceptique quant à leur existence. Je considère cela comme une légende urbaine. D'un autre côté, je trouve très crédible qu'il y ait des systèmes où vous devriez attendre quelques secondes après la synchronisation et avant la mise hors tension.

La recherche sur Google conduit à quelques analyses concordantes indépendantes, par exemple The Legend of sync . Voir aussi L'exécution de sync (8) est-elle toujours requise avant d'arrêter Linux? .

Gilles 'SO- arrête d'être méchant'
la source
1
Super merci! J'aurais dû clarifier, alors que je mets sync; sync; sync; syncle titre, et je le tape parfois de cette façon, je l'ai également entendu m'expliquer de la même manière, c'est-à-dire, synchroniser, attendre, synchroniser à nouveau, attendre, etc.
Josh
9

Old-timer ici. À l'époque glorieuse de TAPE, 3 synchronisations rapides consécutives étaient un moyen de dire aux contrôleurs TAPE non seulement de dissocier / de dérouler le flux de bande, mais aussi de le rembobiner, c'est-à-dire de définir la tête FD / rw à 0.

"sync; sync; sync" était vraiment uniquement utilisé, de manière productive, par ceux d'entre nous qui ont fait leurs preuves avec les Unix basés sur TAPE, c'est-à-dire les applications dont les fichiers ont été montés sur / var / spool, le stockage le moins cher possible à l'époque. ;)

Les manuels d'utilisation MIPS Risc / OS contiennent une page à ce sujet.

ibisum
la source
6

Il y avait certainement des systèmes UNIX plus anciens pour lesquels il était plus sûr de synchroniser plus d'une fois, mais pas tous sur une seule ligne de commande comme "sync; sync; sync". Au milieu des années 80, cela s'est distillé pour:

Lorsque vous arrêtez le système, vous synchronisez trois fois. Ni plus ni moins. Trois doit être le numéro de la synchronisation et le nombre de la synchronisation doit être de trois. Tu ne synchroniseras pas quatre fois, tu ne synchroniseras pas deux fois, sauf que tu procèdes à synchroniser une troisième fois ...

Je ne sais pas vraiment d'où viennent les trois temps, sauf peut-être que c'était amusant. Mais le mot dans la rue pour le faire deux fois. Pas comme "sync; sync", mais comme deux lignes distinctes sur le shell.

À l'époque de, disons, V7 UNIX, la réparation du système de fichiers n'était pas très amusante. Vous deviez le faire à la main, en sachant beaucoup sur le fonctionnement du système de fichiers et les particularités de programmes comme dcheck, ncheck et icheck. fsck, si vous l'aviez, n'était pas toujours quelque chose en qui vous auriez confiance.

Cela commence à ressembler à une histoire «nous avons traversé la neige dans les deux sens». Eh bien, nous n'avions pas de commandes sophistiquées comme le redémarrage ou l'arrêt. Lorsque vous vouliez redémarrer le système, vous avez synchronisé le système de fichiers avec la synchronisation, puis vous avez appuyé sur Ctrl-P sur la console pour l'arrêter.

À la fin de la commande de synchronisation, le noyau avait planifié la synchronisation, mais tous les tampons (y compris le superbloc de système de fichiers très important) n'étaient pas nécessairement arrivés sur le disque. Il était donc assez facile d'exécuter la synchronisation, puis d'arrêter les choses avant qu'elles ne soient sûres.

Exécuter à nouveau la synchronisation était une chose facile à faire, prenait du temps et avait un certain attrait intuitif sans avoir à tout comprendre ou à traiter des instructions vagues comme "compter jusqu'à 10" ou quelque chose comme ça.

Il y avait même une section BUG sur la page de manuel V7 pour updateaussi dit:

Avec la mise à jour en cours d'exécution, si le CPU est arrêté juste au moment où la synchronisation est exécutée, un système de fichiers peut être endommagé. Cela est partiellement dû au matériel DEC qui écrit des zéros lorsque les demandes NPR échouent. Un correctif consisterait à ce que sync (1) incrémente temporairement l'heure système d'au moins 30 secondes pour déclencher l'exécution de la mise à jour. Cela donnerait 30 secondes pour arrêter le CPU.

(qui, soit dit en passant, était la toute dernière chose dans le volume 1 des manuels V7)

Au fil du temps, les outils du système de fichiers et les programmes d'arrêt et de redémarrage des systèmes se sont améliorés pour éviter de traiter cela. Le folklore, le vaudou et la magie du système y entrent lorsque le système se comporte mystérieusement. La synchronisation à deux reprises a rendu beaucoup moins probable que vous deviez sortir la pince à épiler pour remonter votre système de fichiers, donc cela est devenu une partie du rituel. Une fois que vous l'avez fait plusieurs fois, vous le faites sans réfléchir. Ensuite, quelqu'un remarque et demande pourquoi. Et la réponse est quelque chose comme, "Toujours le faire de cette façon. C'est plus sûr."

Je ne prétendrai pas que cela fait autorité, et je peux me tromper sur certains détails. Mais je pense que c'est assez proche de l'origine.

Gagner
la source
Cela ressemble à ce que j'ai appris ... mais était-ce juste du vaudou ou y avait-il vraiment une raison? Certaines des autres réponses donnent de bonnes suggestions sur la façon dont cette habitude a pu se former parmi nous sysadmins
Josh
@Josh, la raison a été donnée. "Lorsque la commande de synchronisation s'est terminée, le noyau avait planifié la synchronisation, mais tous les tampons (y compris le superbloc de système de fichiers très important) n'étaient pas nécessairement arrivés sur le disque." Voir aussi: "Selon la spécification standard (par exemple, POSIX.1-2001), sync () planifie les écritures, mais peut revenir avant l'écriture proprement dite." man7.org/linux/man-pages/man2/sync.2.html
sourcejedi