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: