Atualmente, estou capturando instantaneamente meu NAS baseado em ZFS todas as noites e semanalmente, um processo que me salvou algumas vezes. No entanto, enquanto a criação do instantâneo é automática (do cron), a exclusão de instantâneos antigos ainda é uma tarefa manual. Obviamente, existe o risco de que, se eu for atropelado por um barramento, ou a tarefa manual não for realizada, o NAS ficará sem espaço em disco.
Alguém tem boas maneiras / scripts que eles usam para gerenciar o número de snapshots armazenados em seus sistemas ZFS? Idealmente, eu gostaria de um script que itere através de todos os instantâneos para um determinado sistema de arquivos ZFS e exclua todos, exceto os últimos n instantâneos para esse sistema de arquivos.
Por exemplo, eu tenho dois sistemas de arquivos, um chamado tank
e outro chamado sastank
. Os instantâneos são nomeados com a data em que foram criados: sastank@AutoD-2011-12-13
portanto, um sort
comando simples deve listá-los em ordem. Estou procurando manter as últimas 2 semanas em instantâneos diários tank
, mas apenas os últimos dois dias em instantâneos sastank
.
sort -r
antes dosed
comando.sed
parece exibir o final da lista além das 15 primeiras linhas, que na classificação padrão é a mais recente. Virar a lista significa que recebo os instantâneos mais antigos na parte inferior.Caso mais geral de obtenção do instantâneo mais recente com base na data de criação, não pelo nome.
zfs list -H -t snapshot -o name -S creation | head -1
Escopo para um nome de sistema de arquivos específico
TestOne
zfs list -H -t snapshot -o name -S creation -d1 TestOne | head -1
-H
: Sem cabeçalho para que a primeira linha seja um nome de captura instantânea-t snapshot
: Listar instantâneos (a lista pode listar outras coisas, como conjuntos e volumes)-o name
: Exibe a propriedade do nome da captura instantânea.-S creation
: CapitalS
indica classificação decrescente , com base no tempo de criação. Isso coloca o instantâneo mais recente como a primeira linha.-d1 TestOne
: Diz incluir filhos, o que parece confuso, mas é porque, no que diz respeito a este comando, os instantâneos do TestOne são filhos. Isso NÃO listará instantâneos de volumes no TestOne, comoTestOne/SubVol@someSnapshot
.| head -1
: Tubo na cabeça e retornar apenas a primeira linha.fonte
-d1
. Essa foi a chave da pergunta "Como obtenho todos os instantâneos para um determinado conjunto de dados?"Isso totalmente não responde à pergunta em si, mas não esqueça que você pode excluir intervalos de instantâneos.
Destruiria todos os instantâneos de "20160918" a "20161107", inclusive. Qualquer extremidade pode ser deixada em branco, para significar "mais antiga" ou "mais nova". Então você pode preparar algo que descubra o "n" e destrua "...% n" ..
Desculpe ressuscitar uma pergunta antiga.
fonte
growse não funcionou no OpenIndiana para mim. Não entendeu -0 para xargs.
Se estiver usando a classificação, lembre-se de que classifica em ordem alfabética, o que pode não ser o desejado, pois você provavelmente deseja encontrar as mais recentes.
Aqui está o código que excluirá todos, exceto os últimos instantâneos.
Remova o 'eco' para entrar no ar.
Fontes: http://sed.sourceforge.net/sed1line.txt
fonte
Eu posso ter resolvido isso com algum bash-fu.
Uau. Parece tão errado.
fonte
O caminho para a cabeça é necessário no Solaris, mas deve funcionar sem o caminho em outras distros.
fonte