Data Domain: Så här listar du filer på Data Domain-filsystemet med sfs-dump

Summary: I den här artikeln beskrivs hur du använder Data Domains kommandoradsgränssnitt (CLI) för att dumpa fil- och kataloglistorna för enskilda MTrees eller för filsystemet (FS) som helhet.

Acest articol se aplică pentru Acest articol nu se aplică pentru Acest articol nu este legat de un produs specific. Acest articol nu acoperă toate versiunile de produs existente.

Symptoms

Data Domain (DD) är en passiv backend-lagringsenhet. Den lagrar bara det som säkerhetskopieringsprogrammen säger åt den att göra och tar bara bort data när säkerhetskopieringsprogrammet säger åt den att ta bort filer. Data Domain skapar eller tar aldrig bort några filer på egen hand.

Oavsett inmatat protokoll innehåller Data Domain FS endast filer (i kataloger) som är ordnade i MTrees. Alla filer (både för filer i aktiva och i alla molnenheter) delar samma rot och namnområde. Det finns ett enda namnområde, vilket innebär att fil- och kataloglistorna innehåller filerna i de aktiva enheterna och molnenheterna utan någon åtskillnad.

Att hämta en detaljerad fildump kan vara användbart av orsaker som:
  • Att jämföra mot en lista med filer som hanteras av ett säkerhetskopieringsprogram för att kontrollera om det finns överblivna filer från säkerhetsprogrammet.
  • Visa en lista över alla filer över ett visst ålderströskelvärde för att avgöra om säkerhetskopieringsprogrammet tillämpar böterna för kvarhållande av säkerhetskopior

Cause

CLI-verktyget för att skapa fillistor är sfs_dump.

Resolution

Använd SSH-sessionsloggning för att samla in listutdata. Det exakta kommandot som ska köras från DD CLI för att samla in listor med filer beror på vilken version av Data Domain-operativsystemet (DDOS) som används.

Snabblänkar

För att få en detaljerad lista över filer i en Data Domain från CLI, och så småningom processen för att få information om filer som lagras i Data Domain, beror på vilken DDOS-version som körs.

När textutdatafilen med filinformationen har samlats in är bearbetningen av utdata till ett mer användbart format alltid densamma, eftersom utdataformatet för alla DDOS-versioner är detsamma (eller kan konverteras till ett vanligt format med hjälp av ett skript).

SSH-sessionsloggning:

Gemensamt för alla DDOS-versioner är kravet på att logga in på Data Domain som administratörsanvändare, och göra det med en SSH-klient som stöder loggning av konsolens utdata till en textfil på klientsidan (PuTTY fungerar bra för detta). Konfigurera SSH-klienten så att den loggar utdata till textfilen på klienten (se till att det inte finns några begränsningar för antalet rader som loggas eller den enskilda radlängden). SSH-sessionsloggfilen (och därmed DD-fillistor) skrivs inte på Data Domain, utan på den (vanligtvis) skrivbordsklient som SSH-anslutningen initieras från.

När du samlar in SSH-sessionsutdata ska du se till att ge filen ett beskrivande namn (t.ex. lägga till Data Domain-värdnamnet och MTree-namnet som ska dumpas) och se till att det finns tillräckligt med utrymme för loggfilen, som kan vara cirka 200 MB för Data Domains med 1 miljon filer.

DDOS-versioner före 7.13.0.0, 7.10.1.15, 7.7.5.25 och 6.2.1.110:

Dessa versioner har fortfarande stöd för se sfs_dump kommandot (och -c alternativ för att mata ut filinformation direkt som CSV utan ytterligare bearbetning), även om det av säkerhetsskäl inte rekommenderas att gå till läget Support Engineer (SE) och i stället uppgradera till den senaste tillgängliga DDOS-versionen.

Logga in på Data Domain som administratörsanvändare med en SSH-klient konfigurerad att skriva utdata till disk, ändra till SE-privilegieläge och kör sedan följande kommando för varje MTree som kräver filinformationen för:

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

Kommandot i dessa versioner kan också skapa listan för alla filer i FS på en gång (istället för ett MTree åt gången). Om du vill dumpa filinformationen för alla filer i FS lämnar du MTree-sökvägen borta:

# se sfs_dump -c

När det är klart ska du se till att stoppa loggningen av SSH-klienten till disken och lägga filerna åt sidan för vidare bearbetning.

Formatet för kommandoutdata är en enda rad för varje fil. Om du inte använder -cär formatet identiskt med det som visas ovan för senare versioner. I de fall där -c användes (för CSV-utdata) är formatet så här (inklusive en rubrik som visas som den första raden i utdata):

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-versionerna 7.13.0.0, 7.10.1.15, 7.7.5.25 och 6.2.1.110 eller senare:

MTree som ska listas går efter nyckelordet "MTree":

# filesys sfs-dump mtree <mtree-path>

filesys sfs_dum kommando, jämfört med se sfs_dump:

  • Det nya kommandot stöder inte -c Alternativ för att dumpa filinformation i CSV-format (kolumn)
  • Det nya kommandot kan bara köra ett MTree i taget, det finns inget stöd för att köra mot hela FS i ett enda anrop

Om du måste dumpa alla MTrees-filinformation till filen itererar du över hela listan med MTrees i Data Domain FS och kör kommandot en gång för var och en av dem. En användare kan hämta en lista över MTrees i systemet genom att köra:

# mtree list

Logga in på Data Domain som administratörsanvändare, med en SSH-klient konfigurerad för att skriva utdata till disk, och kör sedan följande kommando för varje MTree som kräver filinformationen för:

# filesys sfs-dump mtree <mtree-path>

Om filinformationen för mer än ett MTree behövs väljer du alternativet att göra alla dumpar till samma utdatafil eller växlar SSH-klientkonfigurationen till en annan fil innan du kör kommandot för var och en av MTrees.

Du kan också samla in utdata på ett obevakat sätt genom att köra kommandot med hjälp av 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

I båda fallen har utdatainformationen en rad för varje fil, med följande format:

/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-versionerna 8.1.0.0, 7.13.1.10, 7.10.1.30 och 7.7.5.40 eller senare:

filesys fs-dump:

  • Möjligheten att lägga till -c så att utdata skrivs ut i en CSV-liknande formaterad version (fält åtskilda av kolumner)
  • Möjligheten att köra fildumpinformationen för alla filer i FS samtidigt
  • Använd ssh-sessionsloggning för att samla in utdata.

Kommandot fortsätter att vara detsamma som för de omedelbart föregående versionerna, med de förbättringar som nämns och sammanfattas nedan:

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


Det här kommandot fortsätter att vara "dolt" så att det inte visas i den interaktiva CLI-hjälpen eller i dokumenten.

Så här bearbetar du sfs_dump eller filesys sfs-dump-data till något användbart:

Formatet för de enskilda filer som rapporteras i utdata när du använder filesys sfs-dump eller sfs_dump utan att -c kan sammanfattas på följande sätt:

/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

I exemplet ovan har originalet en storlek på 136 794 byte, som efter att ha skickats genom Data Domain FS-inmatningspipelinen beräknas använda 15 045 byte efter deduplicering och 8 760 byte när de unika segmenten för filen komprimeras innan de skrivs till disken. Därför:

  • Fildeduplicering (även kallat "gcomp" eller global komprimering) är en faktor x9,09 (136 794 till 15 045 byte)
  • Filens lokala komprimering (dvs.comp" för lokal komprimering) är en faktor x1,72 (15 045 till 8 760 byte)
  • Den totala uppskattade minskningen av filstorleken (känt som "komprimeringsförhållande") är en faktor x15,62 (136 794 till 8 760 byte)

Växelvis sfs_dump -c Utdata är liknande, men mer kortfattade:

/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)

I det här exemplet kan samma beräkningar göras som i det föregående:

  • Fildeduplicering (även kallat "gcomp" eller global komprimering) är en faktor x0,99 (33 554 431 till 33 668 007 byte)
  • Filens lokala komprimering (även kallad "lcomp," för lokal komprimering) är en faktor x0,98 (33 668 007 till 34 208 564 byte)
  • Den totala uppskattade minskningen av filstorleken (känd som "komprimeringsförhållande") är en faktor x0,98 (33 554 431 till 34 208 564 byte)

Jämfört med filen som visas för nej -c Den här uppnår till exempel ingen deduplicering (inga redundanta segment) eller någon lokal komprimering. Detta indikerar att filen är komprimerad.
 

Viktigt! Data i utdatafilerna om annan storlek än "precomp size for the file in bytes" ska tas som ungefärliga och kan inte helt tillförlitligas. Metadata för filer skapas vid tidpunkten för filinmatningen, och även om de är korrekta då har de inte uppdaterats sedan dess, så de blir inaktuella med tiden. Att en fils post_lc_size är en viss mängd innebär inte att diskutrymmet som används av filen är identiskt med den mängden, eftersom det finns många omkostnader på FS-nivå som inte beaktas på filnivå. Begränsningarna är desamma som för de som redan är kända för kommandot:
mtree show compression
Att utnyttja informationen i utdatafilerna ovan består av att bearbeta numeriska data på ett sätt som passar användarens mål. Några exempel på användningsfall kan vara:
  • Fastställande av gcomp och lcomp för filer som motsvarar en viss sökväg (om en sökväg kan matchas med en viss säkerhetskopieringsserver, klient, princip, jobb osv.)
  • Beräkning av hur mycket data (pre-comp) lagras på en viss plats som är äldre än en viss tid (för att fastställa överblivna filer eller för felsökning av problem med säkerhetskopieringsprogram som inte upphör att gälla för säkerhetskopieringar som är försenade i tid)
  • Alla andra typer av statistik som man kan ha användning för
Att ha en enda uppsättning instruktioner och att kompensera för förlusten av sfs_dump -c i nyare versioner är våra rekommendationer att få utdata konverterade till CSV-formatet ovan och sedan använda filen i CSV-format för att bearbetas ytterligare, men beroende på dina kunskaper kan icke-CSV-utdata bearbetas direkt.

Konvertera till CSV:

Så här konverterar du en icke-CSV-fil sfs_dump utdata till en som är identisk med den som sfs_dump -c skulle ha skrivits ut, kan följande Linux-kommandorad användas:

# 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

 

Obs! Kommandot ovan ignorerar allt i indatafilen (sfs-dump-noCSV.txt) som inte börjar med ett snedstreck, eftersom endast rader som börjar med "/data" ska innehålla filinformation för bearbetning. Utdatafiler har en första rad som rubrik och använder tabulatortecknet (\t) som fältavgränsare.


Allt utöver den här punkten tillhandahålls användarna i befintligt skick. Det finns ingen garanti eller skyldighet från Dells sida att följa nedanstående instruktioner. Att få information från fillistningsinformation är en användares uppgift, och hur man uppnår det beror helt på vilken verktygsuppsättning som används för att utvinna data i fildumputdata, målet som ska uppnås och användarens egen expertis när det gäller att bearbeta data från kommandoutdata som beskrivs ovan. En användare kan välja att använda Linux kommandoradsbehandling av textfiler för att dumpa vissa aggregeringar, andra kan välja att producera indata för diagramvärden med hjälp av "gnuplot", medan majoriteten av användarna tros söka ett enklare (men begränsat) tillvägagångssätt för att bygga ett kalkylblad från CSV-filen för analys.

Dell har ansträngt sig för att se till att instruktionerna nedan är korrekta, fungerar och användbara för användarna, men kan inte garantera att de fungerar, och inte heller ges support, eftersom de ligger utanför supportintervallet.

Importera CSV-formaterade sfs_dump utdata till ett kalkylblad (till exempel för Excel):

När CSV-versionen av filinformationslistan är tillgänglig är ett sätt att få information från data att ladda upp data i ett kalkylprogram. Microsoft Excel används som exempel, även om instruktionerna bör vara liknande för annan programvara. Följ följande steg för att få CSV-textfilen importerad till Excel som CSV:

  1. Öppna Excel och skapa ett nytt tomt kalkylblad
  2. Gå till menyn Data högst upp och klicka sedan på ikonen som heter Från text/CSV
  3. Använd dialogrutan för att hitta fildata i CSV-format (sfs-dump-CSV.csv som i exemplet på konverteringsskript från icke-CSV-format), markera det och klicka på Importera
  4. Om indatafilformatet är korrekt och Excel kan rita formatet från de första 200 raderna (vilket det borde), bör en dialogruta visa förhandsgranskningen av kalkylbladet som ska genereras. Granska informationen för att säkerställa att den ser bra ut, inklusive att den första raden identifieras som rubriker
  5. Om allt ser bra ut med förhandsgranskningen klickar du på knappen Ladda längst ned i dialogrutan, så presenteras det nya kalkylbladet med snygg formatering och fältrubrikerna förvandlas till sök- och filteraktiverade rubriker.

Data i kalkylbladet är redan användbara, saker som att tillämpa ett talfilter på numeriska fält som storlek (för att bara visa filer över en viss storlek), eller tillämpa ett textfilternamnfältet så att endast filer i Data Domain-filens informationsutdata som matchar ett givet mönster (endast de som börjar med sökvägen för ett visst MTree) visas, och göra andra härledda beräkningar från dessa data.

Ett korrekt importerat Excel-kalkylblad bör innehålla data i kolumnerna A–I. Om data bara finns i kolumn A, men sträcker sig över skärmen, stänger du Excel och försöker igen med steg 1 till 5 ovan.

Lägg till extra beräknade fält:

Kalkylbladet kan utökas med så många beräknade fält som en användare behöver. Ett intressant fält att lägga till är det läsbara datum och den tid som motsvarar filernas mtime (senaste ändringstid, vanligtvis den tid då den skrevs till DD). Det kan också vara bra att beräkna och visa vissa komprimeringsvärden per fil beroende på vad data används till. De nya kolumnerna fylls i automatiskt med hjälp av Excel-formler enligt beskrivningen nedan.

Konvertering av tidsstämpel:

Så här konverterar du UNIX-liknande tidsstämpel till datum och tid som kan läsas av människor:

  1. Högerklicka på cell J2 och välj "Format Cells"
  2. I listan "Category" till vänster väljer du "Custom".
  3. Om det inte redan finns där skapar du formatet för det läsbara datum/tid-formatet (exemplet innehåller EST-strängen i slutet. Den kan ersättas med din texttidszonsdefinition, eller ta bort "EST" helt om du inte är intresserad): åååå-mm-dd hh:mm:ss "EST"
  4. Klicka på "OK" när du är klar. Nu har cell J2 ett anpassat format för data.
  5. Lägg till följande formel i cell J2. I formeln ersätter du (-6*3600) med rätt tidszonsskillnad som motsvarar UTC för den konfigurerade tidszonen i Data Domain vid tidpunkten för hämtningen av "sfs-dump"-data. Till exempel är östamerikansk tid 6 timmar efter UTC under sommaren, därav "-6" här.
Om du inte är intresserad av en sådan exakt tidsjustering kan du istället använda en förkortad form av formeln. Det enklaste sättet att lägga till formeln och undvika att datum- och tidsformatet skrivs över är att kopiera någon av de två versionerna nedan och klistra in i cell J2 när tecknet "lika med" (=) har skrivits i cellen för att börja redigera cellen:
(((B2/1000000000+(-6*3600))/86400)+25569)
(((B2/1000000000)/86400)+25569)
Obs! Om text klistras in i J2 utan att först sätta cellen i redigeringsläge (så att kalla), skrivs cellens format över. Du kan också skriva ett "=" före formeln, kopiera hela texten och högerklicka på cell J2 för att klistra in special, sedan välja Som text och klicka på OK. Det borde få samma effekt. Om detta gjordes på ett bra sätt gör Excel automatiskt några saker:
  • Klistra in formeln i cell J2 och även i varje cell på resten av raderna i kalkylbladet 
  • Beräkna formeln för hela kalkylbladet och visa datum- och tidsvärdet i det konfigurerade formatet
  • Formatera kolumnen som de befintliga, och ha rubriken konfigurerad som ett datum med möjlighet att använda datumfilter, det enda du behöver göra är att ange ett egennamn för kolumnen (datum)

Information om komprimering:

Kolumner kan läggas till för komprimeringsinformation per fil genom att göra enligt beskrivningen ovan. Den här gången visas formlerna med "=", så hela texten måste kopieras, och klistra in special som text:

  • Kopiera följande formel och klistra in special som text i cell K2 för att skapa en kolumn för deduplicering per fil, eller gcomp:
    =IF(H2=0,0,D2/H2)
  • Kopiera följande formel och klistra in special som text i cell L2 för att skapa en kolumn för lokal komprimering per fil, eller lcomp:
    =IF(I2=0,0,H2/I2)
  • Kopiera följande formel och klistra in special som text i cell M2 för att skapa en kolumn för filkomprimeringsförhållandet per fil:
    =K2*L2

Ge de nya kolumnerna ett riktigt namn. Om du vill att formatet för komprimeringsvärdena ska vara ett annat (t.ex. för att begränsa antalet decimaler) gör du som i exemplet för datum och tid och anger cellens numeriska format i förväg innan du klistrar in formeln.

Kom ihåg att skydda ditt arbete genom att gå till Arkiv-menyn och göra. Spara som Se till att typen för den sparade filen är inställd på Excel-arbetsbok (*.xlsx), så att formatering och filtrering behålls.

När de beskrivna åtgärderna har slutförts innehåller kalkylarket följande (relevanta) kolumner:

  • A innehåller ett filnamn
  • B innehåller datumstämpeln (i UNIX-epoken i nanosekunder) för när filen senast skrevs
  • D är filens ursprungliga storlek
  • H är storleken efter global komprimering
  • I är storleken efter global och lokal komprimering
  • J innehåller datumstämpeln för när filen senast skrevs, i läsbar form
  • K innehåller den globala komprimeringen (deduplicering) för filen
  • L innehåller den lokala komprimeringen för filen
  • M innehåller filens totala komprimering

Alla filstorlekar anges i byte.
Excel kan nu vara att filtrera eller sortera efter behov för att rapportera data.

  • Om du till exempel bara vill visa filer i MTree /data/col1/backup som är äldre än 30 dagar:
  1. Klicka på nedåtpilen i rubriken Namn, välj Textfilter, sedan Börjar med och skriv /data/col1/backup/ in i lådan. Det avslutande snedstrecket är viktigt. Klicka på OK
  2. Klicka på nedåtpilen i rubriken Senast skrivna datum, välj Datumfilter och sedan Före. Använd datumväljaren till höger i dialogrutan för att välja ett datum för 30 dagar sedan. Klicka på OK.
Statusfältet längst ned visar hur många rader som matchar det här valet.

Additional Information

Kommando för att dumpa filplats (aktiv och molnbaserad)

Det finns ett sätt att dumpa listan över filer med en indikation på vilka som finns i Active och vilka i alla molnenheter, vilket är:

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

Utdata i båda fallen är av följande typ:

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

Kommandot ovan tenderar dock att vara otillräckligt för de flesta ändamål, eftersom till exempel storleken är i enheter som kan läsas av människor (i stället för i byte eller MiB eller någon inställd multiplikator) och placeringstiden matchar den tidpunkt då säkerhetskopieringen gjordes till Data Domain för filer i Active, men det gör den inte för filer i Cloud ("Placeringstid" för filer i molnet är det datum och den tid då filen flyttades till molnenheten).

Tänk också på att kommandot nedan (och skriptet som konverterar från icke-CSV sfs_dump) matar ut data i kolumner som avgränsas med tabbar. Fliktecknen som finns i utdata måste sparas i loggningsfilen, annars kan stegen som beskrivs ovan för att importera CSV-filen till Excel inte separera fälten korrekt.

sfs_dump -c

Instruktionerna som ges förutsätter en rimlig kunskap om Excel, men kan översättas till andra kalkylprogram.

Moderna versioner av Excel tillåter många rader, men tänk på att varje fil på sfs_dump Utdata som ska bearbetas är en enda rad, så Excel måste snabbt kunna bearbeta och uppdatera ett kalkylblad med lika många rader som filer i datauppsättningen. Den hårda gränsen är något över 1 miljon rader, men även vid filantal långt under det kanske Excel inte är lämpligt för jobbet (för långsamt).

Om den sfs_dump utdata har för många filer för versionen av Excel eller för att bearbeta data i mindre bitar för prestanda, försök att köra proceduren en gång för varje MTree, så det finns flera kalkylblad för systemet.

Till och med ett enda MTree sfs_dump utdata kan vara för stora för Excel, i vilket fall använda kommandot dela Linux kan användas (eller något annat liknande verktyg för att dela upp en stor textfil online-slutgränser) för att ha flera mindre CSV-filer att bearbeta en i taget, till exempel:

# 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)

Om du till exempel vill dela upp en indatatextfil i segment på 200 MiB vardera, så att delarna får namnet starting:

"sfs_dump.out.split"

Kör sedan:

# split -b 200M sfs_dump.out sfs_dump.out.split


Skript för att använda "filesys sfs-dump" för hela FS-dumpning av fildata.

För de få versioner som saknade möjligheten att dumpa filinformation i CSV-format tillhandahålls skriptet nedan i befintligt skick (utan garanti) av Dell till användare för att uppnå liknande resultat genom bearbetning av icke-CSV-filer sfs_dump Produktionen.

Eftersom de versioner som inte stöder CSV-utdata också är de som inte tillåter att dumpa informationen för alla filer i FS som helhet, använder skriptet SSH för att ansluta till måldatadomänen för att iterera över listan över MTrees, köra fildumpen ett MTree i taget, för att samla in fillistan för alla MTrees, omvandla sedan till ett CSV-format som är lämpligt för vidare bearbetning:

#!/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


Skript för att kombinera utdata från icke-CSV "sfs-dump" och "filesys report generate file-location" till en CSV-fil med samma information som skriptet ovan och per filnivå och placeringstidsinformation.

Följande skript tillhandahålls i befintligt skick (utan garanti) av Dell till användare som ett sätt att förhoppningsvis tillföra värde till resultatet av sfs_dump och filesys report genererar filplaceringskommandon ovan. En användare kan filtrera bort filer baserat på nivå (aktiv eller någon av de två konfigurerade molnenheterna) för att få en mer exakt inblick i fildistributionen per nivå genom att lägga till information om nivåplats och placeringstid till varje filpost i CSV-utdatafilen.

Skript förväntar sig sfs-dump (inte sfs_dump -c) som den första parametern, och filessys-rapporten genererar filplatsutdata som den andra. Utdata skrivs till ett hårdkodat filnamn "sfs-dump-output-tiers.csv", som kan ändras i själva skriptet.

Utdata kan bearbetas med Excel på samma sätt som förklarats ovan.

#!/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


För Veritas NetBackup-användare:

Veritas NetBackup (NBU) är känt för att skapa filer i en Data Domain med kolontecken som en del av filnamnen. Följande är till exempel giltiga sökvägar för NBU-filnamn när Data Domain används som serverdelslagring för 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::

Detta utgör ett problem med exempelskripten ovan, eftersom kolontecknet används som avgränsare för sfs_dump kommandoutdata och körning av skripten ovan skulle ge felaktiga resultat.

I sådana fall måste skriptet redigeras på ett sätt som nedan:

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

Även om ändringarna delas för att skriptet ska iterera över alla MTrees i en Data Domain för att hämta per MTree sfs_dump data, är ändringarna desamma för det andra skriptet. Men precis som för själva skripten tillhandahålls ändringarna ovan av Dell utan några garantier, i hopp om att de är användbara.

Produse afectate

Data Domain

Produse

Data Domain
Proprietăți articol
Article Number: 000081345
Article Type: Solution
Ultima modificare: 08 iun. 2026
Version:  26
Găsiți răspunsuri la întrebările dvs. de la alți utilizatori Dell
Servicii de asistență
Verificați dacă dispozitivul dvs. este acoperit de serviciile de asistență.