[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: LVM, 2.4.21, XFS und Snapshots



Toens Bueker schrieb:
> Ich kann zwar Snapshots erzeugen - diese dann aber nicht
> mounten.

Kurz: die Option nouuid und/oder VFS-Lock-Patch fehlt.

Lang:

Jedes XFS-Dateisystem hat eine eindeutige Kennung (UUID). Wenn der 
Snapshot also gemountet werden soll und das dazugehörige Original ist 
gleichzeitig auch gemountet (der Normalfall), muss der Snapshot mit "-o 
nouuid" gemountet werden.

Ein Snapshot ist der Abgriff eines Block-Devices, nicht eines 
Dateisystems. Daher ist das Dateisystem des Snapshots ein Abgriff aus 
dem laufenden System, als hätte man der Kiste den Strom abgezogen. Und 
jetzt dämmert es sicher schon. Da fehlen nicht nur Blocks aus dem 
Pufferspeicher, die noch nicht geschrieben wurden. Das Dateisystem ist 
auch auf jeden Fall unclean. Ein Journal-Replay oder Repair kann gar 
nicht gehen, da Snapshot-Volumes von vorne herein read-only sind.

Dateisysteme müssten also vorher mit umount und sync entladen werden.
Aus diesem Grund gibt es den VFS-Lock-Patch. Der macht etwas ähnliches, 
richtet den Superblock und erlaubt so einen mount-baren Snapshot im 
laufenden Betrieb zu erzeugen. Bei XFS kann man vor dem Snapshot hier 
mit xfs_freeze unterstützen.

Das eigentliche Drama dürfte der VFS-Lock-Patch sein. Ich habe jetzt 
nicht alle Eventualitäten überprüft, aber meines Wissens ist dieser bei 
Debian nirgends dabei. Andere Distris haben solche Voraussetzungen eben 
in ihren aufgeblähten Kerneln.

Einen VFS-Lock-Patch findest Du in einem Unterverzeichnis des Source-tgz 
von LVM. Bei Device-Mapper ist ebenfalls ein VFS-Lock (für DM) im 
Patch-Set integriert. Beide Patch haben das Problem, nichts von XFS zu 
wissen und XFS nimmt einige Änderungen am Core-Kernel vor. Mit XFS 
müssen beide an dieser Stelle angepasst werden:

diff -u b/fs/buffer.c b/fs/buffer.c
--- a/fs/buffer.c       Wed May 22 10:43:49 2002
+++ b/fs/buffer.c       Wed May 22 10:43:49 2002
@@ -378,7 +378,7 @@
        ** after these are done
        */
        sync_inodes(dev);
-       DQUOT_SYNC(dev);
+       DQUOT_SYNC_DEV(dev);
        /* if inodes or quotas could be dirtied during the
        ** sync_supers_lockfs call, the FS is responsible for getting
        ** them on disk, without deadlocking against the lock

Ich habe das hier nur der Übersichtlichkeit in Patch-Deutsch eingefügt. 
Die Änderung würde ich direkt im jeweiligen VFS-Lock-Patch oder nach 
dem Patchen in buffer.c manuell editieren.

-- 
rainer@ellinger.de



Reply to: