Pregunta
Comment puis-je mettre à jour un fichier de façon atomique sans que mon programme doive attendre un support physique lent (comme avec la fonction fsync
) ?
J'espère que le système d'exploitation pourra "mettre en mémoire tampon" le typique fsync
y rename
dans la RAM, puis les écrire sur le disque. dans le bon ordre quand cela vous convient.
Fondo
Je développe un logiciel qui fonctionne dans un environnement Linux embarqué personnalisé avec une ext4
système de fichiers. Le programme effectue des mises à jour périodiques d'un fichier sur le disque. Je dois maintenir l'intégrité de ce fichier sans sacrifier les performances de l'application.
D'après ce que j'ai lire la pratique acceptée pour en toute sécurité La mise à jour d'un fichier se fait comme suit :
- créer un nouveau fichier temporaire
- écrire des données dans le fichier temporaire
-
fsync()
le fichier temporaire - renommer le fichier temporaire au nom approprié
-
fsync()
le répertoire contenant
Ce processus me semble logique, mais dans mon application particulière, j'aimerais éviter un appel bloquant à la fonction fsync()
. Je ne me soucie pas du moment où les données sont écrites sur le disque, tant que le fichier est toujours dans un état valide. Si le fichier n'est pas à jour, cela ne pose aucun problème.
Ce que j'ai appris jusqu'à présent
Il semble qu'il y ait déjà pas mal de discussion autour de ext4
et l'utilisation appropriée de fsync
. Si je comprends bien, je pourrait être en mesure de renoncer à l'utilisation de fsync
si auto_da_alloc
est activé pour mon système de fichiers ( lien ), mais je ne suis pas convaincu que ce soit la meilleure solution.