Data Domain: Jak vypsat soubory v systému souborů Data Domain, sfs-dump
摘要: Tento článek vysvětluje, jak pomocí rozhraní příkazového řádku Data Domain vypsat výpis souborů a adresářů pro jednotlivé fondy MTree nebo pro systém souborů (FS) jako celek. Uživatelé tak mohou zjistit, co se ze zálohovací aplikace ukládá do systému Data Domain. ...
症狀
Bez ohledu na vložený protokol obsahuje systém Data Domain FS pouze soubory (v adresářích) uspořádané ve fondech MTree. Všechny soubory (jak v aktivních, tak v libovolných cloudových jednotkách) sdílejí stejný kořenový adresář a obor názvů. Existuje jeden obor názvů, což znamená, že výpisy souborů a adresářů zahrnují soubory v aktivních a cloudových jednotkách bez jakéhokoli rozdílu.
Získání podrobného výpisu stavu souboru může být užitečné z následujících důvodů:
- Porovnání se seznamem souborů spravovaných zálohovací aplikací k vyhledání osamocených souborů pomocí této aplikace.
- Výpis všech souborů, které překročily určitou prahovou hodnotu stáří, aby bylo možné zjistit, zda zálohovací aplikace vynucuje uchování záloh
- Pro systémy DDOS starší než 7.13.0.0, 7.10.1.15, 7.7.5.25 a 6.2.1.110
se sfs_dump
- Pro všechny systémy DDOS verze 7.13.0.0, 7.10.1.15, 7.7.5.25, 6.2.1.110 nebo novější
filesys sfs-dump
原因
sfs_dumpRežim SE, který byl nezbytný pro přístup k této funkci, je zastaralý, jak je vysvětleno v části DSA-2023-412: Aktualizace zabezpečení Dell Technologies PowerProtect kvůli několika bezpečnostním chybám
Na přechodnou dobu nebyly některé funkce ve starém příkazu
sfs_dump v režimu SE k dispozici, ale byly znovu zavedeny v pozdější fázi. Proto se tento článek znalostní databáze snaží vysvětlit rozdíly a jak se v každém případě vypořádat s výstupem příkazu.解析度
Podrobný výpis souborů v systému Data Domain z rozhraní příkazového řádku a případně proces získání informací o souborech uložených v systému Data Domain závisí na spuštěné verzi systému DDOS. Jakmile je shromážděn textový výstupní soubor s podrobnostmi o souboru, zpracování výstupu do použitelnější podoby je vždy stejné, protože výstupní formát pro všechny verze systému DDOS je stejný (nebo jej lze převést do běžného formátu pomocí skriptu).
Společný pro všechny verze systému DDOS je také požadavek na přihlášení do systému Data Domain jako uživatel admin, a to pomocí klienta SSH, který podporuje protokolování výstupu konzole do textového souboru na straně klienta (v tomto případě dobře funguje nástroj PuTTY). Uživatel musí nakonfigurovat klienta SSH tak, aby zaznamenával výstup do textového souboru v klientském počítači (aby bylo zajištěno, že neexistují žádná omezení počtu zaznamenaných řádků nebo délky jednotlivých řádků). Soubor protokolu relace SSH (a tedy výpisy souborů DD) se nezapisuje do systému Data Domain, ale (obvykle) do stolního počítače, ze kterého je připojení SSH inicializováno.
Při shromažďování výstupu relace SSH nezapomeňte dát souboru smysluplný název (například přidejte název hostitele Data Domain a název fondu MTree, který chcete vypsat) a zajistěte dostatek místa pro soubor protokolu, který může u systémů s 1 milionem souborů zabírat přibližně 200 MB.
Přesný příkaz, který je třeba spustit z rozhraní příkazového řádku DD za účelem shromáždění výpisů souborů, závisí na použité verzi systému DDOS – ty jsou shrnuty níže.
Verze systému DDOS starší než 7.13.0.0, 7.10.1.15, 7.7.5.25 a 6.2.1.110:
Tyto verze stále podporují příkazse sfs_dump (a možnost -c pro získání podrobností o souboru přímo ve formátu CSV bez nutnosti dalšího zpracování), i když se z bezpečnostních důvodů nedoporučuje přejít do režimu SE. Místo toho proveďte upgrade na nejnovější dostupnou verzi LTS DDOS.
Ujistěte se, že jste přihlášeni do systému Data Domain jako uživatel admin s klientem SSH nakonfigurovaným pro zápis výstupu na disk, změňte jej na režim oprávnění SE a poté spusťte následující příkaz u každého fondu MTree, pro který chcete získat podrobnosti o souboru:
#### 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>Příkaz v těchto verzích může také vytvořit výpis pro všechny soubory v sadě FS najednou (namísto postupně pro jednotlivé fondy MTree). Chcete-li vypsat podrobnosti pro všechny soubory v systému FS, ponechte cestu k fondu MTree:
# se sfs_dump -cPo dokončení se ujistěte, že jste zastavili protokolování klienta SSH na disk, a odložte soubory stranou pro další zpracování.
Ve výstupu příkazu každý jeden řádek patří jednomu souboru. Pokud se nepoužívá
-c , formát je shodný s formátem uvedeným výše pro pozdější verze. V případech, kdy byl použit parametr -c (pro výstup CSV), je formát následující (včetně hlavičky zobrazené na prvním řádku ve výstupu):
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 verze 7.13.0.0, 7.10.1.15, 7.7.5.25 a 6.2.1.110 nebo novější:
Tato verze již neposkytuje přístup k sfs_dump z režimu SE (následující nastavení není k dispozici):
se sfs_dumpRežim SE je zastaralý kvůli zjištěným problémům se zabezpečením. Alternativní příkaz, který je třeba použít, je uveden níže. Všimněte si mírně odlišného názvu příkazu a toho, že v tomto případě se požadovaný fond MTree uvádí za klíčovým slovem „MTree“:
# filesys sfs-dump mtree <mtree-path>Pro verze v záhlaví je tento příkaz sfs-dump ve srovnání s příkazem
se sfsa_dump:
- Nový příkaz nepodporuje možnost
-cpro výpis informací o souboru ve formátu CSV (sloupec) - Nový příkaz může současně spouštět pouze jeden fond MTree, není k dispozici podpora spuštění v celém systému FS v rámci jednoho volání
# mtree listVýstup níže uvedeného příkazu je stejný jako u předchozího příkazu
se sfs_dump při použití bez možnosti -c .
filesys sfs-dumpUjistěte se, že jste přihlášeni do systému Data Domain jako uživatel admin s klientem SSH nakonfigurovaným pro zápis výstupu na disk, a poté spusťte následující příkaz pro každý fond MTree, pro který chcete získat podrobnosti o souboru:
# filesys sfs-dump mtree <mtree-path>
Pokud získáváte podrobnosti o souborech pro více než jeden fond MTree, vyberte možnost pro provedení všech výpisů do stejného výstupního souboru, nebo před spuštěním příkazu pro každý z fondů MTree přepněte konfiguraci klienta SSH na jiný soubor.
Případně můžete provést sběr výstupu bezobslužným způsobem pomocí příkazu přes 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
V obou případech patří jednotlivé řádky výstupních informací jednotlivým souborům a mají následující formát:
/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 verze 8.1.0.0, 7.13.1.10, 7.10.1.30 a 7.7.5.40 nebo novější:
Vzhledem k poptávce zákazníků byly některé funkce ve starém příkazuse sfs_dump znovu zavedeny a jsou nyní k dispozici pro příkaz filesys sfs-dump , jmenovitě:
- Možnost přidat možnost
-c, takže se výstup vytiskne ve formátu CSV (pole oddělená sloupci) - Možnost spustit informace o výpisu souborů pro všechny soubory v systému FS najednou
#### 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
Tento příkaz bude i nadále „skrytý“, takže se nezobrazí v interaktivní nápovědě rozhraní příkazového řádku ani v dokumentaci.
Jak zpracovat data sfs_dump nebo filesys sfs-dump do užitečného formátu:
Formát jednotlivých souborů, které jsou hlášeny ve výstupu při použití příkazu filesys sfs-dump nebo sfs_dump bez -c lze popsat následovně:
/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 ignoreVe výše uvedeném příkladu máme soubor s původní velikostí 136 794 bajtů, pro který je podle výpočtu po průchodu kanálem Data Domain FS potřeba 15 045 bajtů po deduplikaci a 8 760 bajtů, když jsou jedinečné segmenty souboru před zápisem na disk zkomprimovány. Proto:
- Deduplikace souborů (to, čemu říkáme „gcomp“ neboli globální komprese) má faktor x9,09 (136 794 na 15 045 bajtů)
- Místní komprese souborů (kterou nazýváme „lcomp“ pro místní kompresi) má faktor x1,72 (15 045 na 8 760 bajtů)
- Odhadované celkové zmenšení velikosti souboru (označované jako „kompresní poměr“) má faktor x15,62 (136 794 až 8 760 bajtů)
sfs_dump -c podobný, ale stručnější:
/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)V tomto příkladu můžeme provést stejné výpočty jako v předchozím příkladu:
- Deduplikace souborů (to, čemu říkáme „gcomp“ nebo globální komprese) má faktor x0,99 (33 554 431 na 33 668 007 bajtů)
- Místní komprese souborů (kterou nazýváme „lcomp“ pro místní kompresi) má faktor x0,98 (33 668 007 na 34 208 564 bajtů)
- Odhadované celkové zmenšení velikosti souboru (označované jako „kompresní poměr“) má faktor x0,98 (33 554 431 až 34 208 564 bajtů)
-c tento příklad nedosahuje žádné deduplikace (žádné redundantní segmenty) ani žádné místní komprese. To znamená, že se jedná o komprimovaný soubor.
post_lc_size souboru, neznamená to, že místo na disku zabírané tímto souborem je identické s tímto množstvím, protože existuje mnoho režijních nákladů na úrovni systému FS, které nejsou brány v úvahu na úrovni jednotlivých souborů. Omezení jsou stejná jako u těch, která jsou již pro příkaz známa:
mtree show compressionVyužití informací ve výše uvedených výstupních souborech spočívá ve zpracování číselných dat způsobem, který vyhovuje cílům uživatele. Zde je několik příkladů použití:
- Určení gcomp a lcomp pro soubory odpovídající určité cestě (pokud lze cestu přiřadit k určitému zálohovacímu serveru, klientovi, zásadě, úloze atd.)
- Výpočet, kolik dat (pre-comp) je uloženo v daném umístění, které je starší než dané množství (pro určení osamocených souborů nebo řešení problémů se zálohovací aplikací, ve které nedochází k vypršení platnosti záloh)
- Jakýkoli jiný užitečný typ statistiky
sfs_dump -c v novějších verzích, doporučujeme převést výstupní data do výše uvedeného formátu CSV a poté použít soubor ve formátu CSV k dalšímu zpracování, nicméně v závislosti na vašich dovednostech můžete přímo zpracovat výstup i v jiném formátu než CSV.
Pro převod souboru v jiném formátu než CSV
sfs_dump do takového, který je totožný s tím, co vytiskne příkaz sfs_dump -c , můžete použít následující příkazový řádek systému 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
Vše nad tímto bodem je uživatelům poskytováno tak, jak je. Na níže uvedené pokyny se nevztahuje žádná záruka ani závazek ze strany společnosti Dell. Získání informací z podrobností výpisu souborů je úkolem uživatele a způsob, jak toho dosáhnout, zcela závisí na sadě nástrojů používané pro získávání dat ve výstupu výpisu souboru, cíli, kterého chce uživatel dosáhnout, a vlastních odborných znalostech uživatele při zpracování dat z výše uvedeného výstupu příkazu. Jeden uživatel se může rozhodnout použít zpracování textových souborů pomocí příkazového řádku systému Linux k výpisu některých agregátů, jiný se může rozhodnout vytvořit vstup pro grafy pomocí „gnuplot“, zatímco většina uživatelů zřejmě hledá jednodušší (ale omezený) přístup k vytvoření tabulky ze souboru CSV pro analýzu.
Společnost Dell se snaží zajistit, aby níže uvedené pokyny byly pro uživatele správné, funkční a užitečné, ale nemůžeme zaručit, že vám budou vyhovovat, a nezajišťujeme jim podporu, protože jsou mimo její rozsah.
Import výstupu ve formátu CSV sfs_dump do tabulky (příklad pro aplikaci Excel):
Jakmile je k dispozici verze CSV výpisu podrobností souboru, jedním ze způsobů, jak získat informace z dat, je načíst je do tabulkového procesoru. Jako příklad je použit Microsoft Excel, i když pokyny by měly být podobné i pro jiný software. Chcete-li importovat textový soubor CSV do aplikace Excel jako CSV, postupujte následovně:
- Otevřete Excel a vytvořte novou prázdnou tabulku
- Přejděte do nabídky Data v horní části a klikněte na ikonu s názvem Z Text/CSV
- Pomocí dialogového okna vyhledejte soubor s daty ve formátu CSV (
sfs-dump-CSV.csvjako v ukázkovém skriptu pro převod z jiného formátu než CSV), vyberte jej a klikněte na tlačítko Importovat - Pokud je formát vstupního souboru správný a aplikace Excel by mohla vykreslit formát z prvních 200 řádků (což by měla), měl by se v dialogovém okně zobrazit náhled tabulky, která má být vygenerována. Zkontrolujte informace a ujistěte se, že vše vypadá správně, včetně toho, že je první řádek rozpoznán jako záhlaví.
- Pokud s náhledem vše vypadá v pořádku, klikněte na tlačítko Načíst ve spodní části dialogového okna a vaše nová tabulka se vám zobrazí s pěkným formátováním a záhlaví polí umožní vyhledávání a filtrování.
Správně importovaná excelová tabulka by měla obsahovat data ve sloupcích A až I. Pokud jsou data přítomna jenom ve sloupci A, ale roztahují se přes celou obrazovku, zavřete aplikaci Excel a opakujte kroky 1 až 5 výše.
Přidání dalších vypočítaných polí
Tabulku lze rozšířit o tolik vypočítaných polí, kolik uživatel potřebuje. Zajímavým polem, které je třeba přidat, je pro člověka čitelné datum a čas odpovídající času souborů (čas poslední změny, obvykle čas zápisu do systému DD). Výpočet a zobrazení některých hodnot komprese jednotlivých souborů může být také užitečné v závislosti na tom, k čemu se data používají. Nové sloupce se vyplní automaticky pomocí vzorců aplikace Excel, jak je popsáno níže.Převod časového razítka:
Převedení časového razítka ve stylu UNIX na datum a čas čitelné pro člověka:- Klikněte pravým tlačítkem na buňku J2 a vyberte možnost „Formát buněk“
- V seznamu „Kategorie“ vlevo vyberte možnost „Vlastní“.
- Pokud není přítomen, vytvořte formát data a času čitelný pro člověka (příklad na konci obsahuje řetězec EST. Můžete jej nahradit textovou definicí časového pásma nebo část „EST“ zcela odstranit): dd-mm-rrrr hh:mm:ss „EST“
- Po dokončení klikněte na tlačítko OK. Buňka J2 má nyní vlastní formát dat.
- Do buňky J2 přidejte následující vzorec. Ve vzorci nahraďte hodnotu (-6*3600) správným rozdílem časového pásma odpovídajícím UTC pro nakonfigurované časové pásmo v systému Data Domain v době získání dat „sfs-dump“. Například východoamerický čas je v létě o 6 hodin pozadu za UTC, proto je zde „-6“.
(((B2/1000000000+(-6*3600))/86400)+25569) (((B2/1000000000)/86400)+25569)
- Vloží vzorec do buňky J2 a také do každé buňky ostatních řádků v tabulce
- Vypočítá vzorec pro celou tabulku a zobrazí hodnotu data a času v nakonfigurovaném formátu
- Pěkně naformátuje sloupec podle stávajících a nakonfiguruje záhlaví jako Datum s možností použít filtry data. Jediné, co byste museli udělat, je nastavit správný název sloupce (Datum)
Informace o kompresi
- Zkopírujte následující vzorec a vložte jej jinak jako text do buňky K2, abyste vytvořili sloupec pro deduplikaci u jednotlivých souborů neboli gcomp:
=IF(H2=0,0,D2/H2)
- Zkopírujte následující vzorec a vložte jej jinak jako text do buňky L2 a vytvořte sloupec pro místní kompresi pro jednotlivé soubory neboli lcomp:
=IF(I2=0,0,H2/I2)
- Zkopírujte následující vzorec a vložte jej jinak jako text do buňky M2, abyste vytvořili sloupec pro celkový kompresní poměr jednotlivých souborů:
=K2*L2
Nezapomeňte si svou práci uložit v nabídce Soubor, výběrem možnosti Uložit jako. Tak zajistíte, že typ uloženého souboru je nastaven na Sešit Excelu (*.xlsx), aby bylo zachováno formátování a filtrování.
Po dokončení popsaných akcí bude tabulka obsahovat následující (relevantní) sloupce:
- A obsahuje název souboru
- B obsahuje datumové razítko (v epoše UNIX v nanosekundách), kdy byl soubor naposledy zapsán
- D je původní velikost souboru
- H je velikost po globální kompresi
- I je velikost po globální a místní kompresi
- J obsahuje datové razítko posledního zápisu souboru ve formě čitelné pro člověka.
- K obsahuje globální kompresi (deduplikaci) souboru
- L obsahuje místní kompresi souboru
- M obsahuje celkovou kompresi souboru
Nyní můžete pomocí aplikace Excel filtrovat nebo řadit svá data podle potřeby.
- Chcete-li například zobrazit pouze soubory ve fondu MTree /data/col1/backup, které jsou starší než 30 dní:
- Klikněte na šipku dolů v záhlaví Název, vyberte možnost Textové filtry, pak Začíná na a zadejte do pole
/data/col1/backup/. Koncové lomítko je důležité. Klikněte na tlačítko OK. - Klikněte na šipku dolů v záhlaví Datum posledního zápisu, vyberte Datové filtry a poté možnost Před. Pomocí nástroje pro výběr data v pravé části dialogového okna vyberte datum před 30 dny. Klikněte na tlačítko OK.
其他資訊
Příkaz k výpisu umístění souboru (aktivní a cloudová jednotka)
Existuje způsob, jak vypsat výpis souborů s uvedením toho, které jsou v aktivních a které v jakýchkoli cloudových jednotkách:#### 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
Výstup je v obou případech následujícího typu:
------------------------- ---------------------- ---------------------- --------------------------- 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 ------------------------- ---------------------- ---------------------- ---------------------------Výše uvedený příkaz však bývá většinou nedostatečný, protože například velikost je uvedena v jednotkách čitelných pro člověka (nikoli v bajtech, MiB nebo jakémkoli nastaveném násobiteli) a čas umístění odpovídá času, kdy byly provedeny zálohy do systému Data Domain pro soubory v režimu Active, ale ne pro soubory v cloudu (údaj „Placement Time“ představuje datum a čas, kdy byl soubor přesunut na cloudovou jednotku).
Upozorňujeme také, že níže uvedený příkaz (a skript pro převod z jiného typu než CSV
sfs_dump) vypíše data ve sloupcích, které jsou odděleny tabulátory. Znaky tabulátoru přítomné ve výstupu musí být uloženy v souboru protokolu, jinak pomocí výše uvedených kroků pro import souboru CSV do aplikace Excel nebude možné pole správně oddělit.
sfs_dump -cUvedené pokyny předpokládají přiměřenou znalost aplikace Excel, ale mohou být přeloženy do jiného tabulkového softwaru.
Moderní verze aplikace Excel umožňuje mnoho řádků, ale mějte na paměti, že každý soubor ve výstupu
sfs_dump , který se má zpracovat, představuje jeden řádek, takže aplikace Excel musí být schopna rychle zpracovat a aktualizovat tabulku s tolika řádky, kolik je souborů ve vaší datové sadě. Pevný limit mírně přesahuje 1 milion řádků, ale i při počtu souborů, který je výrazně nižší, nemusí být aplikace Excel pro úlohu vhodná (je příliš pomalá).
Pokud váš výstup
sfs_dump má příliš mnoho souborů pro vaši verzi aplikace Excel nebo chcete zpracovávat data v menších bitech pro výkon, můžete zkusit spustit postup jednou pro každý fond MTree, abyste měli pro systém více tabulek.
Dokonce i jediný výstup fondu MTree
sfs_dump může být pro aplikaci Excel příliš velký; v takovém případě můžete použít příkaz split systému Linux (nebo jakýkoli jiný podobný nástroj k rozdělení velkého textového souboru), abyste měli několik menších souborů CSV k postupnému zpracování, například:
# 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)
Chcete-li například rozdělit vstupní textový soubor na bloky po 200 MiB, aby názvy těchto částí začínaly na:
"sfs_dump.out.split"
, spusťte příkaz:
# split -b 200M sfs_dump.out sfs_dump.out.split
Skript, který se má použít "filesys sfs-dump" pro celý výpis FS souborových dat
U těch několika verzí, které postrádaly možnost výpisu podrobností o souboru ve formátu CSV, poskytuje společnost Dell uživatelům skript uvedený níže tak, jak je (bez záruky), aby bylo možné dosáhnout podobného výsledku zpracováním výstupu v jiném formátu než CSV sfs_dump .
Protože verze, které nepodporují výstup CSV, neumožňují výpis informací pro všechny soubory v systému FS jako celek, skript se pomocí SSH připojí k cílové datové doméně a iteruje přes seznam fondů MTree, přičemž spustí výpis souborů postupně u fondů MTree, shromáždí výpis souborů pro všechny fondy MTree a poté je převede do formátu CSV vhodného pro další zpracování:
#!/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
Skript pro zkombinování výstupu příkazů „sfs-dump“ a „filesys report generate file-location“ v jiném formátu než CSV do souboru CSV se stejnými informacemi jako ve výše uvedeném skriptu a informacemi o čase pro každou vrstvu souboru a umístění.
Následující skript je společností Dell poskytován uživatelům tak, jak je (bez záruky), jako prostředek k navýšení hodnoty výstupusfs_dump a výše uvedených příkazů filesys report generate file-location. Uživatel může filtrovat soubory na základě vrstvy (aktivní nebo kterákoli z až dvou nakonfigurovaných cloudových jednotek) a získat přesnější přehled o distribuci souborů podle vrstev přidáním informací o umístění ve vrstvě a čase umístění do každé položky souboru ve výstupním souboru CSV.
Skripty očekávají výstup sfs-dump (nikoli
sfs_dump -c) jako první parametr a výstup filesys report generate file-location jako druhý. Výstup se zapisuje do pevně zakódovaného souboru s názvem „sfs-dump-output-tiers.csv“, který lze změnit v rámci samotného skriptu.
Výstup lze zpracovat pomocí aplikace Excel stejným způsobem, jak je vysvětleno výše.
#!/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
Pro uživatele služby Veritas NetBackup:
Je známo, že služba Veritas NetBackup (NBU) vytváří soubory v systému Data Domain s dvojtečkou v názvech souborů. Například níže jsou uvedeny platné cesty k souborům NBU, pokud je systém Data Domain použit jako backendové úložiště pro 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::To představuje problém s výše uvedenými ukázkovými skripty, protože znak dvojtečky se používá jako oddělovač pro výstup příkazu
sfs_dump a spuštěním výše uvedených skriptů by došlo k nesprávným výsledkům.
V takových případech je nutné upravit skript následujícím způsobem:
--- 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."
Zatímco jsou změny sdílené, aby skript iteroval přes všechny fondy MTree v systému Data Domain a vyžádal si je pro data v jednotlivých fondech MTree sfs_dump , změny jsou stejné i pro druhý skript. Stejně jako v případě samotných skriptů vám však společnost Dell poskytuje výše uvedené změny bez jakékoli záruky a doufá, že budou užitečné.