Comment puis-je vérifier si mv
est atomique sur mon fs (ext4)?
Le système d'exploitation est Red Hat Enterprise Linux Server version 6.8.
En général, comment puis-je vérifier cela? J'ai regardé autour de moi et je n'ai pas trouvé si mon système d'exploitation était POSIX standard.
strace
?unlink
ourename
portable et atomique fera unlink
échec?Réponses:
Il est intéressant de noter que la réponse pourrait être: "Cela dépend".
Pour être clair,
mv
est spécifié pourLa spécification de la fonction de renommage indique:
Mais la dernière spécification ISO C pour les
rename()
états:Étonnamment, notez qu'il n'y a pas d'exigence explicite d'atomicité. Il peut être requis ailleurs dans la dernière norme C accessible au public, mais je n'ai pas pu le trouver. Si quelqu'un peut trouver une telle exigence, les modifications et commentaires sont les bienvenus.
Voir aussi Rename () atomic?
Selon la page de manuel Linux :
La page de manuel Linux affirme que le remplacement du fichier sera atomique.
Tester et vérifier que l'atomicité peut être très difficile, cependant, si c'est jusqu'où vous devez aller. Vous ne savez pas ce que vous voulez dire dans votre utilisation de "Comment puis-je vérifier si mv est atomique". Voulez-vous des exigences / spécifications / documentation qu'il est atomique, ou avez-vous vraiment besoin de le tester ?
Notez également que ce qui précède suppose que les deux noms de fichiers d'opérande se trouvent dans le même système de fichiers. Je ne trouve aucune restriction standard sur l'
mv
utilitaire pour appliquer cela.la source
rename
atomicité./
un ext4 fs et/tmp
un ext4 fs différent, vous ne pouvez pas atomiquement mv de l'un à l'autre.mv
est basé surrename
un appel système etrename()
est atomique. Vous pouvez consulter la page de manuelrename(2)
.Vous pourriez trouver une réponse sur Is rename () atomic? sur stackoverflow.
Quel type de fs avez-vous utilisé?
la source
En plus de vérifier les appels système et leur atomicité, peut-être
inotify-tools
peut servir de test, bien que je ne sois pas sûr que ce soit une preuve garantie d'atomicité.Ouvrez 2 coquilles. Regardez le répertoire cible du déménagement dans l'un d'eux:
Déplacez un fichier dans le répertoire de l'autre:
Le
inotifywait
ne doit afficher qu'une seule ligne:Il semble atomique par rapport à la réponse à
ls target/
ettouch target/a
, qui produisent des messages multilignes comme:PS
Je pense, au moins, cela montre que la coopération multiprocessus asynchrone sur les fichiers est sûre avec
inotify
(pratiquement atomique): dans tous les cas, vous ne répondriez qu'après avoirinotify
donné le signal final après l'opération. Par exemple, une configuration producteur-consommateur peut être implémentée facilement et en toute sécurité avecinotify
.la source