Data Domain: Como listar arquivos no file system do Data Domain, sfs-dump
摘要: Este artigo explica como usar a CLI do Data Domain para despejar as listagens de arquivos e diretórios de MTrees individuais ou do file system (FS) como um todo. Isso permite que os usuários descubram o que está armazenado no Data Domain a partir do aplicativo de backup. ...
症狀
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
- Para DDOS anteriores a 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110
se sfs_dump
- Para qualquer DDOS igual ou posterior a 7.13.0.0, 7.10.1.15, 7.7.5.25, 6.2.1.110
filesys sfs-dump
原因
sfs_dumpO modo SE, que era necessário para acessar essa funcionalidade, foi descontinuado, conforme explicado no DSA-2023-412: Atualização de segurança do Dell Technologies PowerProtect para várias vulnerabilidades de segurança
Por um período intermediário, algumas das funcionalidades do antigo comando
sfs_dump no modo SE não estava disponível, mas foi reintroduzido em um estágio posterior. Portanto, este artigo da KB tenta explicar as diferenças e como lidar com a saída do comando em cada caso.解析度
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. Uma vez que o arquivo de saída de texto com os detalhes do arquivo é coletado, o processamento da saída em uma forma 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).
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 log da saída do console em um arquivo de texto no lado do cliente (PuTTY funciona bem para isso). Um usuário deve configurar o client SSH para que ele registre a saída em um arquivo de texto no computador client (garantindo que não haja limites no número de linhas registradas ou no comprimento da 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 computador desktop (normalmente) a partir do qual a conexão SSH é iniciada.
Ao coletar a saída da sessão SSH, dê 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 sistemas com 1 milhão de arquivos.
O comando exato a ser executado a partir da CLI do DD para coletar listagens de arquivos depende da versão do DDOS usada. Elas estão resumidas abaixo.
Versões do DDOS anteriores a 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110:
Essas versões ainda são compatíveis com o comandose sfs_dump (e a -c opção para saída de detalhes do arquivo diretamente como CSV sem qualquer processamento adicional), embora não seja recomendável ir para o modo SE por motivos de segurança e, em vez disso, fazer upgrade para a versão mais recente do LTS DDOS disponível.
Certifique-se de estar conectado ao 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 para o qual você deseja obter 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 -cApó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 é semelhante a esse (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
Versões 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110 ou posteriores do DDOS:
Esta versão não fornece mais acesso ao sfs_dump no modo SE (o seguinte não está disponível):
se sfs_dumpO modo SE foi descontinuado devido a problemas de segurança encontrados. O comando alternativo a ser usado está abaixo. Observe o nome do comando ligeiramente diferente e que, neste caso, o MTree a ser listado aparece após a palavra-chave "MTree":
# filesys sfs-dump mtree <mtree-path>Para as versões no título, este comando sfs-dump, em comparação com
se sfsa_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 execução em todo o FS em uma única chamada
# mtree listA saída do comando abaixo é idêntica à de um comando anterior
se sfs_dump quando usado sem a opção -c .
filesys sfs-dumpCertifique-se de estar conectado ao Data Domain como um usuário administrador, com um client SSH configurado para gravar a saída no disco e, em seguida, execute o seguinte comando para cada MTree para o qual você deseja obter os detalhes do arquivo:
# filesys sfs-dump mtree <mtree-path>
Se você estiver obtendo os detalhes do arquivo para mais de um MTree, escolha a seu critério fazer todos os dumps para o 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, você pode fazer a coleta da saída de forma autônoma, executando o comando por meio de SSH da seguinte maneira:
#### 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:
Devido à demanda do cliente, alguns dos recursos do antigo comandose sfs_dump foram reintroduzidos e agora estão disponíveis para o comando filesys sfs-dump , a saber:
- 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
#### 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 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 ignoreNo exemplo acima, temos um arquivo com o tamanho original de 136.794 bytes que, depois de passado pelo pipeline de ingestão do Data Domain FS, é calculado para usar 15.045 bytes após a desduplicação e 8.760 bytes quando os segmentos exclusivos do arquivo são compactados antes de serem gravados no disco. Assim:
- A desduplicação de arquivos (o que chamamos de "gcomp", ou compactação global) é um fator x9,09 (136.794 para 15.045 bytes)
- A compactação local de arquivos (o que chamamos de "lcomp", para compactação local) é um fator de x1,72 (15.045 para 8.760 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)
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, podemos fazer os mesmos cálculos que para o anterior:
- A desduplicação de arquivos (o que chamamos de "gcomp", ou compactação global) é um fator x0,99 (33.554.431 para 33.668.007 bytes)
- A compactação local de arquivos (o que chamamos de "lcomp", para compactação local) é um fator de x0,98 (33.668.007 para 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)
-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:
- Determinar o gcomp e o lcomp para arquivos correspondentes a um caminho específico (se um caminho puder ser associado a algum servidor de backup específico, client, política, trabalho etc.)
- Calcular o volume de dados (pré-compactação) armazenados em um determinado local que é mais antigo do que um determinado período (para determinar órfãos ou solucionar problemas com o aplicativo de backup que não expira backups vencidos)
- 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, você pode processar a saída não CSV diretamente.
Para converter uma saída não CSV
sfs_dump em um que é idêntico ao que sfs_dump -c teria exibido, você pode usar a seguinte linha de comando do Linux:
# 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 do Linux de arquivos de texto para despejar alguns conjuntos, outros podem optar por produzir entrada para valores gráficos usando "gnuplot", enquanto acredita-se que a maioria dos usuários busca 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, funcionem e sejam úteis para os usuários, mas não pode garantir que elas funcionem para você e não fornece suporte a elas, pois estão fora do escopo do suporte.
Como importar a saída formatada como CSV sfs_dump 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, incluindo que a primeira linha seja detectada como os cabeçalhos
- Se tudo estiver correto com a visualização, clique no botão Carregar na parte inferior da caixa de diálogo e sua nova planilha será apresentada a você com uma boa formatação e os cabeçalhos de campo transformados em pesquisa e habilitados para filtro.
Uma planilha do Excel importada corretamente deve conter dados nas colunas 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.
Adicionar campos calculados adicionais
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. Você pode substituí-lo 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 dados, a única coisa que você teria que fazer é definir um nome próprio para a coluna (Data)
Informações de compactação
- 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
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
Agora você pode usar o Excel para filtrar ou classificar conforme necessário para relatar seus 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.
其他資訊
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 -cAs 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 seu
sfs_dump saída tiver muitos arquivos para sua versão do Excel ou você desejar processar dados em bits menores para fins de desempenho, poderá tentar executar o procedimento uma vez para cada MTree, assim você terá várias planilhas para o sistema.
Até mesmo o resultado de um único MTree
sfs_dump pode ser muito grande para o Excel, nesse caso, você pode usar o comando split do Linux (ou qualquer outra ferramenta semelhante para dividir um arquivo de texto grande on-line e dentro dos 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 a ser usado "filesys sfs-dump" para dump completo de dados de 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.60.36.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 comandossfs_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 e a execução dos scripts acima produziria resultados incorretos.
Para esses casos, você deve editar o script 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.