Каков правильный способ долговременного переименования файла в файловой системе POSIX? В частности, интересно узнать о fsyncs в каталогах. (Если это зависит от ОС /FS, я спрашиваю о Linux и ext3/ext4).
Примечание. В StackOverflow есть другие вопросы о прочных переименованиях, но AFAICT они не адресуют fsync-ing каталогов (что для меня важно - я даже не модифицирую данные файла).
В настоящее время у меня (на Python):
dstdirfd = open(dstdirpath, O_DIRECTORY|O_RDONLY)
rename(srcdirpath + '/' + filename, dstdirpath + '/' + filename)
fsync(dstdirfd)
Конкретные вопросы:
- Это также неявно fsync исходный каталог? Или я могу закончить с файлом, появляющимся в обоих каталогах после силового цикла (что означает, что мне нужно будет проверить количество жестких ссылок и выполнить ручное восстановление), т.е. Невозможно гарантировать долговременную работу атомарного перемещения?
- Если я fsync исходный каталог вместо целевого каталога, это также неявно fsync каталог назначения?
- Есть ли какие-либо полезные инструменты для тестирования/отладки/обучения (инжекторы ошибок, инструменты самоанализа, ложные файловые системы и т.д.)?
Спасибо заранее.