Data Domain: tworzenie listy plików w systemie plików Data Domain, sfs-dump

摘要: W tym artykule wyjaśniono, w jaki sposób używać interfejsu wiersza polecenia Data Domain do zrzutu listy plików i katalogów dla poszczególnych MTree lub dla systemu plików (FS) jako całości. Dzięki temu użytkownicy mogą dowiedzieć się, co jest przechowywane w Data Domain z poziomu aplikacji do tworzenia kopii zapasowych. ...

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

症狀

Data Domain to pasywne urządzenie pamięci masowej zaplecza. Przechowuje tylko to, co każą aplikacje do tworzenia kopii zapasowych, i usuwa dane tylko wtedy, gdy aplikacja do tworzenia kopii zapasowych poprosi o usunięcie plików. System Data Domain nigdy nie tworzy ani nie usuwa żadnych plików samodzielnie.

Bez względu na pozyskany protokół Data Domain FS zawiera tylko pliki (w katalogach) zorganizowane w MTree. Wszystkie pliki (zarówno dla plików w aktywnych, jak i we wszystkich jednostkach chmury) współdzielą ten sam katalog główny i przestrzeń nazw; istnieje jedna przestrzeń nazw, co oznacza, że listy plików i katalogów obejmują pliki w jednostkach aktywnych i chmurowych bez żadnego rozróżnienia.

Uzyskanie szczegółowego zrzutu plików może być przydatne z takich powodów jak:
  • Porównanie z listą plików zarządzanych przez aplikację do tworzenia kopii zapasowych, aby sprawdzić, czy nie ma plików osieroconych przez tę aplikację do tworzenia kopii zapasowych.
  • Tworzenie listy wszystkich plików powyżej określonego progu wieku w celu określenia, czy aplikacja do tworzenia kopii zapasowych egzekwuje zasady przechowywania kopii zapasowych
Ze względu na niedawne zmiany wprowadzone w DDOS polecenia używane do zbierania list plików z systemów Data Domain zmieniały się wraz z upływem czasu. Są one dostępne tylko w wierszu polecenia DD i w zależności od wersji mogą wyglądać następująco:
  • W przypadku systemu DDOS w wersji starszej niż 7.13.0.0, 7.10.1.15, 7.7.5.25 i 6.2.1.110
se sfs_dump
  • W przypadku dowolnego systemu DDOS równego lub nowszego niż 7.13.0.0, 7.10.1.15, 7.7.5.25, 6.2.1.110
filesys sfs-dump

原因

Wersje DDOS 7.13.0.0, 7.10.1.15, 7.7.5.25 oraz 6.2.1.110 i nowsze nie zapewniają już dostępu do poniższych poleceń w trybie SE:
sfs_dump
Tryb SE, który był niezbędny do uzyskania dostępu do tej funkcji, został wycofany, co wyjaśniono w artykule DSA-2023-412: aktualizacja zabezpieczeń Dell Technologies PowerProtect dotycząca wielu luk w zabezpieczeniach

W okresie przejściowym niektóre funkcje w starym poleceniu sfs_dump w trybie SE nie były dostępne, ale zostały ponownie wprowadzone na późniejszym etapie. Dlatego ta baza wiedzy próbuje wyjaśnić różnice i sposoby postępowania z wynikami poleceń w każdym przypadku.

解析度

Uzyskanie szczegółowej listy plików w Data Domain z interfejsu wiersza polecenia i ostatecznie proces uzyskiwania informacji o plikach przechowywanych w Data Domain zależą od uruchomionej wersji DDOS. Po zebraniu tekstowego pliku wyjściowego ze szczegółami pliku przetwarzanie danych wyjściowych do bardziej użytecznej postaci jest zawsze takie samo, ponieważ format wyjściowy dla wszystkich wersji DDOS jest taki sam (lub można go przekonwertować do wspólnego formatu za pomocą skryptu).

Wspólną cechą wszystkich wersji DDOS jest wymóg zalogowania się do Data Domain w roli użytkownika admin i zrobienie tego za pomocą klienta SSH, który obsługuje rejestrowanie danych wyjściowych konsoli do pliku tekstowego po stronie klienta (PuTTY dobrze się do tego nadaje). Użytkownik musi skonfigurować klienta SSH w taki sposób, aby rejestrował dane wyjściowe do pliku tekstowego na komputerze klienckim (upewniając się, że nie ma ograniczeń co do liczby rejestrowanych wierszy ani długości poszczególnych wierszy). Plik dziennika sesji SSH (a tym samym listy plików DD) nie jest zapisywany w Data Domain, ale na (zazwyczaj) komputerze stacjonarnym, z którego inicjowane jest połączenie SSH.

Podczas zbierania danych wyjściowych sesji SSH należy pamiętać, aby nadać plikowi zrozumiałą nazwę (na przykład dodać nazwę hosta Data Domain i nazwę obiektu MTree do zrzucenia) oraz zapewnić wystarczającą ilość miejsca na plik dziennika, który może wynosić około 200 MB w przypadku systemów z milionem plików.

Dokładne polecenie, które należy uruchomić z wiersza polecenia DD w celu zebrania listy plików, zależy od używanej wersji DDOS. Zostały one podsumowane poniżej.
 

Wersje DDOS wcześniejsze niż 7.13.0.0, 7.10.1.15, 7.7.5.25 i 6.2.1.110:

Te wersje nadal obsługują polecenie se sfs_dump (oraz opcję -c do wyprowadzania szczegółów pliku bezpośrednio jako CSV bez dalszego przetwarzania), chociaż odradza się przejście do trybu SE ze względów bezpieczeństwa, a zamiast tego zaleca się uaktualnienie do najnowszej dostępnej wersji LTS DDOS.

Należy się zalogować w Data Domain jako administrator, z klientem SSH skonfigurowanym do zapisywania danych wyjściowych na dysku, zmienić tryb uprawnień na SE, a następnie uruchomić poniższe polecenie dla każdego drzewa MTree, dla którego chcesz uzyskać szczegóły pliku:
#### 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>
Polecenie w tych wersjach może również generować listę wszystkich plików w FS jednocześnie (zamiast jednego drzewa MTree na raz). Aby zrzucić szczegóły informacji o plikach dla wszystkich plików w FS, pomiń ścieżkę MTree:
# se sfs_dump -c
Po zakończeniu pamiętaj, aby zatrzymać rejestrowanie klienta SSH na dysku i odłożyć pliki na bok do dalszego przetwarzania.

Format danych wyjściowych polecenia to pojedynczy wiersz dla każdego pliku. Jeśli nie używasz -c , format jest identyczny jak pokazany powyżej dla późniejszych wersji. W przypadkach, gdy użyto -c (dla danych wyjściowych CSV), format jest następujący (w tym nagłówek pokazany jako pierwszy wiersz w danych wyjściowych):
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 w wersjach 7.13.0.0, 7.10.1.15, 7.7.5.25 i 6.2.1.110 lub nowszych:

Ta wersja nie zapewnia już dostępu do sfs_dump z trybu SE (poniższe nie jest dostępne):
se sfs_dump
Tryb SE został wycofany z powodu znalezionych problemów z zabezpieczeniami. Alternatywne polecenie do użycia znajduje się poniżej. Zwróć uwagę na nieco inną nazwę polecenia i na to, że w tym przypadku drzewo MTree na liście występuje po słowie kluczowym „MTree”:
# filesys sfs-dump mtree <mtree-path>
W przypadku wydań w nagłówku to polecenie sfs-dump w porównaniu do se sfsa_dump:
  • Nowe polecenie nie obsługuje opcji -c do zrzutu informacji o pliku w formacie CSV (kolumna)
  • Nowe polecenie może uruchamiać tylko jeden obiekt MTree na raz, nie ma obsługi uruchamiania całego FS w jednym wywołaniu
W przypadku klientów w tych wersjach, jeśli konieczne jest zrzucenie szczegółów wszystkich plików MTree do pliku, należy wykonać iterację po całej liście drzew MTree w Data Domain FS i uruchomić polecenie raz dla każdego z nich. Użytkownik może wyświetlić listę MTree w systemie, uruchamiając:
# mtree list
Dane wyjściowe poniższego polecenia są identyczne jak w przypadku poprzedniego polecenia se sfs_dump , gdy jest używane bez opcji -c .
filesys sfs-dump
Należy się zalogować do Data Domain w roli administratora, z klientem SSH skonfigurowanym do zapisywania danych wyjściowych na dysku, a następnie uruchomić poniższe polecenie dla każdego MTree, dla którego chcesz uzyskać szczegóły pliku:
# filesys sfs-dump mtree <mtree-path>

Jeśli otrzymujesz szczegółowe informacje o pliku dla więcej niż jednego drzewa MTree, wybierz opcję, aby wykonać wszystkie zrzuty do tego samego pliku wyjściowego, albo przełącz konfigurację klienta SSH na inny plik przed uruchomieniem polecenia dla każdego MTree.

Alternatywnie możesz zebrać dane wyjściowe w sposób nienadzorowany, uruchamiając polecenie przez SSH w następujący sposób:

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

W obu przypadkach informacje wyjściowe mają jeden wiersz dla każdego pliku w następującym formacie:

/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 w wersjach 8.1.0.0, 7.13.1.10, 7.10.1.30 i 7.7.5.40 lub nowszych:

Ze względu na zapotrzebowanie klientów niektóre funkcje w starym poleceniu se sfs_dump zostały ponownie wprowadzone i są teraz dostępne dla polecenia filesys sfs-dump , a mianowicie:
  • Możliwość dodania opcji -c , dzięki czemu dane wyjściowe są drukowane w formacie CSV (pola oddzielone kolumnami)
  • Możliwość uruchomienia informacji o zrzucie plików dla wszystkich plików w FS jednocześnie
Polecenie nadal działa tak samo jak w przypadku bezpośrednio poprzednich wersji, z wymienionymi ulepszeniami podsumowanymi poniżej:
 
#### 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

To polecenie jest nadal „ukryte”, więc nie pojawia się w interaktywnej pomocy interfejsu wiersza polecenia ani w dokumentacji.
 

Jak przetwarzać dane sfs_dump lub filesys sfs-dump w coś użytecznego:

Format poszczególnych plików zgłaszanych w danych wyjściowych podczas korzystania z filesys sfs-dump lub sfs_dump bez opcji -c można podsumować następująco:
/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
W powyższym przykładzie mamy plik o oryginalnym rozmiarze 136 794 bajtów, który po przekazaniu przez potok pozyskiwania Data Domain FS jest obliczany do użycia 15 045 bajtów po deduplikacji i 8760 bajtów, gdy unikatowe segmenty pliku są kompresowane przed zapisem na dysku. Stąd:
  • Deduplikacja plików (którą nazywamy „gcomp” lub kompresją globalną) ma współczynnik x9,09 (z 136 794 na 15 045 bajtów)
  • Kompresja lokalna pliku (którą nazywamy „lcomp” w przypadku kompresji lokalnej) ma współczynnik x1,72 (z 15 045 na 8760 bajtów)
  • Całkowite szacowane zmniejszenie rozmiaru pliku (znane jako „współczynnik kompresji”) wynosi 15,62 (z 136 794 na 8760 bajtów)
Dane wyjściowe sfs_dump -c mogą też być podobne, ale bardziej zwięzłe:
/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)
W tym przykładzie możemy wykonać te same obliczenia co w poprzednim:
  • Deduplikacja plików (którą nazywamy „gcomp” lub kompresją globalną) ma współczynnik x 0,99 (z 33 554 431 na 33 668 007 bajtów)
  • Kompresja lokalna pliku (którą nazywamy „lcomp” w przypadku kompresji lokalnej) ma współczynnik x 0,98 (z 33 668 007 na 34 208 564 bajtów)
  • Całkowite szacowane zmniejszenie rozmiaru pliku (znane jako „współczynnik kompresji”) to współczynnik x 0,98 (z 33 554 431 na 34 208 564 bajtów)
W porównaniu z plikiem wyświetlanym dla przykładu bez -c , w tym przypadku nie osiągnięto deduplikacji (brak nadmiarowych segmentów) ani kompresji lokalnej. Oznacza to, że plik jest skompresowany.
 
Przestroga: dane w plikach wyjściowych dotyczące rozmiaru innego niż „rozmiar pliku przed kompresją w bajtach” należy traktować jako przybliżone i nie można na nich w pełni polegać. Metadane dla plików są tworzone w momencie pozyskiwania plików i chociaż są wtedy poprawne, nie są aktualizowane w żadnym momencie od tego czasu, więc z czasem stają się nieaktualne. Ponadto fakt, że post_lc_size pliku to dana ilość nie oznacza, że miejsce na dysku używane przez ten plik jest identyczne jak ta ilość, ponieważ istnieje wiele narzutów na poziomie FC, które nie są uwzględniane na poziomie pliku. Ograniczenia są takie same jak w przypadku tych już znanych dla polecenia:
mtree show compression
Wykorzystanie informacji zawartych w powyższych plikach wyjściowych polega na przetwarzaniu danych liczbowych w sposób odpowiadający celom użytkownika. Oto kilka przykładów zastosowań:
  • Określanie gcomp i lcomp dla plików odpowiadających określonej ścieżce (jeśli ścieżka może być dopasowana do określonego serwera tworzenia kopii zapasowych, klienta, zasady, zadania itp.)
  • Obliczanie, ile danych (pre-comp) jest przechowywanych w danej lokalizacji, która jest starsza niż określona ilość czasu (w celu określenia sierot lub problemów z aplikacjami do tworzenia kopii zapasowych, które nie wygasają po terminie)
  • Każdy inny rodzaj statystyki, który można wykorzystać
Aby dysponować jednym zestawem instrukcji i zrekompensować utratę opcji sfs_dump -c w nowszych wersjach, zalecamy przekonwertowanie danych wyjściowych do powyższego formatu CSV, a następnie użycie pliku w formacie CSV do dalszego przetwarzania, jednak w zależności od umiejętności możesz bezpośrednio przetworzyć dane wyjściowe inne niż CSV.

Aby przekonwertować plik wyjściowy inny niż CSV sfs_dump na taki, który jest identyczny jak to, co wydrukowałoby sfs_dump -c , możesz użyć następującego wiersza polecenia 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
 
Uwaga: powyższe polecenie ignoruje wszystko w pliku wejściowym (sfs-dump-noCSV.txt), który nie zaczyna się od ukośnika, ponieważ tylko wiersze zaczynające się od „/data” mają zawierać szczegóły pliku do przetworzenia. Pliki wyjściowe mają pierwszy wiersz jako nagłówek i używają znaku tabulatora (\t) jako separatora pól.

Wszystko, co znajduje się poza tym punktem, jest udostępniane użytkownikom w stanie, w jakim się znajduje. Firma Dell nie daje żadnych gwarancji ani nie jest zobowiązana do przestrzegania poniższych instrukcji. Uzyskanie informacji na podstawie szczegółów listy plików jest zadaniem użytkownika, a sposób, w jaki można to osiągnąć, zależy całkowicie od zestawu narzędzi używanych do wydobywania danych z danych wyjściowych zrzutu plików, celu, który do osiągnięcia oraz własnej wiedzy użytkownika w zakresie przetwarzania danych z danych wyjściowych polecenia opisanego powyżej. Jeden użytkownik może zdecydować się na użycie przetwarzania plików tekstowych w wierszu polecenia Linux do zrzucenia niektórych agregacji, inni mogą zdecydować się na tworzenie danych wejściowych do nakreślenia wykresów wartości za pomocą „gnuplot”, ale większość użytkowników szuka prostszego (choć ograniczonego) podejścia, aby utworzyć arkusz kalkulacyjny z pliku CSV do analizy.

Firma Dell dołożyła wszelkich starań, aby poniższe instrukcje były poprawne, działające i przydatne dla użytkowników, ale nie może zagwarantować, że będą one przydatne dla Ciebie. Nie zapewniamy też pomocy technicznej w tym zakresie.


Importowanie danych wyjściowych w formacie CSV sfs_dump do arkusza kalkulacyjnego (przykład dla programu Excel):

Gdy wersja CSV listy szczegółów pliku jest dostępna, jednym ze sposobów uzyskania informacji z danych jest załadowanie danych do oprogramowania arkusza kalkulacyjnego. Jako przykład podano program Microsoft Excel, chociaż w przypadku innych programów instrukcje powinny być podobne. Aby zaimportować plik tekstowy CSV do programu Excel jako CSV, wykonaj następujące kroki:
  1. Otwórz program Excel i utwórz nowy pusty arkusz kalkulacyjny
  2. Przejdź do menu Dane na górze, a następnie kliknij ikonę o nazwie Z pliku tekstowego/CSV
  3. Użyj okna dialogowego, aby zlokalizować dane pliku w formacie CSV (sfs-dump-CSV.csv tak jak w przykładowym skrypcie konwersji z formatu innego niż CSV), zaznacz go i kliknij opcję Importuj
  4. Jeśli format pliku wejściowego jest poprawny, a program Excel potrafi wyciągnąć format z pierwszych 200 wierszy (i powinien), okno dialogowe powinno pokazywać podgląd arkusza kalkulacyjnego, który ma zostać wygenerowany. Przejrzyj informacje, aby upewnić się, że dobrze wyglądają i że pierwszy wiersz jest wykrywany jako nagłówki
  5. Jeśli wszystko wygląda dobrze w podglądzie, kliknij przycisk Załaduj u dołu okna dialogowego, aby zobaczyć nowy arkusz kalkulacyjny z ładnym formatowaniem i nagłówkami pól z włączoną wyszukiwarką i filtrowaniem.
Dane w arkuszu kalkulacyjnym są już przydatne, możesz na przykład zastosować filtr liczbowy do pól liczbowych, takich jak rozmiar (aby wyświetlić tylko pliki powyżej danego rozmiaru) lub filtr tekstowy w polu nazwy, aby wyświetlane były tylko pliki w danych wyjściowych szczegółów pliku Data Domain pasujące do danego wzorca (tylko te zaczynające się od ścieżki dla konkretnego MTree), i wykonać inne obliczenia na podstawie tych danych.

Prawidłowo zaimportowany arkusz kalkulacyjny Excel powinien zawierać dane w kolumnach od A do I. Jeśli dane znajdują się tylko w kolumnie A, ale rozciągają się na cały ekran, zamknij program Excel i ponów kroki od 1 do 5 powyżej.

Dodawanie dodatkowych pól obliczeniowych

Arkusz kalkulacyjny można rozszerzyć o dowolną liczbę pól obliczeniowych. Interesującym polem, które należy dodać, jest czytelna dla człowieka data i godzina odpowiadająca mtime plików (czas ostatniej modyfikacji, zwykle czas, w którym został zapisany w DD). Ponadto obliczenie i pokazanie niektórych wartości kompresji dla poszczególnych plików może być pomocne w zależności od tego, do czego dane są używane. Nowe kolumny są wypełniane automatycznie przy użyciu formuł programu Excel zgodnie z poniższym opisem.

Konwersja znacznika czasu:

Aby przekonwertować znacznik czasu w stylu UNIX na datę i godzinę czytelną dla człowieka:
  1. Kliknij prawym przyciskiem myszy komórkę J2 i wybierz opcję „Formatuj komórki
  2. Z listy „Kategoria” po lewej stronie wybierz opcję „Niestandardowe”.
  3. Jeśli jeszcze tego nie zrobiono, utwórz format czytelnego dla człowieka formatu daty i godziny (przykład zawiera ciąg EST na końcu. Możesz zastąpić go tekstową definicją strefy czasowej lub całkowicie usunąć „EST”, jeśli uznasz za zbędne): rrrr-mm-dd gg:mm:ss „EST”
  4. Po zakończeniu kliknij przycisk OK. Teraz komórka J2 ma niestandardowy format danych.
  5. Dodaj następującą formułę do komórki J2. W formule zastąp (-6*3600) prawidłową różnicą strefy czasowej odpowiadającą UTC dla skonfigurowanej strefy czasowej w Data Domain w momencie pobierania danych „sfs-dump”. Na przykład czas wschodnioamerykański jest opóźniony o 6 godzin w stosunku do czasu UTC w okresie letnim, stąd „-6”.
Jeśli nie interesuje Cię tak precyzyjna korekta czasu, możesz zamiast tego użyć skróconej formuły. Najprostszym sposobem na dodanie formuły i uniknięcie nadpisania formatu daty i godziny jest skopiowanie jednej z dwóch poniższych wersji i wklejenie do komórki J2 po wpisaniu znaku równości = w komórce, aby rozpocząć edycję komórki:
(((B2/1000000000+(-6*3600))/86400)+25569)
(((B2/1000000000)/86400)+25569)
Uwaga: jeśli wkleisz tekst do komórki J2 bez uprzedniego przełączenia komórki w tryb edycji, nadpiszesz format komórki. Alternatywnie możesz poprzedzić formułę znakiem „=”, skopiować cały tekst i kliknąć prawym przyciskiem myszy komórkę J2, aby wkleić specjalnie, a następnie wybrać Jako tekst i kliknąć OK. Efekt powinien być ten sam. Jeśli zostało to zrobione dobrze, program Excel automatycznie wykonuje kilka czynności:
  • Wklej formułę do komórki J2, a także do każdej komórki pozostałych wierszy w arkuszu kalkulacyjnym 
  • Oblicz formułę dla całego arkusza kalkulacyjnego i pokaż wartość daty i godziny w skonfigurowanym formacie
  • Ładnie sformatuj kolumnę tak, jak istniejące, a nagłówek skonfiguruj jako datę z możliwością zastosowania filtrów daty, jedyne, co musisz zrobić, to ustawić odpowiednią nazwę kolumny (Data)

Informacje o kompresji

Możesz dodać kolumny z informacjami o kompresji poszczególnych plików, wykonując powyższe czynności. Tym razem pokazujemy formuły zawierające „=”, więc musisz skopiować cały tekst i wkleić specjalnie jako tekst:
  • Skopiuj następującą formułę i wklej specjalnie jako tekst do komórki K2, aby utworzyć kolumnę dla deduplikacji dla poszczególnych plików, czyli gcomp:
    =IF(H2=0,0,D2/H2)
  • Skopiuj poniższą formułę i wklej specjalnie jako tekst do komórki L2, aby utworzyć kolumnę do kompresji lokalnej dla poszczególnych plików, czyli lcomp:
    =IF(I2=0,0,H2/I2)
  • Skopiuj poniższą formułę i wklej specjalnie jako tekst do komórki M2, aby utworzyć kolumnę dla całkowitego współczynnika kompresji pliku dla poszczególnych plików:
    =K2*L2
Nadaj nowym kolumnom odpowiednią nazwę. Jeśli chcesz, aby format wartości kompresji był inny (na przykład w celu ograniczenia liczby miejsc dziesiętnych), przed wklejeniem formuły wykonaj czynności opisane w przykładzie dla daty i godziny, a następnie ustaw format liczbowy komórki z wyprzedzeniem.

Pamiętaj, aby zapewnić bezpieczeństwo swojej pracy, przechodząc do menu Plik i wybierając opcję Zapisz jako, upewniając się, że typ zapisanego pliku jest ustawiony na skoroszyt programu Excel (*.xlsx), dzięki czemu formatowanie i filtrowanie zostaną zachowane.

Po wykonaniu opisanych czynności arkusz kalkulacyjny będzie zawierał następujące (odpowiednie) kolumny:
  • A zawiera nazwę pliku
  • B zawiera znacznik daty (w epoce UNIX-a w nanosekundach) dla ostatniego zapisu pliku
  • D to oryginalny rozmiar pliku
  • H to rozmiar po kompresji globalnej
  • I to rozmiar po kompresji globalnej i lokalnej
  • J zawiera datownik ostatniego zapisu pliku, w formie czytelnej dla człowieka
  • K zawiera globalną kompresję (deduplikację) pliku
  • L zawiera lokalną kompresję pliku
  • M zawiera całkowitą kompresję pliku
Wszystkie rozmiary plików są podane w bajtach.
Teraz można używać programu Excel do filtrowania i sortowania danych zgodnie z potrzebami.
  • Na przykład, aby wyświetlić tylko pliki w MTree /data/col1/backup, które są starsze niż 30 dni:
  1. Kliknij strzałkę w dół w nagłówku nazwy, zaznacz opcję Filtry tekstu, a następnie Zaczyna się od i wpisz /data/col1/backup/ w polu. Końcowy ukośnik jest ważny. Kliknij przycisk OK
  2. Kliknij strzałkę w dół w nagłówku Ostatnia zapisana data, wybierz opcję Filtry daty, a następnie Przed. Użyj selektora daty po prawej stronie okna dialogowego, aby wybrać datę sprzed 30 dni. Kliknij przycisk OK.
Pasek stanu u dołu pokazuje, ile wierszy pasuje do tego wyboru.

其他資訊

Polecenie lokalizacji zrzutu pliku (aktywna i w chmurze)

Istnieje sposób na zrzut listy plików ze wskazaniem, które są w warstwie aktywnej, a które w dowolnej jednostce chmury, czyli:
#### 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

Dane wyjściowe w obu przypadkach są następującego 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
-------------------------      ----------------------      ----------------------      ---------------------------
Jednak powyższe polecenie wydaje się być nieadekwatne dla większości intencji, ponieważ na przykład rozmiar jest wyrażony w jednostkach czytelnych dla człowieka (a nie w bajtach, MiB lub dowolnym ustawionym mnożniku), a czas umieszczania odpowiada czasowi tworzenia kopii zapasowych w Data Domain dla plików w warstwie aktywnej, ale nie w przypadku plików w chmurze („Placement Time” dla plików w chmurze to data i godzina przeniesienia pliku do jednostki chmury).

Należy również pamiętać, że poniższe polecenie (i skrypt konwertujący z pliku innego niż CSV sfs_dump) wyprowadza dane w kolumnach oddzielonych tabulatorami. Znaki tabulacji obecne w danych wyjściowych muszą być zapisane w pliku rejestrowania, w przeciwnym razie opisane powyżej kroki importowania pliku CSV do programu Excel nie będą mogły poprawnie oddzielić pól.
sfs_dump -c
Podane instrukcje zakładają rozsądną znajomość programu Excel, ale można je przełożyć na inne oprogramowanie do obsługi arkuszy kalkulacyjnych.

Nowoczesne wersje programu Excel zezwalają na wiele wierszy, ale należy pamiętać, że każdy plik w danych wyjściowych sfs_dump do przetworzenia to pojedynczy wiersz, dlatego program Excel musi być w stanie szybko przetworzyć i zaktualizować arkusz kalkulacyjny z tyloma wierszami, ile jest plików w zestawie danych. Twardy limit wynosi nieco ponad 1 milion wierszy, ale nawet przy znacznie mniejszej liczbie plików program Excel może nie być odpowiedni dla zadania (zbyt wolny).

Jeśli dane wyjściowe sfs_dump mają zbyt wiele plików dla Twojej wersji programu Excel lub chcesz przetworzyć dane w mniejszych bitach w celu zwiększenia wydajności, możesz spróbować uruchomić procedurę raz dla każdego MTree, aby mieć wiele arkuszy kalkulacyjnych dla systemu.

Dane wyjściowe nawet pojedynczego MTree sfs_dump mogą być zbyt duże dla programu Excel, w takim przypadku możesz użyć polecenia split systemu Linux (lub dowolnego innego podobnego narzędzia do podzielenia dużego pliku tekstowego w trybie online), aby mieć kilka mniejszych plików CSV do pojedynczego przetworzenia, na przykład:
# 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)

Na przykład aby podzielić wejściowy plik tekstowy na fragmenty po 200 MiB każdy, tak aby elementy miały nazwy zaczynające się od:

"sfs_dump.out.split"

Uruchom:

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


Skrypt do użycia "filesys sfs-dump" w przypadku zrzucania danych pliku w całości przez FS

Dla tych kilku wersji, w przypadku których nie było możliwości zrzutu szczegółów pliku w formacie CSV, skrypt przedstawiony poniżej jest dostarczany użytkownikom przez firmę Dell w niezmienionej postaci (bez gwarancji) w celu osiągnięcia podobnego rezultatu przez przetwarzanie danych wyjściowych sfs_dump innych niż CSV.

Ponieważ wersje nieobsługujące danych wyjściowych CSV to również te, które nie pozwalają na zrzucenie informacji dla wszystkich plików w FS jako całości, skrypt używa SSH do łączenia się z docelową Data Domain w celu iteracji po liście MTree, uruchamiając zrzut plików po jednym MTree na raz, aby zebrać listę plików dla wszystkich MTree, a następnie przekształcić do formatu CSV adekwatnego do dalszego przetwarzania:
#!/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

Skrypt łączący dane wyjściowe operacji innych niż CSV „sfs-dump” i „filesys report generate file-location” w plik CSV z tymi samymi informacjami co w powyższym skrypcie oraz informacjami o warstwie pliku i czasie umieszczania

Poniższy skrypt jest dostarczany użytkownikom w stanie, w jakim się znajduje (bez gwarancji) przez firmę Dell w celu dodania wartości do danych wyjściowych sfs_dump i powyższych poleceń filesys report generate file-location. Użytkownik może filtrować pliki na podstawie warstwy (aktywna lub dowolna z maksymalnie dwóch skonfigurowanych jednostek chmury), aby uzyskać dokładniejszy wgląd w dystrybucję plików na warstwę, dodając informacje o lokalizacji warstwy i czasie umieszczania do każdego wpisu pliku w wyjściowym pliku CSV.

Skrypty oczekują danych wyjściowych sfs-dump (nie sfs_dump -c) jako pierwszego parametru oraz danych wyjściowych filesys report generate file-location jako drugiego. Dane wyjściowe są zapisywane w zakodowanym na stałe pliku o nazwie „sfs-dump-output-tiers.csv”, który może być zmieniony w samym skrypcie.

Dane wyjściowe można przetworzyć za pomocą programu Excel w taki sam sposób, jak wyjaśniono powyżej.
#!/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


Dla użytkowników Veritas NetBackup:

Wiadomo, że Veritas NetBackup (NBU) tworzy pliki w Data Domain ze znakami dwukropka będącymi częścią nazw plików. Na przykład poniżej przedstawiono prawidłowe ścieżki nazw plików NBU, gdy używa się Data Domain jako pamięci masowej zaplecza dla 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::
Stwarza to problem z powyższymi przykładowymi skryptami, ponieważ dwukropek jest używany jako separator danych wyjściowych polecenia sfs_dump , a uruchomienie powyższych skryptów dałoby nieprawidłowe wyniki.

W takich przypadkach należy edytować skrypt w sposób opisany poniżej:
--- 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."
Podczas gdy zmiany są udostępniane w skrypcie w celu iteracji po wszystkich MTree w Data Domain w celu pobrania danych sfs_dump dla poszczególnych MTree, zmiany są takie same dla drugiego skryptu. Ponieważ jednak dotyczy to również samych skryptów, firma Dell udostępnia powyższe zmiany bez żadnej gwarancji, w nadziei, że okażą się przydatne.

受影響的產品

Data Domain

產品

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