
Ich habe LVM-Snapshots zum Sichern von MySQL-Datenbanken verwendet.
FLUSH TABLES WITH READ LOCK
wird ausgegeben und dann lvcreate --snapshot --size 4G
usw. Da die Datenbank live ist, während der Snapshot aktiv ist, snap_percent
beginnt die (Menge des Snapshot-Speichers, die zum Verfolgen von Deltas mit dem ursprünglichen Zustand des Dateisystems zum Zeitpunkt der Snapshot-Erstellung verwendet wird) zu steigen. Dies snap_percent
wird täglich überwacht und erhöht, --size
falls es 80 % erreicht.
Meine Frage ist, ob es eine entsprechende Statistik oder Eigenschaft gibt inZFSum zu bestimmen, wie viel Speicherplatz von einem Snapshot als Prozentsatz des im Pool verbleibenden Speicherplatzes verbraucht wird? Natürlich muss ich keinen --size
Parameter übergeben, zfs snapshot
aber wie kann ich bestimmen, ob der auf diesem Snapshot basierende Klon die Grenzen des Pools erreicht.
Ich hoffe, das ist verständlich, denn nachdem ich es so gelesen habe, klingt es auf jeden Fall wie eine verworrene Frage.
Antwort1
Der ZFS-Snapshot-Speicherplatz spiegelt sich im Verbrauch des Dateisystems wider. Sie können ableiten, wonach Sie suchen, indem Sie die am besten geeigneten Felder unten überwachen.
Am Ende werden Sie den „verfügbaren“ Speicherplatz Ihres Dateisystems beobachten … Sehen Sie, warum „verwendet“+„verfügbar“ kleiner ist als „Größe“?:
root@deore:~# df -h /volumes/vol1/LA_Specialty
Filesystem size used avail capacity Mounted on
vol1/LA_Specialty 800G 391G 254G 61% /volumes/vol1/LA_Specialty
Ich habe die Ausgabe zfs get all pool/filesystem
unten gefiltert, um die relevanten Eigenschaften anzuzeigen. Unten habe ich ein 800 GB großes Dateisystem (Kontingent), von dem 545 GB verwendet werden. 391 GB sindreferenziert, d. h. dies ist die Größe der tatsächlichen Daten. 154 GB werden von Snapshots verwendet.
root@deore:/volumes# zfs get all vol1/LA_Specialty
NAME PROPERTY VALUE SOURCE
vol1/LA_Specialty type filesystem -
vol1/LA_Specialty creation Sat Sep 24 18:44 2011 -
vol1/LA_Specialty used 545G -
vol1/LA_Specialty available 255G -
vol1/LA_Specialty referenced 391G -
vol1/LA_Specialty compressratio 2.96x -
vol1/LA_Specialty quota 800G local
vol1/LA_Specialty reservation none default
vol1/LA_Specialty recordsize 16K local
vol1/LA_Specialty mountpoint /volumes/vol1/LA_Specialty inherited from vol1
vol1/LA_Specialty usedbysnapshots 154G -
vol1/LA_Specialty usedbydataset 391G -
vol1/LA_Specialty usedbychildren 0 -
vol1/LA_Specialty usedbyrefreservation 0 -
Wenn Sie sich dann die Schnappschüsse ansehen, können Sie die individuelle Größe der Schnappschüsse und die Gesamtdatengröße sehen, auf die sie verweisen.
root@deore:/volumes# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
vol1/LA_Specialty@snap-daily-1-2013-09-07-020003 57.6G - 389G -
vol1/LA_Specialty@snap-daily-1-2013-09-08-020003 1.95G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-09-020008 3.42G - 392G -
vol1/LA_Specialty@snap-daily-1-2013-09-10-020003 3.05G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-11-020003 2.81G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-12-020004 2.65G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-13-020003 2.70G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-14-020003 25K - 391G -
vol1/LA_Specialty@snap-daily-1-latest 25K - 391G -
Und eine du
Auflistung des Snapshot-Verzeichnisses ...
root@deore:/volumes/vol1/LA_Specialty/.zfs/snapshot# du -skh *
389G snap-daily-1-2013-09-07-020003
391G snap-daily-1-2013-09-08-020003
392G snap-daily-1-2013-09-09-020008
391G snap-daily-1-2013-09-10-020003
391G snap-daily-1-2013-09-11-020003
391G snap-daily-1-2013-09-12-020004
391G snap-daily-1-2013-09-13-020003
391G snap-daily-1-2013-09-14-020003
391G snap-daily-1-latest
Antwort2
ZFS-Snapshots enthalten viele versteckte Daten. Generell empfehle ich
zfs list -ro space
Das Ergebnis ist ungefähr wie folgt:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
rootpool/export/home 6.37G 11.7G 2.80G 8.87G 0 0
rootpool/export/[email protected] - 134M - - - -
rootpool/export/[email protected] - 320M - - - -
rootpool/export/[email protected] - 251M - - - -
rootpool/export/[email protected] - 1.02M - - - -
rootpool/export/[email protected] - 1.04M - - - -
rootpool/export/[email protected] - 850K - - - -
rootpool/export/[email protected] - 747K - - - -
rootpool/export/[email protected] - 326K - - - -
rootpool/export/[email protected] - 454K - - - -
rootpool/export/[email protected] - 319K - - - -
Dies zeigt Ihnen, dass ich insgesamt 11,7 G für diesen bestimmten Datensatz verwende und dass 2,8 G von Snaps und 8,87 G vom eigentlichen Dateisystem (aktive Daten) verwendet werden. Die verwendete Größe neben jedem Snapshot ist jedoch sehr irreführend.
Wenn Sie alle Zahlen in der Spalte „used“ für den Snapshot addieren, werden Sie feststellen, dass sie nicht annähernd den USEDSNAP-Gesamtwert erreichen. Dies liegt daran, dass der USED-Wert angibt, wie vieleinzigartigSpeicherplatz, den jeder Snapshot einnimmt.
Zum Beispiel:
Wenn ich einen Pool mit dem Namen „newpool“ habe und dieser zwei 1G-Dateien enthält (fileA und fileB):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
Jetzt schnapp ich mir das:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
newpool@snap1 11.0G 0.0G 0.00G 2.0G 0 0
Jetzt lösche ich 1 der 1G-Dateien (Datei A):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
Nun erstelle ich eine neue 1G-Datei (fileC):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
Jetzt schnapp ich es wieder
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
newpool@snap2 - 0.0G - - - -
Jetzt lösche ich Datei B (die in beiden Snapshots enthalten ist):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 2.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
newpool@snap2 - 0.0G - - - -
Beachten Sie, wie sich die Spalte „USED“ des Snapshots geändert hat.nichtdie Änderung widerspiegeln? Das liegt daran, dass Datei B von beiden Snapshots referenziert wurde und da sie nicht eindeutig ist, wird sie nicht in der USED-Anzahl für einen bestimmten Snapshot angezeigt. Die Spalte USEDSNAP spiegelt wider, dass der Speicherplatz von den Snapshots verwendet wurde, ordnet ihn aber keinem bestimmten zu.
Wenn Sie jetzt Snap1 entfernen würden:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap2 - 1.0G - - - -
snap2 zeigt nun an, dass 1,0 G verwendet werden, da diese Daten nun für diesen Snapshot eindeutig sind.
Die Spalte „VERWENDET“ zeigt Ihnen, wie viel Speicherplatz Sie zurückgewinnen können, wenn Sie diesen einzelnen Snapshot löschen. Sie zeigt Ihnen jedoch nicht, wie viel Speicherplatz dieser Snapshot tatsächlich reserviert.
Nachdem ich das alles nun gesagt habe -
Wenn Sie nur einen Snapshot eines bestimmten Datensatzes speichern möchten, dannzfs-Liste -ro LeerzeichenDer Befehl sollte Ihnen geben, wonach Sie suchen.
Wenn Sie mehrere Snapshots gleichzeitig haben, können diese Daten irreführend sein. Gehen Sie nicht davon aus, dass die Spalte USED bei mehreren Snapshots eine Bedeutung hat. Außerdem:duist eine schlechte Wahl für die Snapshot-Verzeichnisse, da Ihnen dadurch nur angezeigt wird, worauf der Snapshot verweist, und nicht, wie viel Speicherplatz der Snapshot tatsächlich verwendet.
Einiges davon wird auf der Manpage von ZFS erläutert, die Zusammenhänge werden dort jedoch nicht besonders gut dargestellt.
Antwort3
Es gibt kein direktes Äquivalent in ZFS. Das nächste Äquivalent ist der freie Speicherplatz im Pool, den Sie von abrufen können zfs list
. In ZFS können Ihre Snapshots so lange wachsen, bis der gesamte Pool keinen Platz mehr hat.