Как прочно переименовать файл в POSIX?

Как правильно переименовать файл в файловой системе POSIX? Особенно интересно о fsyncs накаталоги, (Если это зависит от OS / FS, я спрашиваю о Linux и ext3 / ext4).

ЗаметкаУ StackOverflow есть и другие вопросы о долговременных переименованиях, но, к слову, они не решают проблему синхронизации каталогов (что для меня важно - я даже не изменяю данные файлов).

В настоящее время у меня есть (в Python):

dstdirfd = open(dstdirpath, O_DIRECTORY|O_RDONLY)
rename(srcdirpath + '/' + filename, dstdirpath + '/' + filename)
fsync(dstdirfd)

Конкретные вопросы:

Это также неявно fsync исходный каталог? Или я мог бы в конечном итоге получить файл, отображаемый в обоих каталогах после выключения питания (то есть мне пришлось бы проверить количество жестких ссылок и вручную выполнить восстановление), т. Е. Невозможно гарантировать длительную атомарную операцию перемещения?Если я fsync исходный каталогвместо каталог назначения, это также неявно fsync каталог назначения?Существуют ли какие-либо полезные инструменты для тестирования / отладки / обучения (инжекторы ошибок, инструменты самоанализа, фиктивные файловые системы и т. Д.)?

Заранее спасибо.

Ответы на вопрос(4)

Ваш ответ на вопрос