2012-02-27 14 views
5

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

6

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.

+1

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

1

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.

Problemi correlati