Supponiamo di avere due script. Il primo mette (con il comando mv) alcuni file in una directory, il secondo controlla la directory una volta ogni tanto ed elabora i file. La situazione di cui mi preoccupo è quando il secondo script inizia l'elaborazione del file che è solo parzialmente spostato al momento. Può succedere nella vita reale sul file system XFS?Condizioni di race durante lo spostamento di file su Linux
risposta
Dipende da dove si stanno spostando i file. mv WITHIN un singolo filesystem è atomico, altrimenti deve fare una copia che non sia atomica (seguita da una cancellazione del file originale), ed è incline al tipo di condizioni di gara che menzioni.
FWIW, questa è la semantica POSIX normale, niente di particolare per XFS.
Condizioni di competizione non si verificano nel tuo caso nel file system XFS. Tuttavia XFS consente a più processi di leggere e scrivere un file in una sola volta utilizzando uno schema di blocco flessibile in contrasto con il blocco di inode a thread singolo del file system Unix. XFS cura la serializzazione delle scritture sulla stessa regione da più processi.
XFS utilizza l'I/O diretto per l'accesso al file. L'I/O diretto consente a un'applicazione di specificare che i suoi dati non devono essere memorizzati nella cache del buffer.
Quando si utilizza I/O normale, memorizzato nel buffer, più lettori possono accedere contemporaneamente al file, ma solo a un singolo writer è consentito l'accesso al file alla volta. Quando si utilizza l'I/O diretto, più lettori e scrittori possono accedere al file contemporaneamente.
- 1. Disabilita animazione durante lo spostamento di CALayers
- 2. Spostamento di un file su Linux in C
- 3. Ritardo durante lo spostamento di CALayer con gesto di panoramica
- 4. È un costruttore di spostamento privato per impedire lo spostamento?
- 5. SQL Server Race Condition Domanda
- 6. ReactJS concomitante SetState race condition
- 7. Render oggetto selezionato solo durante lo spostamento, ridimensionamento e rotazione
- 8. std :: list - gli iteratori sono invalidati durante lo spostamento?
- 9. Race tra lo System.out e System.err in java
- 10. Spostamento di file su Amazon S3 mantenendo gli URL
- 11. Spostamento di file tra cartelle
- 12. Spostamento di file in python
- 13. Spostamento di file all'interno di Xcode
- 14. Spostamento di file da riga di comando
- 15. TFS spostamento di file con la storia
- 16. Creazione di file eseguibili su Linux
- 17. Scrittura atomica su file su linux
- 18. Raspberry Pi 2 - Distorsione durante lo spostamento di oggetti in modalità Ritratto
- 19. Errore durante il collegamento statico di libgmp su Linux
- 20. Spostamento di un numero elevato di file
- 21. Istruzione non valida durante la programmazione di C++ su Linux
- 22. Errore di assemblaggio durante la compilazione di un file C su Linux
- 23. Perché lo spostamento di una variabile puntatore non lo imposta su null?
- 24. File Linux IO - Prestazioni di multithreading - scrittura su file diversi
- 25. TFS 2010: cronologia persa dopo lo spostamento di una cartella
- 26. Errore durante la compilazione di MonoDevelop 5.3 su Linux
- 27. Libreria mancante durante l'installazione di gemma ruby-filemagic su Linux
- 28. R file di elenco con condizioni multiple
- 29. Come gestire la struttura nidificata durante lo spostamento con monade di stato
- 30. Spostamento di un file nel Cestino (PHP)
La morale della storia è che puoi assicurarti di essere al sicuro con il semplice espediente di assicurarti che il primo script inserisca gli elementi nella directory dallo stesso file system; in caso di dubbio, è possibile convertirli in una sottodirectory della directory di destinazione * prima * e quindi spostarli nella directory di destinazione per assicurarsi che il loro arrivo sia atomico. – zmccord