Verständnisfrage zu LVM-Snapshots
Hi, ich kann im Moment folgendes nicht nachvollziehen: Ich habe ein LV, in welchem eine VM liegt. LV ist 300GB groß, ~100GB belegt. Von diesem LV habe ich einen Snapshot angelegt, 120GB groß. Jetzt habe ich alle Dateien in dem Original LV gelöscht, danach waren da noch 190 MB belegt. Den snapshot habe ich _vor_ dem Löschen angelegt. Nach meinem Verständnis müssten nun all die gelöschten Dateien in den snapshot verschoben werden. Mounte ich den snapshot, sehe ich auch alle Dateien. Es hat mich aber gewundert, wie schnell der Löschvorgang stattfand, immerhin lagen da 50 Dateien à 2 GB drin. Und die müssten ja eigentlich während des Löschens im Hintergrund in den snapshot verschoben werden. Nach df -h ist alles gut: ================================== pc53200:~ # df -h Filesystem Size Used Avail Use% Mounted on ... /dev/mapper/vg_extern-lv_extern 296G 191M 281G 1% /media/lv_extern /dev/mapper/vg_extern-lv_extern_snapshot 296G 102G 180G 37% /media/lv_extern_snapshot =================================== Aber die Ausgabe von lvdisplay bzw. lvs irritiert mich: ================================== lvdisplay: ... --- Logical volume --- LV Name /dev/vg_extern/lv_extern_snapshot VG Name vg_extern LV UUID zVCI3I-vF42-31HJ-ozlU-voqG-tFv2-PGaZve LV Write Access read/write LV snapshot status active destination for /dev/vg_extern/lv_extern LV Status available # open 1 LV Size 300.00 GB Current LE 76800 COW-table size 120.00 GB COW-table LE 30720 Allocated to snapshot 1.33% Snapshot chunk size 8.00 KB Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:10 pc53200:/media/lv_extern # lvs LV VG Attr LSize Origin Snap% Move Log Copy% ... lv_extern vg_extern owi-ao 300.00G lv_extern_snapshot vg_extern swi-ao 120.00G lv_extern 1.33 ===================================== Wieso sind in dem snapshot nur 1,33% belegt ? 100GB Daten in einem 120GB LV sind doch ~83% Belegung. Wo werden denn die Daten gespeichert ? Bernd -- Bernd Lentes Systemadministration Institut für Entwicklungsgenetik HelmholtzZentrum münchen bernd.lentes@helmholtz-muenchen.de phone: +49 89 3187 1241 fax: +49 89 3187 3826 http://www.helmholtz-muenchen.de/idg Wer Visionen hat, soll zum Hausarzt gehen Helmut Schmidt Helmholtz Zentrum München Deutsches Forschungszentrum für Gesundheit und Umwelt (GmbH) Ingolstädter Landstr. 1 85764 Neuherberg www.helmholtz-muenchen.de Aufsichtsratsvorsitzende: MinDir´in Bärbel Brumme-Bothe Geschäftsführer: Prof. Dr. Günther Wess und Dr. Nikolaus Blum Registergericht: Amtsgericht München HRB 6466 USt-IdNr: DE 129521671 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
"Lentes, Bernd"
Ich habe ein LV, in welchem eine VM liegt. LV ist 300GB groß, ~100GB belegt. Von diesem LV habe ich einen Snapshot angelegt, 120GB groß.
Jetzt habe ich alle Dateien in dem Original LV gelöscht, danach waren da noch 190 MB belegt. Den snapshot habe ich _vor_ dem Löschen angelegt. Nach meinem Verständnis müssten nun all die gelöschten Dateien in den snapshot verschoben werden. Mounte ich den snapshot, sehe ich auch alle Dateien.
Es hat mich aber gewundert, wie schnell der Löschvorgang stattfand, immerhin lagen da 50 Dateien à 2 GB drin. Und die müssten ja eigentlich während des Löschens im Hintergrund in den snapshot verschoben werden.
Ein LVM Snapshot enthält zunächst nur Referenzen auf die Daten (Physical Extends - PE) des eigentlichen Volumes. Abzüglich einiger weniger LVM Metadaten dafür nimmt ein Snapshot also keinen zusätzlichen Platz ein. Für die PE selbst wird ein Copy-On-Write (COW) durchgeführt wenn ein PE verändert/überschrieben wird. Stell dir vor, du änderst im Ursprungs-LV eine 200MB Datei, indem du ein Byte auch wirklich veränderst. Dann wird das eine PE (typischerweise 4MB groß), in dem sich das Byte befindet, dupliziert. Der Snapshot bekommt das PE mit dem Urpsungszustand, das Urpsungs-LV das veränderte. Zusätzlich werden dabei noch weitere PEs verändert, in denen sich Filesystem-Metainformationen (Inode der veränderten Datei) wie z.B. Änderungszeitstempel etc. befinden. Durch dieses COW füllt sich langsam der Snapshot, und zwar immer dann, wenn im Ursprungs-LV Daten verändert werden. Soweit so gut. Nun zu deiner Beobachtung, warum das Löschen von Dateien trotz Snapshot so schnell geht und kaum zusätzlichen Platz belegt. Zum einen werden beim Löschen von Dateien typischerweise die Inhalte der Datenblöcke der Dateien nicht verändert. Alle PE, die die eigentlichen Inhalte deiner Dateien tragen werden also gar nicht angefasst und damit durch die COW Strategie auch nicht verändert. Verändert werden Filesystem-Metadaten, indem Verzeichniseinträge entfernt, Inodes verändert und Inodes und Datenblöcke in den Inode und Blockbitmaps als frei markiert werden. Für den Snapshot müssen also nur die PE mit den Metadaten dupliziert werden. Dies ist im Vergleich zu den Inhalten bei dir dann relativ wenig. Wenn du nach dem Löschen anfängst neue Dateien anzulegen und mit Inhalten zu füllen, dann wirst du sehen, das auch durch das dann einsetzende COW der "Daten-PE" der Füllstand deines Snapshots steigt. HTH, Ralf -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Ralf schrieb:
"Lentes, Bernd"
writes: Hallo,
Ich habe ein LV, in welchem eine VM liegt. LV ist 300GB groß, ~100GB belegt. Von diesem LV habe ich einen Snapshot angelegt, 120GB groß.
Jetzt habe ich alle Dateien in dem Original LV gelöscht, danach waren da noch 190 MB belegt. Den snapshot habe ich _vor_ dem Löschen angelegt. Nach meinem Verständnis müssten nun all die gelöschten Dateien in den snapshot verschoben werden. Mounte ich den snapshot, sehe ich auch alle Dateien.
Es hat mich aber gewundert, wie schnell der Löschvorgang stattfand, immerhin lagen da 50 Dateien à 2 GB drin. Und die müssten ja eigentlich während des Löschens im Hintergrund in den snapshot verschoben werden.
Ein LVM Snapshot enthält zunächst nur Referenzen auf die Daten (Physical Extends - PE) des eigentlichen Volumes. Abzüglich einiger weniger LVM Metadaten dafür nimmt ein Snapshot also keinen zusätzlichen Platz ein. Für die PE selbst wird ein Copy-On-Write (COW) durchgeführt wenn ein PE verändert/überschrieben wird. Stell dir vor, du änderst im Ursprungs-LV eine 200MB Datei, indem du ein Byte auch wirklich veränderst. Dann wird das eine PE (typischerweise 4MB groß), in dem sich das Byte befindet, dupliziert. Der Snapshot bekommt das PE mit dem Urpsungszustand, das Urpsungs-LV das veränderte. Zusätzlich werden dabei noch weitere PEs verändert, in denen sich Filesystem-Metainformationen (Inode der veränderten Datei) wie z.B. Änderungszeitstempel etc. befinden. Durch dieses COW füllt sich langsam der Snapshot, und zwar immer dann, wenn im Ursprungs-LV Daten verändert werden.
Soweit so gut. Nun zu deiner Beobachtung, warum das Löschen von Dateien trotz Snapshot so schnell geht und kaum zusätzlichen Platz belegt. Zum einen werden beim Löschen von Dateien typischerweise die Inhalte der Datenblöcke der Dateien nicht verändert. Alle PE, die die eigentlichen Inhalte deiner Dateien tragen werden also gar nicht angefasst und damit durch die COW Strategie auch nicht verändert. Verändert werden Filesystem-Metadaten, indem Verzeichniseinträge entfernt, Inodes verändert und Inodes und Datenblöcke in den Inode und Blockbitmaps als frei markiert werden. Für den Snapshot müssen also nur die PE mit den Metadaten dupliziert werden. Dies ist im Vergleich zu den Inhalten bei dir dann relativ wenig. Wenn du nach dem Löschen anfängst neue Dateien anzulegen und mit Inhalten zu füllen, dann wirst du sehen, das auch durch das dann einsetzende COW der "Daten-PE" der Füllstand deines Snapshots steigt.
HTH, Ralf
Hi, Ok. Ich bin davon ausgegangen, daß Löschen = Ändern = Verschieben in den snapshot bedeutet. Tatsächlich liegen die gelöschten Dateien weiterhin im Original-LV, und im snapshot wird daraufhin verwiesen. Jetzt versteh ich aber etwas anderes nicht: Lt. man lvdisplay ergibt lvisplay -c folgenden Output, durch Doppelpunkte getrennt: * logical volume name * volume group name * logical volume access * logical volume status * internal logical volume number * open count of logical volume * logical volume size in sectors * current logical extents associated to logical volume * allocated logical extents of logical volume * allocation policy of logical volume * read ahead sectors of logical volume * major device number of logical volume * minor device number of logical volume Ich mach das mal auf dem betr. System: ============================================ pc53200:/media/lv_extern_snapshot # lvdisplay -c ... /dev/vg_extern/lv_extern:vg_extern:3:1:-1:1:629145600:76800:-1:0:0:253:9 /dev/vg_extern/lv_extern_snapshot:vg_extern:3:1:-1:1:251658240:30720:-1:0:0:253:10 ============================================= Lt. man ist die 9. Spalte "allocated logical extents of logical volume", was ich als "belegte LE's im LV" übersetze. Wieso ist das bei den LV's (bei den anderen übrigens auch) -1 ? Da müssten doch LE's belegt sein. Bernd Helmholtz Zentrum München Deutsches Forschungszentrum für Gesundheit und Umwelt (GmbH) Ingolstädter Landstr. 1 85764 Neuherberg www.helmholtz-muenchen.de Aufsichtsratsvorsitzende: MinDir´in Bärbel Brumme-Bothe Geschäftsführer: Prof. Dr. Günther Wess und Dr. Nikolaus Blum Registergericht: Amtsgericht München HRB 6466 USt-IdNr: DE 129521671 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (2)
-
Lentes, Bernd
-
Ralf Doering