
He estado usando instantáneas de LVM para realizar copias de seguridad de bases de datos MySQL.
FLUSH TABLES WITH READ LOCK
se emite y luego, lvcreate --snapshot --size 4G
etc. Dado que la base de datos está activa mientras la instantánea está activa, snap_percent
(la cantidad de almacenamiento de instantáneas que se utiliza para rastrear deltas con el estado original del sistema de archivos en el momento en que se tomó la instantánea) comienza a aumentar. Esto snap_percent
se monitorea día tras día y se --size
incrementa en caso de que alcance el 80%.
Mi pregunta es si existe o no una estadística o propiedad equivalente enZFS¿Para determinar cuánto espacio consume una instantánea como porcentaje del espacio restante en el grupo? Obviamente, no necesito pasarle un --size
parámetro, zfs snapshot
pero ¿cómo puedo determinar si el clon basado en esa instantánea se está acercando a los límites del grupo?
Ojalá tenga sentido, seguro que suena como una pregunta complicada ahora que la leo.
Respuesta1
El espacio de las instantáneas ZFS se refleja en el consumo del sistema de archivos. Puede obtener lo que está solicitando monitoreando los campos más apropiados a continuación.
Al final, verás el espacio "disponible" de tu sistema de archivos... ¿Ves cómo "usado"+"disponible" es menor que "tamaño"?:
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
He filtrado el resultado a zfs get all pool/filesystem
continuación para mostrar las propiedades relevantes. A continuación, tengo un sistema de archivos de 800 GB (cuota) donde se usan 545 GB. 391GB esreferenciado, lo que significa que ese es el tamaño de los datos reales. Las instantáneas utilizan 154 GB.
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 -
Luego, mirando las instantáneas... Es posible ver el tamaño individual de las instantáneas y el tamaño total de los datos a los que hacen referencia.
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 -
Y una du
lista del directorio de instantáneas...
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
Respuesta2
Las instantáneas ZFS contienen muchos datos ocultos. Generalmente te recomendaría
zfs list -ro space
Lo que muestra un resultado similar a:
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 - - - -
Esto le dirá que estoy usando un TOTAL de 11,7G en este conjunto de datos en particular y que las instantáneas utilizan 2,8G y el sistema de archivos real (datos activos) utiliza 8,87G. Sin embargo, el tamaño USADO al lado de cada instantánea es muy engañoso.
Si suma todos los números en la columna utilizada para la instantánea, verá que no se acercan al total de USEDSNAP. Esto se debe a que el valor USADO es cuántoúnicoespacio que ocupa cada instantánea.
Por ejemplo:
Si tengo un grupo llamado "newpool" y tiene 2 archivos 1G (archivoA y archivoB):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
Ahora fotografío eso:
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
Ahora elimino 1 de los archivos 1G (archivoA):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
Ahora creo un nuevo archivo 1G (archivoC):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
Ahora lo tomo de nuevo
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 - - - -
Ahora elimino el archivo B (que está en ambas instantáneas):
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 - - - -
Observe cómo funcionó la columna USED de la instantáneanoreflejar el cambio? Esto se debe a que ambas instantáneas hicieron referencia al archivo B y, dado que no es único, no se muestra en el recuento USADO para ninguna instantánea en particular. La columna USEDSNAP refleja que el espacio ha sido utilizado por las instantáneas, pero no lo asocia a ninguna en particular.
Ahora, si eliminaras snap1:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap2 - 1.0G - - - -
snap2 ahora muestra que tiene 1.0G usado porque esos datos ahora son exclusivos de esa instantánea.
La columna USADO le mostrará cuánto espacio puede recuperar si elimina esa instantánea individual, pero no le muestra realmente cuánto espacio está reservando esa instantánea.
Ahora que he dicho todo eso...
Si planea conservar solo una instantánea de cualquier conjunto de datos en particular, entonces ellista zfs -ro espacioEl comando debería darte lo que estás buscando.
Si va a tener varias instantáneas al mismo tiempo, estos datos pueden ser engañosos. No haga lo que le resulte natural y asuma que la columna USADO significa algo cuando se trata de varias instantáneas. También,dues una mala elección en los directorios de instantáneas, ya que eso solo muestra a qué hace referencia la instantánea, no qué espacio está usando realmente la instantánea.
La página de manual de zfs analiza algo de esto, pero no es muy buena para mostrar esas relaciones.
Respuesta3
No existe un equivalente directo en ZFS. El equivalente más cercano es el espacio libre en el grupo, que puedes obtener desde zfs list
. En ZFS, sus instantáneas pueden crecer hasta que todo el grupo se quede sin espacio.