Предположим, у меня есть два сценария. Первый помещает (с помощью команды mv) некоторые файлы в каталог, второй время от времени проверяет каталог и обрабатывает файлы. Меня беспокоит ситуация, когда второй скрипт начинает обработку файла, который на данный момент перемещен лишь частично. Может ли это произойти в реальной жизни в файловой системе XFS?
Состояние гонки при перемещении файлов в Linux
Ответы (2)
Это зависит от того, откуда вы перемещаете файлы. mv ВНУТРИ одной файловой системы является атомарной, в противном случае она должна делать копию, которая не является атомарной (с последующим удалением исходного файла) и склонна к состоянию гонки, которое вы упомянули.
FWIW, это обычная семантика POSIX, ничего особенного для XFS.
Состояние гонки не возникло бы в вашем случае в файловой системе XFS. Однако XFS позволяет нескольким процессам одновременно читать и записывать файл, используя гибкую схему блокировки, в отличие от однопоточной блокировки индексного дескриптора файловых систем Unix. XFS заботится о сериализации записей в одном и том же регионе несколькими процессами.
XFS использует прямой ввод-вывод для доступа к файлу. Прямой ввод-вывод позволяет приложению указать, что его данные не должны кэшироваться в буферном кеше.
При использовании обычного буферизованного ввода-вывода несколько читателей могут одновременно обращаться к файлу, но только одному писателю разрешен доступ к файлу одновременно. При использовании прямого ввода-вывода к файлу могут одновременно обращаться несколько программ чтения и записи.