
Tenho usado instantâneos LVM para fazer backup de bancos de dados MySQL.
FLUSH TABLES WITH READ LOCK
é emitido e, em seguida, lvcreate --snapshot --size 4G
etc. Como o banco de dados está ativo enquanto o instantâneo está ativo, a snap_percent
(quantidade de armazenamento de instantâneo sendo usada para rastrear deltas com o estado original do sistema de arquivos no momento em que o instantâneo foi obtido) começa a aumentar. Isso snap_percent
é monitorado dia a dia e --size
aumenta caso chegue a 80%.
Minha pergunta é se existe ou não uma estatística ou propriedade equivalente emZFSpara determinar quanto espaço está sendo consumido por um instantâneo como porcentagem do espaço restante no pool? Obviamente não preciso passar um --size
parâmetro, zfs snapshot
mas como posso determinar se o clone baseado nesse instantâneo está próximo dos limites do pool.
Espero que isso faça sentido, com certeza parece uma questão complicada agora que li.
Responder1
O espaço do snapshot ZFS é refletido no consumo do sistema de arquivos. Você pode obter o que está solicitando monitorando os campos mais apropriados abaixo.
No final, você observará o espaço "disponível" do seu sistema de arquivos... Veja como "usado"+"disponível" é menor que "tamanho"?:
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
Filtrei a saída zfs get all pool/filesystem
abaixo para mostrar as propriedades relevantes. Abaixo, tenho um sistema de arquivos de 800GB (cota) onde são usados 545GB. 391 GB éreferenciado, o que significa que esse é o tamanho dos dados reais. 154 GB são usados por instantâneos.
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 -
Então, olhando para os instantâneos... É possível ver o tamanho individual dos instantâneos e o tamanho total dos dados aos quais eles fazem referência.
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 -
E uma du
listagem do diretório de snapshots...
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
Responder2
Os instantâneos do ZFS contêm muitos dados ocultos. Geralmente eu indicaria você para
zfs list -ro space
Que mostra uma saída semelhante 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 - - - -
Isso lhe dirá que estou usando um TOTAL de 11,7G neste conjunto de dados específico e que 2,8G é usado por snaps e 8,87 é usado pelo sistema de arquivos real (dados ativos). No entanto, o tamanho USADO próximo a cada instantâneo é muito enganador.
Se você somar todos os números na coluna usada para o instantâneo, verá que eles não chegam nem perto do total USEDSNAP. Isso ocorre porque o valor USADO é quantoexclusivoespaço que cada snapshot contém.
Por exemplo:
Se eu tiver um pool chamado "newpool" e ele tiver 2 arquivos 1G (arquivoA e arquivoB):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
Agora eu tiro isso:
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
Agora excluo 1 dos arquivos 1G (arquivoA):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
Agora crio um novo arquivo 1G (fileC):
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
Agora eu tiro de novo
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 - - - -
Agora eu excluo o arquivoB (que está em ambos os instantâneos):
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 como foi o desempenho da coluna USED do instantâneonãoreflete a mudança? Isso ocorre porque fileB foi referenciado por ambos os snapshots e, como não é exclusivo, não é mostrado na contagem USED de nenhum snapshot específico. A coluna USEDSNAP reflete que o espaço foi utilizado pelos snapshots, mas não o associa a nenhum em particular.
Agora, se você removesse o snap1:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap2 - 1.0G - - - -
snap2 agora mostra que 1.0G foi usado porque esses dados agora são exclusivos para aquele instantâneo.
A coluna USADO mostrará quanto espaço você pode recuperar se excluir aquele instantâneo individual, mas não mostra quanto espaço esse instantâneo está reservando.
Então agora que eu disse tudo isso -
Se você planeja manter apenas um instantâneo de qualquer conjunto de dados específico, então olista zfs -ro espaçocomando deve fornecer o que você está procurando.
Se você tiver vários instantâneos ao mesmo tempo, esses dados podem ser enganosos. Não faça o que é natural e presuma que a coluna USED significa alguma coisa ao lidar com vários instantâneos. Também,vocêé uma escolha ruim nos diretórios de snapshots, pois apenas mostra o que é referenciado pelo snapshot, e não qual espaço o snapshot está realmente usando.
A página de manual do zfs aborda algumas dessas coisas, mas não é ótima para mostrar esses relacionamentos.
Responder3
Não há equivalente direto no ZFS. O equivalente mais próximo é o espaço livre no pool, que você pode obter em zfs list
. No ZFS, seus snapshots podem crescer até que todo o pool fique sem espaço.