Data Domain: Como listar arquivos no file system do Data Domain usando sfs-dump
Summary: Este artigo explica como usar a interface de linha de comando (CLI) do Data Domain para despejar as listagens de arquivos e diretórios de MTrees individuais ou do file system (FS) como um todo. ...
Symptoms
Independentemente do protocolo ingerido, o FS do Data Domain contém apenas arquivos (dentro de diretórios) organizados em MTrees. Todos os arquivos (tanto para arquivos no Active quanto em qualquer unidade de nuvem) compartilham a mesma raiz e namespace; existe um namespace único, o que significa que as listagens de arquivos e diretórios incluem os arquivos nas unidades Active e de nuvem sem qualquer distinção.
Obter um dump de arquivo detalhado pode ser útil pelos seguintes motivos:
-
Comparação com uma lista de arquivos gerenciados por um aplicativo de backup para verificar se há arquivos órfãos desse aplicativo de backup.
-
Listar todos os arquivos em um certo limite de idade para determinar se o aplicativo de backup está aplicando a multa de retenção de backup
Cause
A ferramenta da CLI para criar listas de arquivos é sfs_dump.
Resolution
Use o log de sessão SSH para coletar a saída da lista. O comando exato a ser executado a partir da CLI do DD para coletar listagens de arquivos depende da versão do Data Domain Operating System (DDOS) em uso.
Links rápidos
- Crie uma lista para versões do DDOS anteriores à 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110
- Criar lista para as versões 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110 ou posteriores do DDOS
- Criar lista para as versões 8.1.0.0, 7.13.1.10, 7.10.1.30 e 7.7.5.40 ou posteriores do DDOS
- Converter a lista em um arquivo CSV
- Importando uma saída de sfs_dump formatada por CSV para uma planilha
Para obter uma lista detalhada de arquivos em um Data Domain da CLI e, eventualmente, o processo para obter inteligência sobre arquivos armazenados no Data Domain, é necessário executar a versão do DDOS.
Depois que o arquivo de saída de texto com os detalhes do arquivo é coletado, o processamento da saída em um formato mais utilizável é sempre o mesmo, pois o formato de saída para todas as versões do DDOS é o mesmo (ou pode ser convertido para um formato comum usando um script).
Log da sessão SSH:
Comum a todas as versões do DDOS é o requisito de fazer log-in no Data Domain como um usuário administrador e fazer isso usando um client SSH que ofereça suporte ao registro da saída do console em um arquivo de texto no lado do cliente (PuTTY funciona bem para isso). Configure o client SSH para que ele registre a saída em um arquivo de texto no client (garantindo que não haja limites no número de linhas registradas ou no comprimento de linha individual). O arquivo de log da sessão SSH (e, portanto, as listagens de arquivos DD) não é gravado no Data Domain, mas no cliente de desktop (normalmente) a partir do qual a conexão SSH é iniciada.
Ao coletar a saída da sessão SSH, certifique-se de fornecer ao arquivo um nome significativo (como adicionar o nome de host do Data Domain e o nome do MTree a ser despejado) e certifique-se de que haja espaço suficiente para o arquivo de log, que pode ser de aproximadamente 200 MB para Data Domains com 1 milhão de arquivos.
Versões do DDOS anteriores à 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110:
Essas versões ainda dão suporte ao se sfs_dump (e a -c para exibir detalhes do arquivo diretamente como CSV sem nenhum processamento adicional), embora não seja recomendável acessar o modo de engenheiro de suporte (SE) por motivos de segurança e, em vez disso, fazer upgrade para a versão mais recente do DDOS disponível.
Faça login no Data Domain como um usuário administrador, com um client SSH configurado para gravar a saída no disco, altere para o modo de privilégio SE e, em seguida, execute o seguinte comando para cada MTree que exija os detalhes do arquivo:
#### To produce the output directly as CSV # se sfs_dump -c <mtree-path> #### To produce the output as default format # se sfs_dump <mtree-path>
Nessas versões, o comando também pode produzir a listagem de todos os arquivos do FS de uma só vez (em vez de um MTree por vez). Para despejar os detalhes das informações do arquivo de todos os arquivos no FS, deixe o caminho do MTree de fora:
# se sfs_dump -c
Após a conclusão, interrompa o registro do client SSH no disco e reserve os arquivos para processamento adicional.
O formato da saída do comando é de uma única linha para cada arquivo. Se não estiver usando -c, o formato é idêntico ao mostrado acima para versões posteriores. Nos casos em que -c foi usado (para saída CSV), o formato é assim (incluindo um cabeçalho mostrado como a primeira linha na saída):
name mtime fileid size seg_bytes seg_count redun_seg_count pre_lc_size post_lc_size /data/col1/backup/file 1656995350000000000 78 33554431 33668007 4016 0 33668007 34208564
As versões 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110 ou posteriores do DDOS:
O MTree a ser listado vai atrás da palavra-chave "MTree":
# filesys sfs-dump mtree <mtree-path>
filesys sfs_dum command, em comparação com se sfs_dump:
- O novo comando não é compatível com a opção
-cpara despejar informações de arquivo no formato CSV (coluna) - O novo comando só pode executar um MTree por vez, não há suporte para executar em todo o FS em uma única chamada
Se for necessário despejar todos os detalhes do arquivo de MTrees no arquivo, itere sobre toda a lista de MTrees no Data Domain FS e execute o comando uma vez para cada um deles. Um usuário pode obter uma lista de MTrees no sistema executando:
# mtree list
Faça log-in no Data Domain como um usuário admin, com um client SSH configurado para gravar a saída no disco e, em seguida, execute o seguinte comando para cada MTree que exija os detalhes do arquivo:
# filesys sfs-dump mtree <mtree-path>
Se os detalhes do arquivo para mais de um MTree forem necessários, escolha a opção para fazer todos os dumps no mesmo arquivo de saída ou alterne a configuração do client SSH para um arquivo diferente antes de executar o comando para cada um dos MTrees.
Como alternativa, colete os resultados de maneira autônoma, executando o comando usando SSH:
#### Releases 7.13.0.0, 7.10.1.15, 7.7.5.25 and 6.2.1.110 onwards only # ssh sysadmin@DD-HOSTNAME "filesys sfs-dump mtree /data/col1/backup" > sfs-dump-DD-backup.txt
Em ambos os casos, as informações de saída têm uma linha para cada arquivo, com o seguinte formato:
/data/col1/backup/file: mtime: 1580211658000000000 fileid: 175 size: 136794 type: 9 seg_bytes: 138282 seg_count: 18 redun_seg_count: 14 (78%) pre_lc_size: 15045 post_lc_size: 8760 (58%) mode: 02000100644 start_offset: 0 end_offset: 18446744073709551615
Versões 8.1.0.0, 7.13.1.10, 7.10.1.30 e 7.7.5.40 ou posteriores do DDOS:
filesys fs-dump:
- A possibilidade de adicionar a opção
-c, para que a saída seja exibida em uma versão formatada semelhante a CSV (campos separados por colunas) - A possibilidade de executar as informações de dump de arquivo para todos os arquivos no FS de uma só vez
- Use o log da sessão ssh para coletar a saída.
O comando continua sendo o mesmo das versões imediatamente anteriores, com os aprimoramentos mencionados, resumidos abaixo:
#### File listing for all the files in a given MTree path # filesys sfs-dump mtree <mtree-path> #### File listing for all the files in a given MTree path, with CSV-like output # filesys sfs-dump -c mtree <mtree-path> #### File listing for all the files in the FS # filesys sfs-dump #### File listing for all the files in the FS, with CSV-like output # filesys sfs-dump -c
Esse comando continua "oculto", de modo que não apareça na ajuda interativa da CLI ou nos documentos.
Como processar dados de sfs_dump ou filesys sfs-dump em algo útil:
O formato dos arquivos individuais que estão sendo relatados na saída ao usar filesys sfs-dump ou sfs_dump sem a opção -c pode ser resumido da seguinte maneira:
/data/col1/backup/file: mtime: 1580211658000000000 fileid: 175 size: 136794 type: 9 seg_bytes: 138282 seg_count: 18 redun_seg_count: 14 (78%) pre_lc_size: 15045 post_lc_size: 8760 (58%) mode: 02000100644 start_offset: 0 end_offset: 18446744073709551615 Field 01 : filename with full path (/data/col1/backup/file) Field 03 : file last modification time as UNIX epoch in nanoseconds (nanoseconds since January 1st 1970 at midnight) Field 05 : file (inode) ID, inode numbers are per MTree (175) Field 07 : pre-comp size for the file in bytes (136794) Field 09 : type of file (9) Field 11 : segment store bytes (this is NOT the file size), please ignore (138282) Field 13 : segment count, or the number of segments the file consists of (18) Field 15 : number of file segments which are redundant, or not unique (14) Field 16 : percentage of non-unique segments to total segments (78%) Field 18 : combined size of the file's unique segments after deduplication (15045) Field 20 : combined size of the file's unique segments after deduplication and local compression (8760) Field 21 : ratio of post-deduplicated + post-compressed unique segments size to post-deduplicated unique segment size (58%), shows how well local compression worked Field 23 : file mode, please ignore
No exemplo acima, o original tem um tamanho de 136.794 bytes, que depois de passar pelo pipeline de ingestão do Data Domain FS, é calculado para usar 15.045 bytes após a desduplicação e 8760 bytes quando os segmentos exclusivos do arquivo são compactados antes de serem gravados no disco. Assim:
- A desduplicação de arquivos (também conhecida como "
gcomp" ou compactação global) é um fator x9,09 (136.794 a 15.045 bytes) - A compactação local do arquivo (também conhecida como "l
comp" para compactação local) é um fator x1,72 (15.045 a 8760 bytes) - A redução do tamanho total do arquivo estimada (conhecida como "taxa de compactação") é um fator de x15,62 (136.794 para 8.760 bytes)
Alternadamente, sfs_dump -c a saída é semelhante, mas mais concisa:
/data/col1/backup/file 1656995350000000000 78 33554431 33668007 4016 0 33668007 34208564 Field 01 : filename with full path (/data/col1/backup/file) Field 02 : file last modification time as UNIX epoch in nanoseconds (nanoseconds since January 1st 1970 at midnight) Field 03 : file (inode) ID, inode numbers are per MTree Field 04 : pre-comp size for the file in bytes (33554431) Filed 05 : segment store bytes (this is NOT the file size), please ignore (33668007) Field 06 : segment count, or the number of segments the file consists of (4016) Field 07 : number of file segments which are redundant, or not unique (0) Field 08 : combined size of the file's unique segments after deduplication (33668007) Field 09 : combined size of the file's unique segments after deduplication and local compression (34208564)
Para este exemplo, os mesmos cálculos podem ser feitos com o anterior:
- A desduplicação de arquivos (também conhecida como "
gcomp" ou compactação global) é um fator x0,99 (33.554.431 a 33.668.007 bytes) - A compactação local do arquivo (também conhecida como "
lcomp", para compactação local) é um fator x0,98 (33.668.007 a 34.208.564 bytes) - A redução do tamanho total do arquivo estimada (conhecida como "taxa de compactação") é um fator de x0,98 (33.554.431 para 34.208.564 bytes)
Em comparação com o arquivo mostrado, o exemplo sem -c , este não obtém nenhuma desduplicação (sem segmentos redundantes) nem compactação local. Isso indica que o arquivo é compactado.
post_lc_size é uma determinada quantidade que não implica que o espaço em disco usado por esse arquivo seja idêntico a essa quantidade, pois há muitas sobrecargas de nível de FS que não são consideradas em um nível por arquivo. As limitações são as mesmas que as já conhecidas para o comando:
mtree show compressionAproveitar as informações nos arquivos de saída acima consiste em processar os dados numéricos de uma forma que se adapte aos objetivos do usuário. Alguns exemplos de casos de uso podem ser:
- Determinando o
gcompelcompPara arquivos correspondentes a um caminho específico (se um caminho puder ser correspondido a algum servidor de backup específico, client, política, trabalho etc.) - Calculando a quantidade de dados (
pre-comp) é armazenado em um determinado local que é mais antigo do que um determinado período de tempo (para determinar órfãos ou solução de problemas com o aplicativo de backup que não expira backups vencidos no prazo) - Qualquer outro tipo de estatística que se pode ter um uso
sfs_dump -c Em versões mais recentes, nossas recomendações são converter os dados de saída para o formato CSV acima e, em seguida, usar o arquivo no formato CSV para ser processado posteriormente. No entanto, dependendo de suas habilidades, a saída não CSV pode ser processada diretamente.
Converter para CSV:
Para converter uma saída não CSV sfs_dump em um que é idêntico ao que sfs_dump -c teria impresso, a seguinte linha de comando do Linux pode ser usada:
# cat sfs-dump-noCSV.txt | grep ^/ | awk '
BEGIN {print "name\tmtime\tfileid\tsize\tseg_bytes\tseg_count\tredun_seg_count\tpre_lc_size\tpost_lc_size"}
{
colon_index = index($0, ":")
filename = substr($0, 1, colon_index - 1)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", filename)
n = split(substr($0, colon_index + 1), fields, " ")
print filename "\t" fields[2] "\t" fields[4] "\t" fields[6] "\t" fields[10] "\t" fields[12] "\t" fields[14] "\t" fields[17] "\t" fields[19]
}' > sfs-dump-CSV.csv
Tudo além desse ponto é fornecido aos usuários no estado em que se encontra. Não há nenhuma garantia ou obrigação por parte da Dell para as instruções compartilhadas abaixo. Obter inteligência a partir dos detalhes da listagem de arquivos é uma tarefa do usuário, e como conseguir isso depende inteiramente do conjunto de ferramentas usado para extrair dados na saída de dump de arquivos, do objetivo a ser alcançado e da própria experiência do usuário no processamento de dados a partir da saída do comando detalhado acima. Um usuário pode optar por usar o processamento de linha de comando Linux de arquivos de texto para despejar alguns agregados, outros podem optar por produzir entrada para valores gráficos usando "gnuplot", enquanto a maioria dos usuários é acreditada para buscar uma abordagem mais simples (mas limitada), para construir uma planilha a partir do arquivo CSV para análise.
A Dell se esforça para garantir que as instruções abaixo estejam corretas, funcionando e sejam úteis para os usuários, mas não pode garantir que elas funcionem e nem o suporte é fornecido, pois estão fora do escopo do suporte.
Importando a saída de sfs_dump formatada por CSV para uma planilha (exemplo para Excel):
Depois que a versão CSV da listagem de detalhes do arquivo estiver disponível, uma maneira de obter inteligência dos dados é carregar os dados em um software de planilha. O Microsoft Excel é usado como exemplo, embora as instruções devam ser semelhantes para outros softwares. Para obter o arquivo de texto CSV importado para o Excel como CSV, execute as seguintes etapas:
- Abra o Excel e crie uma nova planilha em branco
- Vá para o menu Dados na parte superior e, em seguida, clique no ícone chamado From Text/CSV
- Use a caixa de diálogo para localizar os dados do arquivo no formato CSV
sfs-dump-CSV.csv(como no exemplo de script de conversão do formato não CSV), selecione-o e clique em Importar - Se o formato do arquivo de entrada estiver correto e o Excel puder extrair o formato a partir das primeiras 200 linhas (o que deveria), uma caixa de diálogo deve mostrar a visualização da planilha a ser gerada. Analise as informações para garantir que estejam corretas, inclusive que a primeira linha seja detectada como os cabeçalhos
- Se tudo ficar bem com a visualização, clique no botão Carregar na parte inferior da caixa de diálogo, e a nova planilha é apresentada com uma boa formatação e os cabeçalhos de campo transformados em pesquisa e habilitados para filtro.
Os dados na planilha já são úteis, coisas como aplicar um Filtro de Número a campos numéricos, como tamanho (para mostrar apenas arquivos acima de um determinado tamanho), ou aplicar um Filtro de Texto no campo de nome para que apenas arquivos no arquivo do Data Domain detalham a saída correspondentes a um determinado padrão (apenas aqueles que começam com o caminho para um MTree específico) sejam mostrados, e fazer outros cálculos derivados desses dados.
Uma planilha do Excel importada corretamente deve conter dados nas colunas A a I. Se os dados estiverem presentes apenas na coluna A, mas se estenderem pela tela, feche o Excel e repita as etapas de 1 a 5 acima.
Adicione campos calculados extras:
A planilha pode ser estendida com quantos campos calculados um usuário precisar. Um campo interessante a ser adicionado é a data e hora legíveis por humanos correspondentes ao mtime dos arquivos (horário da última modificação, geralmente, o horário em que foi gravado no DD). Além disso, calcular e mostrar alguns valores de compactação por arquivo pode ser útil, dependendo da finalidade para a qual os dados estão sendo usados. As novas colunas são preenchidas automaticamente usando fórmulas do Excel, conforme descrito abaixo.
Conversão do registro de data e hora:
Para converter o carimbo de data/hora semelhante ao UNIX em data e hora legíveis:
- Clique com o botão direito do mouse na célula J2 e escolha "Formatar células"
- Na lista "Categoria" à esquerda, escolha "Personalizado".
- Se ainda não aparecer, crie o formato de data/hora legível por humanos (o exemplo inclui a cadeia de caracteres EST no final. Ele pode ser substituído por sua definição textual de fuso horário, ou remover "EST" completamente, se não estiver interessado): aaaa-mm-dd hh:mm:ss "EST"
- Clique em "Ok" quando terminar. Agora, a célula J2 tem um formato personalizado para dados.
- Adicione a seguinte fórmula à célula J2. Na fórmula, substitua o (-6*3600) pela diferença de fuso horário correta correspondente ao UTC para o fuso horário configurado no Data Domain no momento da obtenção dos dados "sfs-dump". Por exemplo, o horário do Leste dos EUA está 6 horas atrás do UTC durante o verão, daí o "-6" aqui.
(((B2/1000000000+(-6*3600))/86400)+25569) (((B2/1000000000)/86400)+25569)
- Cole a fórmula na célula J2 e também em cada célula do restante das linhas da planilha
- Calcule a fórmula para toda a planilha e mostre o valor de data e hora no formato configurado
- Formate bem a coluna como as existentes, e tenha o cabeçalho configurado como uma Data com a possibilidade de aplicar Filtros de Data, a única coisa a fazer é definir um nome próprio para a coluna (Data)
Informações de compactação:
É possível adicionar colunas para as informações de compactação por arquivo, fazendo o que foi explicado acima. Desta vez, as fórmulas mostram incluindo o "=", então todo o texto deve ser copiado e Colar especial como texto:
- Copie a seguinte fórmula e Cole especial como texto na célula K2 para criar uma coluna para a desduplicação por arquivo, ou
gcomp:=IF(H2=0,0,D2/H2)
- Copie a seguinte fórmula e Cole especial como texto na célula L2 para criar uma coluna para a compactação local por arquivo ou
lcomp:=IF(I2=0,0,H2/I2)
- Copie a seguinte fórmula e Cole especial como texto na célula M2 para criar uma coluna para a taxa de compactação total de arquivos por arquivo:
=K2*L2
Dê um nome próprio às novas colunas. Se você quiser que o formato dos valores de compactação seja outro (por exemplo, para limitar o número de decimais), faça como no exemplo para a data e a hora e defina o formato numérico da célula antecipadamente, antes de colar a fórmula.
Lembre-se de manter seu trabalho seguro acessando o menu Arquivo e fazendo isso. Salve como certificando-se de que o tipo do arquivo salvo esteja definido como Pasta de trabalho do Excel (*.xlsx), para que a formatação e a filtragem sejam mantidas.
Após a conclusão das ações descritas, sua planilha conterá as seguintes colunas (relevantes):
- A contém um nome de arquivo
- B contém o registro de data (no UNIX epoch em nanossegundos) para quando o arquivo foi gravado pela última vez
- D é o tamanho original do arquivo
- H é o tamanho após a compactação global
- I é o tamanho após a compactação global e local
- J contém o registro de data para quando o arquivo foi gravado pela última vez, em formato legível por humanos
- K contém a compactação global (desduplicação) do arquivo
- L contém a compactação local do arquivo
- M contém a compactação total do arquivo
Todos os tamanhos de arquivo são em bytes.
Agora, o Excel pode filtrar ou classificar conforme necessário para gerar relatórios sobre os dados.
- Por exemplo, para mostrar apenas os arquivos no MTree /data/col1/backup que têm mais de 30 dias:
- Clique na seta para baixo no cabeçalho Nome, selecione Filtros de Texto, Começa com e digite
/data/col1/backup/na caixa. A barra à direita é importante. Clique em OK - Clique na seta para baixo no cabeçalho da Data da última gravação, selecione Filtros de data e, em seguida, Antes. Use o seletor de datas à direita da caixa de diálogo para selecionar uma data de 30 dias atrás. Clique em OK.
Additional Information
Comando para localização do dump file (ativo e na nuvem)
Há uma maneira de despejar a listagem de arquivos com uma indicação de quais estão em Active e quais em qualquer unidade de nuvem, que é:
#### For the DD FS as a whole # filesys report generate file-location #### For an individual MTree or subdirectory # filesys report generate file-location path /data/col1/test
Em ambos os casos, a saída é do seguinte tipo:
------------------------- ---------------------- ---------------------- --------------------------- File Name Location(Unit Name) Size Placement Time ------------------------- ---------------------- ---------------------- --------------------------- /data/col1/test/file1.bin Cloud-Unit 200.00 GiB Sat Mar 5 13:24:10 2022 /data/col1/test/file2.bin Active 10.00 TiB Sat May 14 00:48:17 2022 ------------------------- ---------------------- ---------------------- ---------------------------
No entanto, o comando acima tende a ser inadequado para a maioria das intenções, como, por exemplo, o tamanho está em unidades legíveis por humanos (em vez de em bytes ou MiB ou qualquer multiplicador definido) e o tempo de posicionamento corresponde à hora em que os backups foram feitos no Data Domain para arquivos em Active, mas não para arquivos na nuvem ("Placement Time" para arquivos na nuvem é a data e hora em que o arquivo foi movido para a unidade de nuvem).
Além disso, saiba que o comando abaixo (e o script de conversão de não-CSV) sfs_dumpproduz dados em colunas separadas por guias. Os caracteres da guia presentes na saída devem ser salvos no arquivo de log, caso contrário, as etapas detalhadas acima para importar o CSV para o Excel não poderão separar os campos corretamente.
sfs_dump -c
As instruções que são dadas pressupõem um conhecimento razoável do Excel, mas podem ser convertidas para outro software de planilha.
As versões modernas do Excel permitem muitas linhas, mas tenha em mente que cada arquivo no sfs_dump saída a ser processada é uma única linha, portanto, o Excel deve ser capaz de processar e atualizar rapidamente uma planilha com tantas linhas quanto arquivos em seu conjunto de dados. O limite rígido é de pouco mais de 1 milhão de linhas, mas mesmo com contagens de arquivos bem abaixo disso, o Excel pode não ser o apropriado para o trabalho (muito lento).
Se o sfs_dump A saída tem muitos arquivos para a versão do Excel ou para processar dados em bits menores para fins de desempenho, tente executar o procedimento uma vez para cada MTree, para que haja várias planilhas para o sistema.
Até mesmo um único MTree sfs_dump a saída pode ser muito grande para o Excel, nesse caso, use o comando dividir o Linux (ou qualquer outra ferramenta semelhante para dividir um arquivo de texto grande on-line end limites) para ter vários arquivos CSV menores para processar um de cada vez, por exemplo:
# split -b <size> <filename> <new filename prefix> (splits by file size) # split -l <size> <filename> <new filename prefix> (splits by number of lines) # split -n <size> <filename> <new filename prefix> (splits by number of pieces)
Para dividir um arquivo de texto de entrada em blocos de 200 MiB cada, de modo que as partes sejam nomeadas a partir de:
"sfs_dump.out.split"
Em seguida, execute:
# split -b 200M sfs_dump.out sfs_dump.out.split
Script para usar "filesys sfs-dump" para despejo completo de dados em arquivo do FS.
Para as poucas versões que não tinham a capacidade de despejar detalhes do arquivo no formato CSV, o script mostrado mais abaixo é fornecido no estado em que está (sem garantia) pela Dell aos usuários para alcançar um resultado semelhante ao processar a saída não CSV sfs_dump .
Como as versões que não suportam saída CSV também são aquelas que não permitem despejar as informações de todos os arquivos no FS como um todo, o script usa SSH para se conectar ao Data Domain de destino para iterar sobre a lista de MTrees, executando o dump de arquivo um MTree por vez, para coletar a listagem de arquivos de todos os MTrees, depois, transforma em um formato CSV adequado para processamento posterior:
#!/bin/bash
#### WARNING
#### This script is provided to you by Dell Technologies with NO GUARANTEE, as best-effort sample code to get a full FS sfs-dump collected
#### for DDOS releases which do not support "se sfs-dump", or as an alternative to it, in releases which support "filesys fs-dump"
#### That this script does not work for you, or if you need help setting it up, extending it, or resolving any issues, is not entitled to support
#### This script is not part of Dell PowerProtect / Data Domain, and hence it is not supported
#### Replace values below to suit your needs
USERNAME="sysadmin"
DD_HOSTNAME="10.n.n.172"
#### NO CHANGES NEEDED BEYOND THIS POINT
clear
echo "Script collects a full FS sfs-dump from \"${DD_HOSTNAME}\", using the command \"filesys sfs-dump\", one MTree at a time"
echo " * Script has to be configured by settting the \"USERNAME\" and \"DD_HOSTNAME\" variables within the top of the script"
echo " * Script expects passwordless SSH connection as \"USERNAME\" to the \"DD_HOSTNAME\" configured"
echo " * To configure passwordless SSH login to a DataDomain, check KB at https://www.dell.com/support/kbdoc/000004033 "
echo " * Test passwordless login is configured and working prior to going ahead with this script"
echo " * If passwordless login is not configured, script will ask for the \"${USERNAME}\" password "
echo " - Once for getting the MTree list"
echo " - And once for each one of the MTrees in \"${DD_HOSTNAME}\" "
echo
echo -n "Are you sure you want to continue? (y/n) : "
read -n 1 answer
echo
if [ "${answer}" = "y" ]; then
echo "Going ahead with the script."
echo
else
echo "Stopping script now. Re-run when passwordless login to \"${DD_HOSTNAME}\" as \"${USERNAME}\" works. Bye."
exit 1
fi
echo -n "1/6 : Collecting list of MTrees from DD..."
ssh ${USERNAME}@${DD_HOSTNAME} "mtree list" 2>/dev/null | grep ^/ | awk '{print $(NF-3)}' > mtree-list.txt
echo "Done."
n_mtrees=$( wc -l mtree-list.txt | cut -d" " -f1 )
echo -n "2/6 : Collecting per-Mtree sfs-dump information for ${n_mtrees} MTrees ..."
for mtree in `cat mtree-list.txt`; do
name=$(echo $mtree | cut -d/ -f4)
ssh ${USERNAME}@${DD_HOSTNAME} "filesys sfs-dump mtree ${mtree}" 2>/dev/null | grep ^/ > sfs-dump-${name}.txt
echo -n "."
done
echo "Done."
echo -n "3/6 : Putting all the files together..."
for file in `ls sfs-dump-*.txt`; do
if [ -s "${file}" ]; then cat ${file} >> sfs-dump-noCSV.txt; fi
done
echo "Done."
echo -n "4/6 : Converting sfs-dump output to CSV format..."
cat sfs-dump-noCSV.txt | grep ^/ | grep -v ^$ | awk '
BEGIN {print "name\tmtime\tfileid\tsize\tseg_bytes\tseg_count\tredun_seg_count\tpre_lc_size\tpost_lc_size"}
{
colon_index = index($0, ":")
filename = substr($0, 1, colon_index - 1)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", filename)
n = split(substr($0, colon_index + 1), fields, " ")
print filename "\t" fields[2] "\t" fields[4] "\t" fields[6] "\t" fields[10] "\t" fields[12] "\t" fields[14] "\t" fields[17] "\t" fields[19]
}' > sfs-dump-CSV.csv
echo "Done."
echo -n "5/6 : Cleaning up..."
for mtree in `cat mtree-list.txt`; do name=$(echo $mtree | cut -d/ -f4); rm -f sfs-dump-${name}.txt ; done
rm sfs-dump-noCSV.txt
rm mtree-list.txt
echo "Done."
echo -n "6/6 : Summary"
echo
n_files=$( wc -l sfs-dump-CSV.csv | cut -d" " -f1 )
echo
echo "Collecting whole FS sfs-dump data from ${HOSTNAME} completed"
echo "File includes output for ${n_mtrees} MTrees, with a combined $(( ${n_files} - 1 )) files across Active and Cloud Tiers (if applicable)"
echo "Start of file shown below for your convenience :"
echo "===================="
head -5 sfs-dump-CSV.csv
echo "===================="
echo
echo "Done."
exit 0
Script para combinar a saída de "sfs-dump" e "filesys report generate file-location" não CSV em um arquivo CSV com todas as mesmas informações do script acima e por nível de arquivo e informações de tempo de posicionamento.
O script a seguir é fornecido no estado em que está (sem garantia) pela Dell aos usuários como forma de agregar valor ao resultado dos comandos sfs_dump e filesys report generate file-location acima. Um usuário pode filtrar arquivos com base no nível (Active ou qualquer uma das duas unidades de nuvem configuradas) para obter informações mais precisas sobre a distribuição de arquivos por nível, adicionando a localização do nível e as informações de tempo de posicionamento a cada entrada de arquivo no CSV de saída.
Os scripts consideram a saída de sfs-dump (não sfs_dump -c) como o primeiro parâmetro, e a saída de filesys report generate file-location como o segundo. A saída é gravada em um nome de arquivo codificado "sfs-dump-output-tiers.csv", que pode ser alterado no próprio script.
A saída pode ser processada usando o Excel da mesma maneira como explicado acima.
#!/bin/bash
#### WARNING
#### This script is provided to you by Dell Technologies with NO GUARANTEE, as best-effort sample code to match the output from commands :
#### * sfs-dump (in non CSV format)
#### * filesys report generate file-location
#### So that a new CSV with the file paths appearing on both is created for all the data in sfs-dump file with the added tier and placement time information from location report
####
#### This script is not part of Dell PowerProtect / Data Domain, and hence it is not supported
####
#### Usage : extend-sfs-dump-with-tier.sh sfs-dump-output.csv file-location-output.log
#### Output : static "sfs-dump-output-tiers.csv" file name (may be changed below)
#### Replace values below to suit your needs
OUTPUT_FILENAME="sfs-dump-output-tiers.csv"
#### NO CHANGES NEEDED BEYOND THIS POINT
clear
if [ ! $# == 2 ]; then
echo "Combine output from sfs-dump and tier location report into a CSV file with tier and placement time information"
echo
echo "Usage : $0 SFS-DUMP-OUTPUT-FILE REPORT-FILE-LOCATION-FILE"
echo "NOTE : SFS-DUMP-OUTPUT-FILE has to be in non-CSV format"
exit 1
fi
INPUT_SFSDUMP="$1"
INPUT_LOCATION="$2"
echo -n "1/6 : Sanity checking input files..."
if [ ! -s "${INPUT_SFSDUMP}" ]; then
echo "Input file ${INPUT_SFSDUMP} does not exist"
exit 1
fi
if [ ! -s "${INPUT_LOCATION}" ]; then
echo "Input file ${INPUT_LOCATION} does not exist"
exit 1
fi
n_files_sfsdump=`grep ^/ ${INPUT_SFSDUMP} | wc -l`
n_files_location=`grep ^/ ${INPUT_LOCATION} | wc -l`
if [ ${n_files_sfsdump} -eq ${n_files_location} ]; then
echo -n "both have the same amount of files (${n_files_location}). "
else
echo -n "sfs-dump has ${n_files_sfsdump} files whereas location report has ${n_files_location} files, this may be normal if the difference is small. "
fi
echo "Done."
echo -n "2/6 : Sanitize \"file-location\" input..."
cat ${INPUT_LOCATION} | awk 'BEGIN {rejected="temp-location-rejected.log"; accepted="temp-location-accepted.log"} { if ( $0 ~ "Missing -unit") { gsub(/Missing -unit/, "Missing-Cloud-Unit", $0); print $0 > rejected } else { if ($0 ~ "^/" ) print $0 > accepted } }'
if [ -s "temp-location-rejected.log" ]; then
REJECTS_EXIST="yes"
echo -n "Some files in location report sit in unavailable or deleted cloud units, you may need to re-run this script after fixing the issue and gathering a new location report. "
cat temp-location-rejected.log temp-location-accepted.log | sed -e 's/\t/:\t/' | sort > temp-location-report-sorted.log
rm temp-location-rejected.log
else
cat temp-location-accepted.log | sed -e 's/\t/:\t/' | sort > temp-location-report-sorted.log
REJECTS_EXIST="no"
fi
rm temp-location-accepted.log
echo "Done."
echo -n "3/6 : Sanitize \"sfs-dump\" input..."
cat ${INPUT_SFSDUMP} | grep ^/ | sort > temp-sfs-dump.log
echo "Done."
echo -n "4/6 : Merging information for sfs-dump and location report..."
join -1 1 -2 1 temp-sfs-dump.log temp-location-report-sorted.log > temp-merged-information.log
rm temp-sfs-dump.log
rm temp-location-report-sorted.log
n_files_combined=`grep ^/ temp-merged-information.log | wc -l`
if [ ${n_files_combined} -eq 0 ]; then
echo "No files matched from input files. sfs-dump output must NOT be in CSV format. Exiting."
rm temp-merged-information.log
exit 1
fi
echo -n "Input files matched on ${n_files_combined} files. "
echo "Done."
echo -n "5/6 : Converting merged sfs-dump / location-report output to CSV format..."
cat temp-merged-information.log | grep ^/ | grep -v ^$ | awk '
BEGIN {print "name\tmtime\tfileid\tsize\tseg_bytes\tseg_count\tredun_seg_count\tpre_lc_size\tpost_lc_size\ttier\tplacement_time"}
{
colon_index = index($0, ":")
filename = substr($0, 1, colon_index - 1)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", filename)
n = split(substr($0, colon_index + 1), fields, " ")
print filename "\t" fields[2] "\t" fields[4] "\t" fields[6] "\t" fields[10] "\t" fields[12] "\t" fields[14] "\t" fields[17] "\t" fields[19] "\t" fields[27] \
"\t" fields[length(fields)-4] " " fields[length(fields)-3] " " fields[length(fields)-2] " " fields[length(fields)-1] " " fields[length(fields)]
}' > ${OUTPUT_FILENAME}
rm temp-merged-information.log
echo "Done."
echo -n "6/6 : Summary"
echo
echo
echo "Merging information from sfs-dump (${INPUT_SFSDUMP}) and location-report ${INPUT_LOCATION} output completed."
echo "Output file (${OUTPUT_FILENAME}) includes information for a total ${n_files_combined} files, out of ${n_files_sfsdump} in input sfs-dump, and ${n_files_location} in input location report."
if [ "${REJECTS_EXIST}" == "yes" ]; then
echo "Note there are some files in disconnected or deleted cloud units, for which the \"tier\" field has been replaced with \"Missing-Cloud-Unit\"."
fi
echo
echo "Start of file shown below for your convenience :"
echo "===================="
head -5 ${OUTPUT_FILENAME}
echo "===================="
echo
echo "You may follow the instructions in https://www.dell.com/support/kbdoc/000081345 to process this CSV file in an spreadhseet"
echo
echo "Done."
exit 0
Para usuários do Veritas NetBackup:
O Veritas NetBackup (NBU) é conhecido por criar arquivos em um Data Domain com caracteres de dois pontos como parte dos nomes de arquivos. Por exemplo, segue abaixo os caminhos de nome de arquivo NBU válidos quando o Data Domain é usado como armazenamento de back-end para NBU:
/data/col1/MTREE_NAME/POLICY-NAME_1400502741_C1_F1:1400502741:VM_PRD-02:4:1:: /data/col1/MTREE_NAME/POLICY-NAME_1400502741_C1_F2:1400502741:VM_PRD-02:4:1:: /data/col1/MTREE_NAME/POLICY-NAME_1400502741_C1_HDR:1400502741:VM_PRD-02:4:1::
Isso apresenta um problema com os scripts de exemplo acima, pois o caractere de dois pontos é usado como delimitador para a saída do comando sfs_dump resultado do comando e a execução dos scripts acima produziria resultados incorretos.
Para esses casos, o script deve ser editado de uma forma como abaixo:
--- iterate-dd-for-fs-sfs-dump.sh 2024-01-23 06:32:16.521409000 -0500
+++ iterate-dd-for-fs-sfs-dump-NBU.sh 2024-02-27 03:26:42.808246000 -0500
@@ -55,11 +55,11 @@
cat sfs-dump-noCSV.txt | grep ^/ | grep -v ^$ | awk '
BEGIN {print "name\tmtime\tfileid\tsize\tseg_bytes\tseg_count\tredun_seg_count\tpre_lc_size\tpost_lc_size"}
{
- colon_index = index($0, ":")
- filename = substr($0, 1, colon_index - 1)
+ colon_index = index($0, ":::")
+ filename = substr($0, 1, colon_index + 1)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", filename)
n = split(substr($0, colon_index + 1), fields, " ")
- print filename "\t" fields[2] "\t" fields[4] "\t" fields[6] "\t" fields[10] "\t" fields[12] "\t" fields[14] "\t" fields[17] "\t" fields[19]
+ print filename "\t" fields[3] "\t" fields[5] "\t" fields[7] "\t" fields[11] "\t" fields[13] "\t" fields[15] "\t" fields[18] "\t" fields[20] "\t"
}' > sfs-dump-CSV.csv
echo "Done."
Enquanto as alterações são compartilhadas para que o script itere em todos os MTrees em um Data Domain para extrair os dados por MTree sfs_dump , as alterações são as mesmas para o outro script. No entanto, como também é o caso dos próprios scripts, as alterações acima são fornecidas pela Dell sem nenhuma garantia, na esperança de que sejam úteis.