Data Domain: Så här listar du filer i Data Domain-filsystemet, sfs-dump
Summary: I den här artikeln beskrivs hur du använder Data Domain CLI för att dumpa fil- och kataloglistorna för enskilda MTrees eller för filsystemet (FS) som helhet. Det gör det möjligt för användare att ta reda på vad som finns lagrat i Data Domain från säkerhetskopieringsprogrammet. ...
Symptoms
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
- För DDOS tidigare än 7.13.0.0, 7.10.1.15, 7.7.5.25 och 6.2.1.110
se sfs_dump
- För alla DDOS som är lika med eller senare än 7.13.0.0, 7.10.1.15, 7.7.5.25, 6.2.1.110
filesys sfs-dump
Cause
sfs_dumpSE-läget, som var nödvändigt för att komma åt den här funktionen, har tagits bort enligt beskrivningen i DSA-2023-412: Dell Technologies PowerProtect-säkerhetsuppdatering för flera säkerhetsproblem
Under en övergångsperiod har en del av funktionerna i den gamla
sfs_dump Kommandot i SE-läge var inte tillgängligt, men återinfördes i ett senare skede. Därför försöker denna KB förklara skillnaderna och hur man hanterar kommandoutdata i varje enskilt fall.Resolution
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 detsamma, eftersom utdataformatet för alla DDOS-versioner är detsamma (eller kan konverteras till ett vanligt format med hjälp av ett skript).
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). En användare måste konfigurera SSH-klienten så att den loggar utdata till textfilen på klientdatorn (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) stationära dator 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 system med 1 miljon filer.
Det exakta kommandot som ska köras från DD CLI för att samla in listor över filer beror på vilken DDOS-version som används, de sammanfattas nedan.
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örse sfs_dump kommandot (och -c alternativ för att mata ut filinformation direkt som CSV utan ytterligare bearbetning), även om det inte rekommenderas att gå till SE-läge av säkerhetsskäl, och istället uppgradera till den senaste tillgängliga LTS DDOS-versionen.
Se till att du är inloggad i Data Domain som administratörsanvändare, med en SSH-klient konfigurerad för att skriva utdata till disk, ändra till SE-privilegieläge och kör sedan följande kommando för varje MTree som du vill ha 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 -cNä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 Formatet är 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:
Den här versionen ger inte längre åtkomst till sfs_dump från SE-läge (följande är inte tillgängligt):
se sfs_dumpSE-läget är inaktuellt på grund av säkerhetsproblem som hittats. Det alternativa kommandot att använda finns nedan. Observera det något annorlunda kommandonamnet och att i det här fallet går MTree som ska listas efter nyckelordet "MTree":
# filesys sfs-dump mtree <mtree-path>För versioner i rubriken är detta sfs-dump kommando, jämfört med
se sfsa_dump:
- Det nya kommandot stöder inte
-cAlternativ för att dumpa filinformation i CSV-format (kolumn) - Det nya kommandot kan bara köra ett MTree åt gången, det finns inget stöd för att köra mot hela FS i ett enda anrop
# mtree listUtdata från kommandot nedan är identiska med dem för föregående
se sfs_dump kommando när det används utan -c .
filesys sfs-dumpSe till att du är inloggad 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 du vill ha filinformationen för:
# filesys sfs-dump mtree <mtree-path>
Om du får filinformationen för mer än ett MTree väljer du att göra alla dumpar till samma utdatafil eller växla SSH-klientkonfigurationen till en annan fil innan du kör kommandot för vart och ett av MTrees.
Du kan också samla in utdata på ett obevakat sätt genom att köra kommandot via SSH så här:
#### 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:
På grund av kundernas efterfrågan har vissa av funktionerna i den gamlase sfs_dump kommandot har återinförts och är nu tillgängliga för filesys sfs-dump kommandot, nämligen:
- Möjligheten att lägga till
-cså 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
#### 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.
Hur man bearbetar 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 ignoreI exemplet ovan har vi en fil med den ursprungliga storleken 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:
- Fildedupliceringen (det vi kallar "gcomp" eller global komprimering) är en faktor x9,09 (136 794 till 15 045 byte)
- Den fillokala komprimeringen (det vi kallar "lcomp" 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)
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 vi göra samma beräkningar som för det föregående:
- Fildedupliceringen (det vi kallar "gcomp" eller global komprimering) är en faktor x0,99 (33 554 431 till 33 668 007 byte)
- Filens lokala komprimering (det vi kallar "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)
-c Den här uppnår till exempel ingen deduplicering (inga redundanta segment) eller någon lokal komprimering. Detta indikerar att filen är komprimerad.
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 compressionAtt 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:
- Bestämma 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äkna hur mycket data (förkompilering) som lagras på en viss plats som är äldre än en viss tid (för att fastställa överblivna filer eller felsöka problem med säkerhetskopieringsprogram som inte upphör att gälla, säkerhetskopieringar som är försenade i tid)
- Alla andra typer av statistik som man kan ha användning för
sfs_dump -c i nyare versioner är våra rekommendationer att konvertera utdata till CSV-formatet ovan och sedan använda filen i CSV-format för att bearbetas ytterligare, men beroende på dina kunskaper kan du bearbeta icke-CSV-utdata direkt.
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 skrivit ut, kan du använda följande Linux-kommandorad:
# 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
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ändare, men vi kan inte garantera att de fungerar för dig, och vi ger inte support för dem, eftersom de ligger utanför supportintervallet.
Importera CSV-formaterade sfs_dump mata ut till ett kalkylblad (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:
- Öppna Excel och skapa ett nytt tomt kalkylblad
- Gå till menyn Data högst upp och klicka sedan på ikonen som heter Från text/CSV
- Använd dialogrutan för att hitta fildata i CSV-format (
sfs-dump-CSV.csvsom i exemplet på konverteringsskript från icke-CSV-format), markera det och klicka på Importera - 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
- Om allt ser bra ut med förhandsgranskningen klickar du på Ladda knappen längst ned i dialogrutan, så presenteras ditt nya kalkylblad för dig med snygg formatering och fältrubrikerna förvandlas till sök- och filteraktiverade rubriker.
Ett korrekt importerat Excel-kalkylblad bör innehålla data i kolumnerna A till 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ägga 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:- Högerklicka på cell J2 och välj "Format Cells"
- I listan "Category" till vänster väljer du "Custom".
- 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. Du kan ersätta den med din textuella tidszonsdefinition, eller ta bort "EST" helt och hållet om du inte är intresserad): åååå-mm-dd hh:mm:ss "EST"
- Klicka på "OK" när du är klar. Nu har cell J2 ett anpassat format för data.
- 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.
(((B2/1000000000+(-6*3600))/86400)+25569) (((B2/1000000000)/86400)+25569)
- 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
- 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
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
Nu kan du använda Excel för att filtrera eller sortera efter behov för att rapportera om dina data.
- Om du till exempel bara vill visa filer i MTree /data/col1/backup som är äldre än 30 dagar:
- 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 - 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.
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 -cInstruktionerna 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 din
sfs_dump utdata har för många filer för din version av Excel eller vill bearbeta data i mindre bitar för prestanda, kan du prova att köra proceduren en gång för varje MTree, så att du har flera kalkylblad för systemet.
Till och med ett enda MTree
sfs_dump utdata kan vara för stora för Excel, i så fall kan du använda kommandot dela Linux (eller något annat liknande verktyg för att dela 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 som ska användas "filesys sfs-dump" för dumpning av fildata i hela FS
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 utdata.
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.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 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 avsfs_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 du redigera skriptet på ett sätt som liknar 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. Precis som för själva skripten tillhandahålls dock ändringarna ovan av Dell till dig utan några garantier, i hopp om att de är användbara.