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
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.
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.
- 1. Condición de carrera en glibc/NPTL/Linux mutexes robustos?
- 2. Condición de carrera de la pizarra multijugador
- 3. condición de carrera en el bloqueo común en el archivo?
- 4. Provocar una condición de carrera en Java
- 5. Condición de carrera en C# constructor estático
- 6. Evitar una condición de carrera de javascript
- 7. Formas de encontrar una condición de carrera
- 8. SQL Server Process Queue Condición de carrera
- 9. rubí condición de carrera simple pregunta
- 10. C# Enhebrado: una condición de carrera ejemplo
- 11. Condición Carrera por "Remember Me" cookies persistentes
- 12. ¿Cómo puede Linux trazar ser inseguro o contener una condición de carrera?
- 13. condición de carrera Monitor.Wait/Pulse en un servidor multiproceso
- 14. ¿Qué pasa con la condición de carrera en lectura multiproceso?
- 15. ¿Cómo evito una condición de carrera en mi aplicación Rails?
- 16. Condición de carrera en controlador de señales C rompecabezas
- 17. Evitar una condición de carrera de horquilla()/SIGCHLD
- 18. Node.js y el sistema de archivos: ¿es esta una condición de carrera?
- 19. Diferencia entre condición de carrera y punto muerto
- 20. ¿Condición de carrera para crear un directorio con New-Item?
- 21. ¿Condición de carrera con los trabajadores de la web al configurar el controlador de mensajes?
- 22. Comando de Linux para mover un directorio
- 23. Concurrencia de Java en la práctica: condición de carrera en BoundedExecutor?
- 24. ¿Código de prueba de unidad basado en el hilo? Forzar una condición de carrera
- 25. ¿Una transacción detiene todos los problemas de condición de carrera en MySQL?
- 26. Mover gran cantidad de archivos
- 27. SQL Server Condición de condición Pregunta
- 28. Mover archivos entre carpetas
- 29. condición de alcance o la carrera de jQuery en AJAX/getJSON
- 30. ¿Existe una posible condición de carrera en esta declaración de ACTUALIZACIÓN?
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