2012-02-27 24 views
5

Supongamos que tengo dos scripts. El primero coloca (con mv command) algunos archivos en un directorio, el segundo revisa el directorio de vez en cuando y procesa los archivos. La situación que me preocupa es cuando la segunda secuencia de comandos inicia el procesamiento del archivo que solo se mueve parcialmente en este momento. ¿Puede esto suceder en la vida real en el sistema de archivos XFS?Condición de carrera al mover archivos en Linux

Respuesta

6

Depende de dónde mueva los archivos. mv DENTRO de un solo sistema de archivos es atómico; de lo contrario, debe hacer una copia que no sea atómica (seguida de una eliminación del archivo original), y es propensa al tipo de condición de carrera que mencione.

FWIW, esta es la semántica POSIX normal, nada particular de XFS.

+1

La moraleja de la historia es que puedes asegurarte de que estás a salvo por la simple conveniencia de asegurarte de que el primer script coloca los elementos en el directorio desde el mismo sistema de archivos; si tiene dudas, podría convertirlos en un subdirectorio del directorio de destino * primero * y luego moverlos al directorio de destino para asegurarse de que su llegada sea atómica. – zmccord

1

La condición de carrera no ocurriría en su caso en el sistema de archivos XFS. Sin embargo, XFS permite múltiples procesos para leer y escribir un archivo a la vez mediante el uso de esquema de bloqueo flexible en contraste con el sistema de archivos Unix bloqueo de inodo de un solo hilo. XFS se encarga de la serialización de las escrituras en la misma región mediante múltiples procesos.

XFS usa E/S directas para acceder al archivo. La E/S directa permite que una aplicación especifique que sus datos no se almacenan en caché en la memoria caché del búfer.

Al utilizar E/S con búfer normal, múltiples lectores pueden acceder al archivo al mismo tiempo, pero solo un escritor puede acceder al archivo a la vez. Cuando se utilizan E/S directas, múltiples lectores y escritores pueden acceder al archivo simultáneamente.

Cuestiones relacionadas