3 votes

Copie atomique de plusieurs répertoires

Cette question concerne le déploiement d'applications web.

Intro (vous pouvez sauter)

J'utilise django, et la façon dont mon hébergeur a configuré son support pour django fait que la webapp est dispersée dans au moins trois endroits :

  • Le code d'application réel dans /something/<my_apps>/
  • Paramètres du site/urls/templates en /something/<my_site>/
  • css, javascript, et autres "médias" en /something_else/media/

Ainsi, lorsque je déploie/mets à jour le site Web, je dois mettre à jour plusieurs répertoires à la fois.

Question réelle :

Existe-t-il un moyen de faire une copie de fichier atomique ? Je ne suis en aucun cas un "expert" des systèmes linux, alors pardonnez mon ignorance.

L'opération de copie impliquait plusieurs arborescences de répertoires, soit deux ou trois, en gros :

copy _tree1 to tree1
copy _tree2 to tree2

Par atomique, je veux dire :

  • C'est soit entièrement copié, soit pas copié du tout. Il ne devrait jamais être dans un état de quelque chose de copié mais quelque chose de raté.
  • C'est fait dans le plus court laps de temps possible. Idéalement, il ne devrait y avoir aucun moment où le système voit la copie en cours, il voit soit l'ancienne version des fichiers, soit la nouvelle version ; à aucun moment il ne verra l'ancienne version du fichier A mais la nouvelle version du fichier B. Si cela n'est pas tout à fait possible, alors cela ne devrait pas prendre plus de quelques milli secondes.

Mon idée est d'avoir quelque chose comme une double mise en mémoire tampon : Je prépare tout dans une zone de transit, par exemple, _tree_x et ensuite copie le déplacer vers tree_x avec devrait être une opération atomique qui change simplement les pointeurs sur le disque.

Je pense qu'un seul de ces copie L'opération move est atomique sous linux (n'est-ce pas ?), mais j'ai besoin que plusieurs opérations de ce type soient également atomiques ; je veux qu'elles soient traitées comme s'il s'agissait d'une seule opération move.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X