Actuellement sur Ubuntu Linux, mais je l'ai également remarqué sur d'autres systèmes d'exploitation. Apparemment, n'importe quel utilisateur peut exécuter la sync
commande - mais pourquoi? Je ne peux que constater l'inconvénient: le système ralentit en raison d'écritures de disque inutiles.
Pourquoi chaque utilisateur peut-il s'exécuter sync
?
/bin/sync
comme son shell, vous pouvez donc synchroniser sans vous connecter.sync
appels (par exemple sur HP-Unix). La raison est d'éviter les attentes inutiles en raison de l'écriture simultanée de nombreuses écritures en attente sur le disque.Réponses:
Il existe de nombreuses façons pour un utilisateur non privilégié de ralentir un système et l'exécution de la synchronisation est loin d'être la plus efficace. D'un autre côté, avoir les données des systèmes de fichiers validées sur disque est une demande tout à fait légitime, donc interdire aux utilisateurs (et donc à leurs processus) de le faire serait excessif.
Dans tous les cas, je ne suis pas d'accord sur votre déclaration "écritures de disque inutiles". Ces écritures sont certainement nécessaires et se produiront automatiquement après une courte période de toute façon.
Il n'y a même aucune garantie que l'appel de synchronisation fera quelque chose de particulier en fonction de sa mise en œuvre. L'appel de synchronisation n'est, comme le définit la norme POSIX , qu'une "suggestion" pour que le système d'exploitation vide ses caches de système de fichiers, il ne force pas nécessairement les vidages à se produire immédiatement. Plus précisément, les appels demandent au système d'exploitation de planifier un vidage du cache, mais il n'y a aucune garantie que cela se produira avant l'heure déjà programmée, bien que l'implémentation Linux attende qu'elle se produise avant de revenir.
De plus, appeler la synchronisation plusieurs fois d'affilée ne ralentirait pas beaucoup les systèmes, comme une fois que les caches sont vidés, si aucun processus n'écrit activement dans des fichiers, les caches sont vides, donc la synchronisation est un no-op.
Si vous voulez vraiment empêcher les utilisateurs d'exécuter la synchronisation sur votre système, vous pouvez simplement exécuter ces commandes:
Cela serait largement inaperçu par les utilisateurs et n'a aucun effet négatif, sauf avec les personnes qui exécutent simplement la synchronisation, puis retirent les périphériques de stockage (par exemple: clé USB) sans les démonter, mais ces utilisateurs agissaient déjà de façon stupide de toute façon.
Notez que je ne recommanderais pas le lien précédent / bin / sync avec / bin / true.
sync
est certainement utile dans certains cas. Par exemple, si vous craignez qu'un arrêt brutal (panne de courant, panique du système, ...) puisse se produire sous peu, cela aiderait à préserver le contenu des systèmes de fichiers. C'est ce que j'appelle une demande légitime.la source
sync
binaire fait est d'appeler lasync()
fonction, donc (comme l'a dit Bonsi Scott) ce que vous demandez vraiment, c'est pourquoi le noyau permet aux utilisateurs non privilégiés d'appelersync()
umount
, ce qui, quel que soit le système d'exploitation, vide toujours les tampons (à moins que le disque ne soit parti ...) au lieu desync
quoi il n'est pas garanti de le faire en fonction du système d'exploitation. Notez que Linuxsync
attend que la vidange soit efficace et peut donc également être approuvée.sync
ne peut pas nuire au système. Il peut le ralentir, mais pas plus que l'exécution de programmes qui accèdent au disque. Pourquoi devrait-il être restreint?Il existe une bonne raison d'autoriser tout utilisateur à s'exécuter
sync
. Cela est nécessaire si certaines opérations doivent être effectuées dans l'ordre, même si le système tombe en panne ou perd de la puissance. Par exemple, considérons un agent de transfert de courrier qui reçoit un e-mail. Une fois qu'il a écrit le fichier contenant l'e-mail dans le spool, il appellesync
, et alors seulement il répond à la machine émettrice pour l'informer que l'e-mail a été reçu. S'il n'appelait passync
et que la machine réceptrice perdait de l'énergie juste après l'envoi de la notification de réception mais avant de valider le fichier sur le disque, l'e-mail serait perdu.Les systèmes d'exploitation retardent les écritures sur disque pour plus d'efficacité. Ils ne peuvent pas savoir quand une application a vraiment besoin que l'écriture se produise. Les applications ont donc la possibilité de dire au système d'exploitation d'écrire maintenant, avec
sync(1)
etsync(2)
etfsync(2)
.la source