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. ...

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

O Data Domain (DD) é um dispositivo de armazenamento de back-end passivo. Ele armazena apenas o que os aplicativos de backup lhe dizem e só exclui dados quando o aplicativo de backup diz para excluir arquivos. O Data Domain nunca cria ou exclui arquivos por conta própria.

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

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 -c para 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 "lcomp" 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.
 

Aviso: Os dados nos arquivos de saída referentes a um tamanho diferente de "tamanho precomp para o arquivo em bytes" devem ser considerados aproximados e não podem ser totalmente confiáveis. Os metadados para arquivos são criados no momento da ingestão do arquivo e, embora estejam corretos, não são atualizados em nenhum momento desde então, portanto, ficam obsoletos com o tempo. Além disso, esse de um arquivo 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 compression
Aproveitar 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 gcomp e lcomp Para 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
Ter um único conjunto de instruções e compensar a perda da opção 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

 

Nota: O comando acima ignora tudo no arquivo de entrada (sfs-dump-noCSV.txt) que não começa com uma barra, pois apenas as linhas que começam com "/data" devem conter detalhes do arquivo para processamento. Os arquivos de saída têm uma primeira linha como cabeçalho e estão usando o caractere tabulador (\t) como delimitador de campo.


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:

  1. Abra o Excel e crie uma nova planilha em branco
  2. Vá para o menu Dados na parte superior e, em seguida, clique no ícone chamado From Text/CSV
  3. Use a caixa de diálogo para localizar os dados do arquivo no formato CSVsfs-dump-CSV.csv (como no exemplo de script de conversão do formato não CSV), selecione-o e clique em Importar
  4. 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
  5. 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:

  1. Clique com o botão direito do mouse na célula J2 e escolha "Formatar células"
  2. Na lista "Categoria" à esquerda, escolha "Personalizado".
  3. 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"
  4. Clique em "Ok" quando terminar. Agora, a célula J2 tem um formato personalizado para dados.
  5. 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.
Se não estiver interessado em um ajuste de tempo tão preciso, uma forma abreviada da fórmula pode ser em vez disso. A maneira mais fácil de adicionar a fórmula e evitar que o formato de data e hora seja substituído é copiar qualquer uma das duas versões abaixo e colar na célula J2, uma vez que o caractere "igual a" (=) tenha sido digitado na célula para começar a editar a célula:
(((B2/1000000000+(-6*3600))/86400)+25569)
(((B2/1000000000)/86400)+25569)
Nota: Se o texto for colado no J2 sem primeiro colocar a célula no modo de edição (para chamar), o formato da célula será substituído. Como alternativa, preceda a fórmula com um "=", copie todo o texto e clique com o botão direito do mouse na célula J2 para Colar Especial, selecione Como Texto e clique em OK. Deve ter o mesmo efeito. Se isso for feito bem, o Excel fará algumas coisas automaticamente:
  • 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:
  1. 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
  2. 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.
A barra de status na parte inferior mostra quantas linhas correspondem a essa seleção.

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.

Affected Products

Data Domain

Products

Data Domain
Article Properties
Article Number: 000081345
Article Type: Solution
Last Modified: 08 Jun 2026
Version:  26
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.