Состояние гонки при перемещении файлов в Linux - PullRequest
5 голосов
/ 27 февраля 2012

Предположим, у меня есть два сценария.Первый помещает (с помощью команды mv) некоторые файлы в каталог, второй периодически проверяет каталог и обрабатывает файлы.Меня беспокоит ситуация, когда второй сценарий начинает обработку файла, который в данный момент перемещается лишь частично.Может ли это случиться в реальной жизни в файловой системе XFS?

Ответы [ 2 ]

7 голосов
/ 27 февраля 2012

Это зависит от того, откуда вы перемещаете файлы. mv в одной файловой системе является атомарной, в противном случае она должна делать копию, которая не является атомарной (с последующим удалением исходного файла) и склонна к тому типу гонки, о котором вы упомянули.

FWIW, это нормальная семантика POSIX, ничего особенного для XFS.

1 голос
/ 27 февраля 2012

Состояние гонки в вашем случае в файловой системе XFS не возникнет. Однако XFS позволяет нескольким процессам одновременно считывать и записывать файл, используя гибкую схему блокировки, в отличие от файловых систем Unix с однопоточной блокировкой inode. XFS заботится о сериализации записей в одном и том же регионе несколькими процессами.

XFS использует прямой ввод / вывод для доступа к файлу. Прямой ввод / вывод позволяет приложению указать, что его данные не должны кэшироваться в буферном кеше.

При использовании обычного буферизованного ввода-вывода, несколько считывателей могут одновременно получить доступ к файлу, но только одному записывающему разрешен доступ к файлу одновременно. При использовании прямого ввода-вывода к файлу могут одновременно обращаться несколько читателей и писателей.

...