Data Domain: Come elencare i file nel file system di Data Domain utilizzando sfs-dump
Summary: Questo articolo illustra l'utilizzo dell'interfaccia della riga di comando (CLI) di Data Domain per eseguire il dump degli elenchi di file e directory per singoli MTrees o per il file system (FS) nel suo complesso. ...
Symptoms
Indipendentemente dal protocollo acquisito, Data Domain FS contiene solo file (all'interno delle directory) organizzati in MTrees. Tutti i file (sia per i file in Active che in eventuali unità cloud) condividono la stessa root e lo stesso namespace; esiste un unico namespace, il che significa che gli elenchi di file e directory includono i file nelle unità Active e Cloud senza alcuna distinzione.
Ottenere un dump dettagliato dei file può essere utile per motivi quali:
-
Confronto con un elenco di file gestiti da un'applicazione di backup per verificare la presenza di eventuali file orfani dell'applicazione di backup.
-
Elencare tutti i file al di sopra di una determinata soglia di età, per determinare se l'applicazione di backup sta applicando la fine della retention del backup
Cause
Lo strumento CLI per la creazione di elenchi di file è sfs_dump.
Resolution
Utilizzare la registrazione della sessione SSH per raccogliere l'output dell'elenco. Il comando esatto da eseguire dalla CLI di DD per raccogliere elenchi di file dipende dalla versione di Data Domain Operating System (DDOS) in uso.
Link rapidi
- Creazione di un elenco di versioni DDOS precedenti a 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110
- Creazione di un elenco per DDOS versioni 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110 o successive
- Crea elenco per DDOS versioni 8.1.0.0, 7.13.1.10, 7.10.1.30 e 7.7.5.40 o successive
- Convertire l'elenco in un file CSV
- Importazione dell'output sfs_dump in formato CSV in un foglio elettronico
Per ottenere un elenco dettagliato dei file in un Data Domain dalla CLI ed eventualmente il processo per ottenere informazioni sui file archiviati in Data Domain, dipende dalla versione DDOS in esecuzione.
Una volta raccolto il file di output di testo con i dettagli del file, l'elaborazione dell'output in un formato più utilizzabile è sempre la stessa, poiché il formato di output per tutte le versioni di DDOS è lo stesso (o può essere convertito in un formato comune utilizzando uno script).
Registrazione sessione SSH:
Common a tutte le versioni di DDOS è il requisito di accedere a Data Domain come utente amministratore e di farlo utilizzando un client SSH che supporta la registrazione dell'output della console in un file di testo sul lato client (PuTTY funziona bene per questo). Configurare il client SSH in modo che registri l'output in un file di testo sul client (assicurandosi che non vi siano limiti al numero di righe registrate o alla lunghezza delle singole righe). Il file di log della sessione SSH (e quindi gli elenchi di file DD) non viene scritto su Data Domain, ma sul client desktop (tipicamente) da cui viene avviata la connessione SSH.
Quando si raccoglie l'output della sessione SSH, assicurarsi di assegnare al file un nome significativo (ad esempio aggiungendo il nome host di Data Domain e il nome MTree di cui eseguire il dump) e assicurarsi che vi sia spazio sufficiente per il file di log, che può essere di circa 200 MB per i Data Domain con 1 milione di file.
Versioni DDOS precedenti a 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110:
Queste versioni supportano ancora se sfs_dump comando (e il comando -c per generare i dettagli del file direttamente come CSV senza ulteriori elaborazioni), anche se è sconsigliato passare alla modalità Support Engineer (SE) per motivi di sicurezza e aggiornare invece alla versione DDOS più recente disponibile.
Accedere a Data Domain come utente admin con un client SSH configurato per scrivere l'output su disco, passare alla modalità privilegi SE, quindi eseguire il seguente comando per ogni MTree che richiede i dettagli del file per:
#### 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>
Il comando in queste versioni può anche produrre l'elenco di tutti i file nel FS contemporaneamente (anziché un MTree alla volta). Per eseguire il dump dei dettagli delle informazioni sui file per tutti i file nel FS, lasciare il percorso MTree:
# se sfs_dump -c
Al termine, assicurarsi di interrompere la registrazione del client SSH su disco e mettere da parte i file per ulteriori elaborazioni.
Il formato per l'output del comando è una singola riga per ogni file. Se non si utilizza -c, il formato è identico a quello mostrato sopra per le versioni successive. Nei casi in cui -c (per l'output CSV), il formato è simile al seguente (inclusa un'intestazione mostrata come prima riga nell'output):
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
DDOS versioni 7.13.0.0, 7.10.1.15, 7.7.5.25 e 6.2.1.110 o successive:
L MTree da elencare deve essere inserito dopo la parola chiave "MTree":
# filesys sfs-dump mtree <mtree-path>
filesys sfs_dum comando, rispetto a se sfs_dump:
- Il nuovo comando non supporta l'attributo
-copzione per eseguire il dump delle informazioni sui file in formato CSV (colonna) - Il nuovo comando può eseguire solo un MTree alla volta, non è previsto alcun supporto per l'esecuzione sull'intero FS in un'unica chiamata
Se è necessario eseguire il dump di tutti i dettagli del file MTrees nel file, ripetere l'intero elenco di MTrees in Data Domain FS ed eseguire il comando una volta per ciascuno di essi. Un utente può ottenere un elenco di MTrees nel sistema eseguendo:
# mtree list
Accedere a Data Domain come utente admin con un client SSH configurato per scrivere l'output su disco, quindi eseguire il seguente comando per ogni MTree che richiede i dettagli del file per:
# filesys sfs-dump mtree <mtree-path>
Se sono necessari i dettagli del file per più MTree, scegliere l'opzione per eseguire tutti i dump sullo stesso file di output o passare dalla configurazione client SSH a un file diverso prima di eseguire il comando per ciascuno MTrees.
In alternativa, raccogliere gli output in modo automatico, eseguendo il comando utilizzando 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
In entrambi i casi, le informazioni di output hanno una riga per ogni file, con il seguente 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
DDOS 8.1.0.0, 7.13.1.10, 7.10.1.30 e 7.7.5.40 o versioni successive:
filesys fs-dump:
- La possibilità di aggiungere il
-copzione, in modo che l'output venga stampato in una versione formattata in formato CSV (campi separati da colonne) - Possibilità di eseguire contemporaneamente le informazioni di dump dei file per tutti i file nell FS
- Utilizzare la registrazione della sessione ssh per raccogliere l'output.
Il comando continua a essere lo stesso delle versioni immediatamente precedenti, con i miglioramenti menzionati, riepilogati di seguito:
#### 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
Questo comando continua a essere "nascosto", in modo che non venga visualizzato nella guida interattiva della CLI o nella documentazione.
Come elaborare i dati sfs-dump sfs_dump o filesys in qualcosa di utile:
Il formato dei singoli file riportati nell'output quando si utilizza filesys sfs-dump oppure sfs_dump senza -c L'opzione può essere riassunta come segue:
/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
Nell'esempio precedente, l'originale ha una dimensione di 136.794 byte che, dopo essere passata attraverso la pipeline di acquisizione di Data Domain FS, viene calcolata per utilizzare 15.045 byte dopo la deduplica e 8.760 byte quando i segmenti univoci per il file vengono compressi prima di essere scritti su disco. Quindi:
- La deduplica dei file (nota anche come "
gcomp" o compressione globale) è un fattore x9,09 (da 136.794 a 15.045 byte) - La compressione locale del file (nota anche come "l
comp" per la compressione locale) è un fattore x1,72 (da 15.045 a 8.760 byte) - La riduzione totale delle dimensioni dei file stimata (nota come "rapporto di compressione") è un fattore x15,62 (da 136.794 a 8.760 byte)
Alternativamente sfs_dump -c L'output è simile, ma più conciso:
/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)
Per questo esempio, è possibile eseguire gli stessi calcoli del precedente:
- La deduplica dei file (nota anche come "
gcomp" o compressione globale) è un fattore x0,99 (da 33.554.431 a 33.668.007 byte) - La compressione locale del file (nota anche come "
lcomp", per la compressione locale) è un fattore x0,98 (da 33.668.007 a 34.208.564 byte) - La riduzione totale delle dimensioni dei file stimata (nota come "rapporto di compressione") è un fattore x0,98 (da 33.554.431 a 34.208.564 byte)
Rispetto al file mostrato per il no -c Questo esempio, non ottiene alcuna deduplica (nessun segmento ridondante) né alcuna compressione locale. Ciò indica che il file è compresso.
post_lc_size se una determinata quantità non implica che lo spazio su disco utilizzato dal file sia identico a tale quantità, in quanto esistono molti overhead a livello di FS che non vengono considerati a livello di file. Le limitazioni sono le stesse di quelle già note per il comando:
mtree show compressionL'utilizzo delle informazioni nei file di output di cui sopra consiste nell'elaborazione dei dati numerici in un modo che si adatti agli obiettivi dell'utente. Alcuni esempi di casi d'uso possono essere:
- Determinazione del
gcompelcompper i file corrispondenti a un determinato percorso (se un percorso può essere abbinato a un particolare backup server, client, policy, processo e così via) - Calcolo della quantità di dati (
pre-comp) viene archiviato in una determinata posizione più vecchia di un determinato periodo di tempo (per determinare gli orfani o risolvere i problemi con l'applicazione di backup che non scade per i backup scaduti in tempo) - Qualsiasi altro tipo di statistica per cui si può avere un uso
sfs_dump -c nelle versioni più recenti, i nostri consigli sono di convertire i dati di output nel formato CSV di cui sopra, quindi utilizzare il file in formato CSV per un'ulteriore elaborazione, tuttavia, a seconda delle proprie competenze, l'output non CSV può essere elaborato direttamente.
Converti in CSV:
Per convertire un non-CSV sfs_dump output in uno che è identico a quello che sfs_dump -c stampato, è possibile utilizzare la seguente riga di comando di 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
Tutto ciò che va oltre questo punto viene fornito agli utenti così come sono. Non vi è alcuna garanzia o obbligo da parte di Dell per le istruzioni condivise di seguito. Ottenere informazioni dai dettagli dell'elenco dei file è compito dell'utente e il modo in cui raggiungere questo obiettivo dipende interamente dal set di strumenti utilizzato per l'estrazione dei dati nell'output del dump del file, dall'obiettivo da raggiungere e dalle competenze dell'utente nell'elaborazione dei dati dall'output del comando descritto in precedenza. Un utente può scegliere di utilizzare l'elaborazione a riga di comando di Linux di file di testo per scaricare alcuni aggregati, altri possono scegliere di produrre input per la rappresentazione grafica dei valori usando "gnuplot", mentre si ritiene che la maggior parte degli utenti cerchi un approccio più semplice (ma limitato) per costruire un foglio di calcolo dal file CSV per l'analisi.
Dell si è impegnata a garantire che le istruzioni riportate di seguito siano corrette, funzionanti e utili per gli utenti, ma non può garantire che funzionino e non viene fornito supporto, in quanto non rientrano nell'ambito del supporto.
Importazione dell'output sfs_dump in formato CSV in un foglio elettronico (ad esempio per Excel):
Una volta resa disponibile la versione CSV dell'elenco dei dettagli del file, un modo per ottenere intelligence dai dati è caricare i dati in un software per fogli di calcolo. Microsoft Excel viene utilizzato come esempio, anche se le istruzioni dovrebbero essere simili per altri software. Per importare il file di testo CSV in Excel come CSV, attenersi alla seguente procedura:
- Apri Excel e crea un nuovo foglio di calcolo vuoto
- Vai al menu Dati in alto, quindi fai clic sull'icona denominata Da testo/CSV
- Utilizzare la finestra di dialogo per individuare i dati del file in formato CSV (
sfs-dump-CSV.csvcome nello script di conversione di esempio dal formato non CSV), selezionarlo e fare clic su Importa - Se il formato del file di input è corretto ed Excel è in grado di disegnare il formato dalle prime 200 righe (cosa che dovrebbe), una finestra di dialogo dovrebbe mostrare l'anteprima del foglio di calcolo da generare. Esaminare le informazioni per assicurarsi che siano corrette, incluso che la prima riga venga rilevata come intestazioni
- Se tutto sembra a posto con l'anteprima, fai clic sul pulsante Carica nella parte inferiore della finestra di dialogo e il nuovo foglio di calcolo viene presentato con una bella formattazione e le intestazioni dei campi trasformate in quelle abilitate per la ricerca e il filtro.
I dati nel foglio elettronico sono già utili, ad esempio l'applicazione di un filtro numerico a campi numerici come la dimensione (per visualizzare solo i file oltre una determinata dimensione) o l'applicazione di un filtro di testo sul campo name in modo che vengano visualizzati solo i file nel file di Data Domain che illustrano l'output corrispondente a un determinato modello (solo quelli che iniziano con il percorso di un particolare MTree). e fare altri calcoli derivati da quei dati.
Un foglio elettronico Excel importato correttamente deve contenere i dati nelle colonne A-I. Se i dati sono presenti solo nella colonna A, ma si estendono sullo schermo, chiudere Excel e riprovare i passaggi da 1 a 5 precedenti.
Aggiungi campi calcolati aggiuntivi:
Il foglio di calcolo può essere esteso con tutti i campi calcolati richiesti dall'utente. Un campo interessante da aggiungere è la data e l'ora leggibili dall'uomo corrispondenti all'ora mtime dei file (l'ora dell'ultima modifica, di solito, l'ora in cui è stato scritto sul DD). Inoltre, il calcolo e la visualizzazione di alcuni valori di compressione per file possono essere utili a seconda dello scopo per cui vengono utilizzati i dati. Le nuove colonne vengono popolate automaticamente utilizzando le formule di Excel come descritto di seguito.
Conversione timestamp:
Per convertire il timestamp simile a UNIX in data e ora leggibili dall'utente:
- Fare clic con il pulsante destro del mouse sulla cella J2 e scegliere "Formatta celle"
- Nell'elenco "Category" a sinistra, scegli "Custom".
- Se non è già presente, creare il formato per il formato di data-ora leggibile dall'utente (l'esempio include la stringa EST alla fine. Può essere sostituito con la definizione testuale del fuso orario o rimuovere completamente "EST" se non si è interessati): aaaa-mm-gg hh:mm:ss "EST"
- Al termine, cliccare su "Ok". Ora la cella J2 ha un formato personalizzato per i dati.
- Aggiungi la seguente formula alla cella J2. Nella formula, sostituire (-6*3600) con la differenza di fuso orario corretta corrispondente a UTC per il fuso orario configurato in Data Domain al momento del recupero dei dati "sfs-dump". Ad esempio, l'ora orientale degli Stati Uniti è 6 ore indietro rispetto all'UTC durante l'estate, da cui il "-6" qui.
(((B2/1000000000+(-6*3600))/86400)+25569) (((B2/1000000000)/86400)+25569)
- Incolla la formula nella cella J2 e anche in ogni singola cella del resto delle righe del foglio di calcolo
- Calcolare la formula per l'intero foglio di calcolo e visualizzare il valore di data e ora nel formato configurato
- Formattare la colonna come quelle esistenti, e avere l'intestazione configurata come una data con la possibilità di applicare filtri data, l'unica cosa da fare è impostare un nome corretto per la colonna (Date)
Informazioni sulla compressione:
È possibile aggiungere colonne per le informazioni di compressione per file, procedendo come spiegato in precedenza. Questa volta le formule mostrano includendo il "=", quindi l'intero testo deve essere copiato, e Incolla speciale come testo:
- Copiare la formula seguente e incollare speciale come testo nella cella K2 per creare una colonna per la deduplica per file oppure
gcomp:=IF(H2=0,0,D2/H2)
- Copiare la formula seguente e Incolla speciale come testo nella cella L2 per creare una colonna per la compressione locale per file oppure
lcomp:=IF(I2=0,0,H2/I2)
- Copiare la formula seguente e Incolla speciale come testo nella cella M2 per creare una colonna per il rapporto di compressione totale dei file per file:
=K2*L2
Assegnare un nome appropriato alle nuove colonne. Se si desidera che il formato dei valori di compressione sia diverso (ad esempio, per limitare il numero di decimali), procedere come nell'esempio per la data e l'ora e impostare il formato numerico della cella in anticipo, prima di incollare la formula.
Ricordati di mantenere il tuo lavoro al sicuro andando al menu File e facendo. Salva con nome: assicurarsi che il tipo del file salvato sia impostato su Cartella di lavoro Excel (*.xlsx), in modo da mantenere la formattazione e il filtraggio.
Al completamento delle azioni descritte, il foglio elettronico contiene le seguenti colonne (pertinenti):
- A contiene un nome file
- B contiene il timestamp della data (in epoca UNIX in nanosecondi) dell'ultima scrittura del file
- D è la dimensione originale del file
- H è la dimensione dopo la compressione globale
- I è la dimensione dopo la compressione globale e locale
- J contiene il timestamp dell'ultima scrittura del file in formato leggibile
- K contiene la compressione globale (deduplica) per il file
- L contiene la compressione locale per il file
- M contiene la compressione totale del file
Tutte le dimensioni dei file sono espresse in byte.
È ora possibile filtrare o ordinare in Excel in base alle esigenze per creare report sui dati.
- Ad esempio, per visualizzare solo i file all'interno di MTree /data/col1/backup che hanno più di 30 giorni:
- Fai clic sulla freccia giù nell'intestazione Nome, seleziona Filtri di testo, quindi Inizia con e digita
/data/col1/backup/nella scatola. La barra finale è importante. Cliccare su OK. - Cliccare sulla freccia giù nell'intestazione Last Written Date, selezionare Date Filters, quindi Before. Utilizzare il selettore data a destra della finestra di dialogo per selezionare una data di 30 giorni prima. Cliccare su OK.
Additional Information
Comando per la posizione del dump del file (attivo e cloud)
È possibile eseguire il dump dell'elenco dei file con l'indicazione di quali sono attivi e quali in qualsiasi unità cloud, ovvero:
#### 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
L'output in entrambi i casi è del seguente 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 ------------------------- ---------------------- ---------------------- ---------------------------
Tuttavia, il comando precedente tende a essere inadeguato per la maggior parte degli intenti, poiché, ad esempio, le dimensioni sono espresse in unità leggibili dall'uomo (anziché in byte o MiB o in qualsiasi moltiplicatore impostato) e l'ora di posizionamento corrisponde all'ora in cui sono stati eseguiti i backup in Data Domain per i file in Active, ma non corrisponde per i file nel cloud ("Placement Time" per i file nel cloud è la data e l'ora in cui il file è stato spostato nell'unità cloud).
Inoltre, tenere presente che il comando seguente (e lo script per la conversione da non CSV) sfs_dump) genera i dati in colonne separate da tabulazioni. I caratteri di tabulazione presenti nell'output devono essere salvati nel file di registrazione, altrimenti i passaggi descritti in precedenza per importare il file CSV in Excel non possono separare correttamente i campi.
sfs_dump -c
Le istruzioni fornite presuppongono una conoscenza ragionevole di Excel, ma possono essere tradotte in altri software per fogli elettronici.
Le versioni moderne di Excel consentono molte righe, ma tieni presente che ogni file sul sfs_dump L'output da elaborare è una singola riga, quindi Excel deve essere in grado di elaborare e aggiornare rapidamente un foglio di calcolo con tante righe quanti sono i file nel set di dati. Il limite rigido è leggermente superiore a 1 milione di righe, ma anche con un numero di file ben al di sotto di tale limite, Excel potrebbe non essere appropriato per il lavoro (troppo lento).
Se l'opzione sfs_dump l'output contiene troppi file per la versione di Excel o per elaborare i dati in bit più piccoli per le prestazioni, provare a eseguire la procedura una volta per ogni MTree, in modo che siano presenti più fogli elettronici per il sistema.
Anche un singolo MTree sfs_dump l'output potrebbe essere troppo grande per Excel, nel qual caso è possibile utilizzare il comando split Linux (o qualsiasi altro strumento simile per dividere i confini finali di un file di testo online di grandi dimensioni) per avere diversi file CSV più piccoli da elaborare uno alla volta, ad esempio:
# 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)
Ad esempio, per dividere un file di testo di input in blocchi di 200 MiB ciascuno, in modo che i pezzi siano denominati a partire da:
"sfs_dump.out.split"
Quindi eseguire:
# split -b 200M sfs_dump.out sfs_dump.out.split
Script per utilizzare "filesys sfs-dump" per l'intero dump FS dei dati di file.
Per quelle poche versioni che non avevano la possibilità di scaricare i dettagli dei file in formato CSV, lo script mostrato di seguito viene fornito così com è (senza alcuna garanzia) da Dell per ottenere un risultato simile elaborando non CSV sfs_dump Output.
Poiché le versioni che non supportano l'output CSV sono anche quelle che non consentono di eseguire il dump delle informazioni per tutti i file nel FS nel suo complesso, lo script utilizza SSH per connettersi al Data Domain di destinazione per scorrere l'elenco degli MTrees, eseguendo il dump del file un MTree alla volta, per raccogliere l'elenco dei file per tutti gli MTrees. quindi trasformarsi in un formato CSV adeguato per ulteriori elaborazioni:
#!/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 per combinare l'output di "sfs-dump" non CSV e "filesys report generate file-location" in un file CSV con tutte le stesse informazioni dello script precedente e per livello di file e informazioni temporali di posizionamento.
Il seguente script viene fornito così com è (senza alcuna garanzia) da Dell come mezzo per aggiungere valore all'output di sfs_dump e filesys report genera i comandi per la posizione dei file riportati sopra. Un utente può filtrare i file in base al tier (attivo o una qualsiasi delle due unità cloud configurate) per ottenere informazioni più precise sulla distribuzione dei file per tier aggiungendo le informazioni sulla posizione del tier e sull'ora di posizionamento a ogni voce del file nel file CSV di output.
Gli script si aspettano il file sfs-dump (non sfs_dump -c) come primo parametro e il report filesys genera l'output della posizione del file come secondo. L'output viene scritto in un nome file hardcoded "sfs-dump-output-tiers.csv", che può essere modificato all'interno dello script stesso.
L'output può essere elaborato utilizzando Excel nello stesso modo descritto sopra.
#!/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
Per gli utenti di Veritas NetBackup:
Veritas NetBackup (NBU) è noto per creare file in un Data Domain con caratteri due punti come parte dei nomi dei file. Ad esempio, di seguito sono riportati i percorsi validi dei nomi di file NBU quando Data Domain viene utilizzato come storage back-end per 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::
Ciò pone un problema con gli script di esempio precedenti, in quanto il carattere due punti viene utilizzato come delimitatore per il sfs_dump L'output del comando e l'esecuzione degli script precedenti produrrebbe risultati errati.
In questi casi, lo script deve essere modificato nel modo seguente:
--- 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."
Sebbene le modifiche siano condivise per consentire allo script di eseguire l'iterazione su tutti gli MTree in un Data Domain per eseguire il pull per ciascun MTree sfs_dump dati, le modifiche sono le stesse per l'altro script. Tuttavia, come avviene anche per gli script stessi, le modifiche di cui sopra vengono fornite da Dell senza alcuna garanzia, nella speranza che siano utili.