Frage

Ich bin Archivierung ein Verzeichnis. Dieses Verzeichnis hat eine Datei, die von einem anderen Prozess geschrieben wird. Wenn ich dies mit Linux tar / Perl Tar-Modul Teer, im Archiv für die Datei den Eintrag gibt es aber die Inhalte sind null.

Vor Teeren die Dateien sind ...

-rw-r--r--  1 irraju dba 28 Feb 18 02:22 a
-rw-r--r--  1 irraju dba 25 Feb 18 02:23 b
-rw-r--r--  1 irraju dba 29 Feb 18 03:38 c

Nach dem entpacken

-rw-r--r-- irraju/dba       28 2009-02-18 02:22:58 a
-rw-r--r-- irraju/dba       25 2009-02-18 02:23:17 b
-rw-r--r-- irraju/dba        0 2009-02-18 03:33:12 c

Wie kann ich dieses Problem beheben? Ich mag, dass die Datei mit den Inhalten im Archiv, um es zu dem Zeitpunkt hat es archiviert wird. Diese Datei kann eine Protokolldatei sein und davon ausgehen, dass wir nicht die Datei-Handle vor Teeren schließen kann.

War es hilfreich?

Lösung

Wie Sie die Frage mit „Linux“ getaggt gibt es eine Chance, dass Sie eine LVM-Partition verwenden. Wenn in der Tat sind Sie auf einer LVM-Partition ausgeführt wird, können Sie die LVM-Snapshot-Funktion verwenden.

Hier ist ein Link auf die entsprechende LVM Dokumentation, wie die Operation auszuführen .

Hier ist ein Teil der LVM Snapshot Intro :

  

Eine wunderbare Einrichtung von LVM vorgesehen ist ‚Schnappschüsse‘. Dies ermöglicht es der Administrator ein neues Block-Gerät zu schaffen, die eine exakte Kopie eines logischen Volumes präsentiert, zu einem bestimmten Zeitpunkt in der Zeit eingefroren. Typischerweise würde dies verwendet werden, wenn einige Batch-Verarbeitung, eine Sicherung zum Beispiel auf dem logischen Datenträger durchgeführt werden muss, aber Sie wollen nicht zu einem Live-System zu stoppen, der die Daten zu ändern. Wenn der Snapshot-Gerät hat sich mit dem Systemadministrator beendet wurde, kann nur das Gerät entfernen. Diese Einrichtung erfordert, dass der Snapshot zu einem Zeitpunkt vorgenommen werden, wenn die Daten auf dem logischen Datenträger in einem konsistenten Zustand befindet - die VFS-Lock-Patch für LVM1 stellt sicher, dass einige Dateisysteme dies automatisch, wenn ein Snapshot erstellt wird, und viele der Dateisysteme in der Kernel 2.6 tun dies automatisch, wenn ein Schnappschuss ohne Patchen erstellt wird.

Andere Tipps

Versuchen Sie, die Dateien zu kopieren ersten ...

cp a a.tmp
cp b b.tmp
cp c c.tmp

... dann Tarball alles zusammen ...

tar *.tmp abc.tar

... und aufzuräumen:

rm *.tmp

Wenn das nicht funktioniert, dann wird der Prozess die Datei Griff halten will keinen Zugriff lesen teilen ...

Sie können feststellen, dass diese auf dem Dateisystem hängt von der verwendeten und der Anwendung, die die Datei zugreift. Die Nähe zu einer generischen Lösung ist ein Dateisystem zu verwenden, die vor dem Ausführen von tar-Snapshots und erstellen einen Snapshot unterstützt.

Ihre zweite Ausgabe wird nach Ihre erste, das kann nicht richtig sein. Ich vermute, dass tar ist hier richtig: wenn es seine Aufgabe tat, die Datei war leer. Sie können hier mit einer Race-Bedingung zu tun hat.

Wie bereits gesagt wurde, kommt es auf das Dateisystem und Betriebssystem verwendet wird. sync ersten (oder was auch immer das Äquivalent auf dem Dateisystem ist), kopieren Sie die Dateien in ein temporäres Verzeichnis und dann tar sie. Wenn das Dateisystem nicht zulassen, dass Sie eine geöffnete Datei zu kopieren, dann bist du SOL; Perl kann nicht um Dateisystem Einschränkungen erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top