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

本文章適用於 本文章不適用於 本文無關於任何特定產品。 本文未識別所有產品版本。

症狀

O Data Domain é 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
Devido às alterações recentes feitas no DDOS, os comandos a serem usados para coletar listagens de arquivos dos sistemas Data Domain foram alterados ao longo do tempo. Eles só estão disponíveis na CLI do DD e, dependendo da versão, são:
  • 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

原因

As versões 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110 e posteriores do DDOS não fornecem mais acesso ao comando abaixo no modo SE:
sfs_dump
O 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 comando se 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 -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 é 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_dump
O 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 -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 execução em todo o FS em uma única chamada
Para clientes nessas versões, se precisarem despejar todos os detalhes do arquivo de MTrees no arquivo, será necessário iterar toda a lista de MTrees no Data Domain FS e executar o comando uma vez para cada um deles. Um usuário pode obter uma lista de MTrees no sistema executando:
# mtree list
A saída do comando abaixo é idêntica à de um comando anterior se sfs_dump quando usado sem a opção -c .
filesys sfs-dump
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 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 comando se 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
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 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, 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)
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, 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)
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 "pre-comp size for the file in 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:
  • 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
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, 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
 
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 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:
  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, incluindo que a primeira linha seja detectada como os cabeçalhos
  5. 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.
Os dados na planilha já são úteis, você pode fazer 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 Nome para que apenas os arquivos na saída de detalhes do arquivo do Data Domain 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–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:
  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. 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"
  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, poderá usar uma forma abreviada da fórmula. 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, depois de digitar o caractere "igual a" = na célula para começar a editar a célula:
(((B2/1000000000+(-6*3600))/86400)+25569)
(((B2/1000000000)/86400)+25569)
Nota: Se você colar texto na J2 sem primeiro colocar a célula no modo de edição (por assim dizer), substituirá o formato da célula. Como alternativa, você pode preceder a fórmula com um "=", copiar o texto inteiro e clicar com o botão direito na célula J2 para Colar Especial, selecionar Como Texto e clicar 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 dados, a única coisa que você teria que fazer é definir um nome próprio para a coluna (Data)

Informações de compactação

Você pode adicionar colunas para as informações de compactação por arquivo, fazendo o que foi explicado acima. Desta vez, estamos mostrando as fórmulas, incluindo o "=", então você deve copiar o texto inteiro 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 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:
  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.

其他資訊

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

受影響的產品

Data Domain

產品

Data Domain
文章屬性
文章編號: 000081345
文章類型: Solution
上次修改時間: 27 5月 2025
版本:  21
向其他 Dell 使用者尋求您問題的答案
支援服務
檢查您的裝置是否在支援服務的涵蓋範圍內。