Data Domain: sfs-dump를 사용하여 Data Domain 파일 시스템에서 파일을 나열하는 방법

Summary: 이 문서에서는 Data Domain CLI(Command Line Interface)를 사용하여 개별 MTree 또는 전체 FS(File System)의 파일 및 디렉토리 목록을 덤프하는 방법에 대해 설명합니다.

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

DD(Data Domain)는 패시브 백엔드 스토리지 디바이스입니다. 백업 애플리케이션이 지시하는 내용만 저장하고, 백업 애플리케이션이 파일을 삭제하도록 지시할 때만 데이터를 삭제합니다. Data Domain은 자체적으로 파일을 생성하거나 삭제하지 않습니다.

수집된 프로토콜에 관계없이 Data Domain FS에는 MTrees로 구성된 디렉토리 내 파일만 포함됩니다. 모든 파일(활성 상태 및 클라우드 유닛의 파일 모두)은 동일한 루트 및 네임스페이스를 공유합니다. 단일 네임스페이스가 존재합니다. 즉, 파일 및 디렉토리 목록에 활성 상태 및 클라우드 유닛의 파일이 구분 없이 포함됩니다.

다음과 같은 이유로 자세한 파일 덤프를 가져오는 것이 유용할 수 있습니다.
  • 백업 애플리케이션에서 관리하는 파일 목록과 비교하여 해당 백업 애플리케이션에서 분리된 파일이 있는지 확인합니다.
  • 백업 애플리케이션이 백업 보존 기간 제한을 적용하는지 확인하기 위해 특정 기간 임계값을 초과하는 모든 파일을 나열합니다.

Cause

파일 목록을 생성하기 위한 CLI 툴은 다음과 같습니다. sfs_dump.

Resolution

SSH 세션 로깅을 사용하여 목록 출력을 수집합니다. 파일 목록을 수집하기 위해 DD CLI에서 실행할 정확한 명령은 사용 중인 DDOS(Data Domain Operating System) 버전에 따라 다릅니다.

빠른 링크:

CLI에서 Data Domain의 파일에 대한 자세한 목록을 가져오고 궁극적으로 Data Domain에 저장된 파일에 대한 인텔리전스 를 얻는 프로세스는 실행 중인 DDOS 릴리스에 따라 다릅니다.

파일 세부 정보가 포함된 텍스트 출력 파일이 수집되면 모든 DDOS 릴리스의 출력 형식이 동일하거나 스크립트를 사용하여 공통 형식으로 변환할 수 있기 때문에(또는 스크립트를 사용하여 공통 형식으로 변환할 수 있으므로) 출력을 보다 사용 가능한 형식으로 처리하는 것은 항상 동일합니다.

SSH 세션 로깅:

모든 DDOS 릴리스의 공통적인 특징은 관리자 계정으로 Data Domain에 로그인해야 한다는 것입니다. SSH 클라이언트를 사용하면 콘솔 출력을 클라이언트 측의 텍스트 파일에 기록할 수 있습니다(PuTTY가 적합함). 출력을 클라이언트의 텍스트 파일에 기록하도록 SSH 클라이언트를 구성합니다(기록되는 줄 수 또는 개별 줄 길이에 제한이 없는지 확인). SSH 세션 로그 파일(및 DD 파일 목록)은 Data Domain에 기록되지 않지만 SSH 연결이 시작되는 (일반적인) 데스크탑 클라이언트에 기록됩니다.

SSH 세션 출력을 수집할 때 파일에 의미 있는 이름(예: 덤프할 Data Domain 호스트 이름 및 MTree 이름 추가)을 지정하고 로그 파일에 1백만 개의 파일이 있는 Data Domain의 경우 약 200MB가 될 수 있는 충분한 공간이 있는지 확인합니다.

7.13.0.0, 7.10.1.15, 7.7.5.25 및 6.2.1.110 이전의 DDOS 릴리스:

이러한 릴리스는 여전히 se sfs_dump 명령(및 -c 추가 처리 없이 파일 세부 정보를 바로 CSV로 출력하는 옵션), 보안상의 이유로 SE(Support Engineer) 모드로 전환하는 것은 권장되지 않으며 대신 사용 가능한 최신 DDOS 릴리스로 업그레이드합니다.

출력을 디스크에 쓰도록 구성된 SSH 클라이언트를 사용하여 관리자로 Data Domain에 로그인하고 SE 권한 모드로 변경한 후 파일 세부 정보가 필요한 각 MTree에 대해 다음 명령을 실행합니다.

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

이러한 버전의 명령은 한 번에 하나의 MTree 대신 FS의 모든 파일에 대한 목록을 생성할 수도 있습니다. FS의 모든 파일에 대한 파일 정보 세부 정보를 덤프하려면 MTree 경로를 그대로 둡니다.

# se sfs_dump -c

작업이 완료되면 SSH 클라이언트의 로그를 저장하지 않고, 추가 처리에 필요한 파일을 별도로 보관해야 합니다.

명령 출력 형식은 각 파일에 대해 한 줄입니다. 만약 -c, 형식은 이후 릴리스에 대해 위에 표시된 형식과 동일합니다. 다음과 같은 경우 -c (CSV 출력의 경우) 사용되었으며, 형식은 다음과 같습니다(출력의 첫 번째 줄로 표시된 헤더 포함).

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 릴리스 7.13.0.0, 7.10.1.15, 7.7.5.25 및 6.2.1.110 이상:

나열되는 MTree는 "MTree" 키워드 뒤에 옵니다.

# filesys sfs-dump mtree <mtree-path>

filesys sfs_dum 명령과 비교 se sfs_dump파일로 교체합니다.

  • 새 명령은 파일 정보를 CSV(열) 형식으로 덤프하는 -c 옵션을 지원하지 않습니다.
  • new 명령은 한 번에 하나의 MTree만 실행할 수 있으며, 단일 호출로 전체 FS에 대해 실행하는 기능은 지원되지 않습니다

모든 MTree의 파일 세부 정보를 파일에 덤프해야 하는 경우 Data Domain FS에서 MTree의 전체 목록을 반복하고 각 MTree에 대해 한 번씩 명령을 실행합니다. 사용자는 다음을 실행하여 시스템의 MTrees 목록을 가져올 수 있습니다.

# mtree list

출력을 디스크에 쓰도록 구성된 SSH 클라이언트를 사용하여 Data Domain에 관리자로 로그인한 후 파일 세부 정보가 필요한 각 MTree에 대해 다음 명령을 실행합니다.

# filesys sfs-dump mtree <mtree-path>

둘 이상의 MTree에 대한 파일 세부 정보가 필요한 경우 동일한 출력 파일에 대해 모든 덤프를 수행하는 옵션을 선택하거나 각 MTree에 대한 명령을 실행하기 전에 SSH 클라이언트 구성에서 다른 파일로 전환합니다.

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

두 경우 모두 출력 정보는 각 파일에 대해 한 줄이며, 형식은 다음과 같습니다.

/data/col1/backup/file: mtime: 1580211658000000000 fileid: 175 size: 136794 type: 9 seg_bytes: 138282 seg_count: 18 redun_seg_count: 14 (78%) pre_lc_size: 15045 post_lc_size: 8760 (58%) mode: 02000100644 start_offset: 0 end_offset: 18446744073709551615

DDOS 릴리스 8.1.0.0, 7.13.1.10, 7.10.1.30 및 7.7.5.40 이상:

filesys fs-dump파일로 교체합니다.

  • 이제 -c 옵션을 추가할 수 있으므로, 출력은 열로 구분된 필드를 갖는 CSV와 유사한 형식으로 인쇄됩니다.
  • FS의 모든 파일에 대한 파일 덤프 정보를 한 번에 실행할 수 있습니다.
  • ssh session logging을 사용하여 출력을 수집합니다.

명령은 이전 버전과 동일하게 유지되며, 추가된 기능들은 다음과 같습니다.

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


이 명령은 CLI 대화형 도움말이나 문서에 나타나지 않도록 "숨김"으로 유지됩니다.

sfs_dump 또는 filesys sfs-dump 데이터를 유용한 것으로 처리하는 방법:

다음과 같이 filesys sfs-dump 또는 sfs_dump-c 옵션 없이 사용할 때 출력에서 보고되는 개별 파일의 형식은 다음과 같습니다.

/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

위의 예에서 원본의 크기는 136,794바이트이며 Data Domain FS 수집 파이프라인을 통과한 후 중복 제거 후 15,045바이트를 사용하고 디스크에 기록되기 전에 파일의 고유 세그먼트가 압축될 때 8,760바이트를 사용하도록 계산됩니다. 따라서:

  • 파일 중복 제거(일명 "gcomp" 또는 전역 압축)은 x9.09(136,794 - 15,045바이트)입니다.
  • 파일 로컬 압축(일명 "lcomp" 로컬 압축의 경우)는 x1.72(15,045 - 8760바이트)입니다.
  • 예상 총 파일 크기 감소("압축률"이라고 함)는 비율이 15.62(136,794/8760바이트)입니다.

다른 방법인 sfs_dump -c 출력은 비슷하지만 더 간결합니다.

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

이 예에서는 이전 계산과 동일한 계산을 수행할 수 있습니다.

  • 파일 중복 제거(일명 "gcomp" 또는 전역 압축)은 x0.99(33,554,431 - 33,668,007바이트)입니다.
  • 파일 로컬 압축(일명 "lcomp," 로컬 압축의 경우)는 x0.98(33,668,007 - 34,208,564바이트)입니다.
  • 예상 총 파일 크기 감소("압축률"이라고 함)는 비율이 0.98(33,554,431/34,208,564바이트)입니다.

옵션 -c 를 사용하지 않은 예제에 표시된 파일과 비교하면, 이 파일은 중복 제거(중복 세그먼트 없음)나 로컬 압축을 달성하지 않았습니다. 이는 파일이 압축되었음을 나타냅니다.
 

주의: "바이트 단위 파일의 사전 구성 크기" 이외의 크기와 관련된 출력 파일의 데이터는 근사치로 간주되어야 하며 완전히 신뢰할 수 없습니다. 파일에 대한 메타데이터는 파일 수집 시 생성되며, 그 당시에는 정확하지만 그 이후로 업데이트되지 않으므로 시간이 지남에 따라 오래된 상태가 됩니다. 또한 파일별 레벨에서 고려되지 않는 FS 레벨 오버헤드가 많기 때문에, 파일의 post_lc_size 에 주어진 용량이 해당 파일에서 사용하는 디스크 공간과 동일하다는 의미는 아닙니다. 제한 사항은 다음 명령에 대해 이미 알려진 제한 사항과 동일합니다.
mtree show compression
위의 출력 파일의 정보를 활용하는 것은 사용자의 목표에 맞는 방식으로 숫자 데이터를 처리하는 것으로 구성됩니다. 활용 사례의 몇 가지 예는 다음과 같습니다.
  • 결정 gcomplcomp 특정 경로에 해당하는 파일(특정 백업 서버, 클라이언트, 정책, 작업 등과 경로를 일치시킬 수 있는 경우)
  • 데이터 양(pre-comp)가 지정된 시간보다 오래된 지정된 위치에 저장되었는지 확인합니다(분리된 항목을 확인하거나 기한이 지난 백업을 백업 애플리케이션에서 만료하지 않는 문제를 해결하기 위해).
  • 다른 유형의 통계 역시 사용할 수 있습니다.
단일 지침 세트를 만들고 최신 릴리스에서 sfs_dump -c 옵션 최신 릴리스에서는 위의 CSV 형식으로 변환된 출력 데이터를 가져온 다음 CSV 형식의 파일을 사용하여 추가로 처리하는 것이 좋지만 기술에 따라 CSV가 아닌 출력을 직접 처리할 수 있습니다.

CSV로 변환:

CSV가 아닌 sfs_dump 출력을 sfs_dump -c 인쇄되었을 경우 다음 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

 

참고: 위의 명령은 "/data"로 시작하는 줄에만 처리를 위한 파일 세부 정보가 포함되므로 슬래시로 시작하지 않는 입력 파일(sfs-dump-nocsv.txt)의 모든 항목을 무시합니다. 출력 파일은 헤더로 첫 번째 줄을 가지며 필드 구분 기호로 테이블 문자(\t)를 사용합니다.


이 부분 이후의 모든 것은 그대로 사용자에게 제공됩니다. 아래에 공유된 지침에 대한 Dell 측의 보장이나 의무는 없습니다. 파일 목록 세부 정보에서 인텔리전스를 얻는 것은 사용자의 작업이며, 이를 달성하는 방법은 전적으로 파일 덤프 출력에서 데이터를 마이닝하는 데 사용되는 툴 세트, 달성해야 할 목표 및 위에 설명된 명령 출력에서 데이터를 처리하는 사용자 자신의 전문 지식에 따라 달라집니다. 한 사용자는 텍스트 파일의 Linux 명령줄 처리를 사용하여 일부 집계를 덤프하도록 선택할 수 있고, 다른 사용자는 "gnuplot"을 사용하여 값을 차트로 작성하기 위한 입력을 생성하도록 선택할 수 있으며, 대부분의 사용자는 분석을 위해 CSV 파일에서 스프레드시트를 작성하기 위해 보다 간단한(그러나 제한적인) 접근 방식을 찾는 것으로 여겨집니다.

Dell은 아래 지침이 올바르고 효과적이며 사용자에게 유용하도록 보장하기 위해 노력했지만 지원 범위를 벗어나므로 작동 및 지원을 보장할 수 없습니다.

CSV 형식의 sfs_dump 출력을 스프레드시트로 가져오기(Excel의 예):

파일 세부 정보 목록의 CSV 버전을 사용할 수 있게 되면 데이터에서 인텔리전스를 얻는 한 가지 방법은 데이터를 스프레드시트 소프트웨어에 로드하는 것입니다. Microsoft Excel이 예시로 사용되지만 지침은 다른 소프트웨어에서도 유사할 수 있습니다. CSV 텍스트 파일을 Excel에 CSV로 가져오려면 다음 단계를 따릅니다.

  1. Excel을 열고 새로운 빈 스프레드시트를 만듭니다.
  2. 상단의 데이터 메뉴로 이동하여 텍스트/CSV에서라는 이름의 아이콘을 클릭하십시오.
  3. 대화 상자를 사용하여 CSV 형식으로 파일 데이터(CSV 형식이 아닌 변환 스크립트 예제와 같은sfs-dump-CSV.csv )를 찾아서 선택한 다음 가져오기를 클릭합니다.
  4. 입력 파일 형식이 올바르고 Excel이 처음 200줄에서 형식을 가져올 수 있는 경우(그래야 함), 생성할 스프레드시트의 미리보기가 대화 상자에 표시됩니다. 첫 번째 줄이 헤더로 검색되는 것을 포함하여 정보를 검토하여 제대로 표시되는지 확인합니다
  5. 미리보기로 모든 것이 좋아 보이면 대화 상자 하단의 로드 버튼을 클릭하면 새 스프레드시트에 멋진 서식이 표시되고 필드 헤더가 검색 및 필터 사용 가능 헤더로 바뀝니다.

크기와 같은 숫자 필드에 숫자 필터를 적용하여(지정된 크기보다 큰 파일만 표시하기 위해) 이름 필드에텍스트 필터를 적용하여 Data Domain 파일 세부 정보의 특정 패턴과 일치하는 파일(특정 MTree의 경로로 시작하는 파일만)만 표시되도록 하는 등의 스프레드시트의 데이터는 이미 유용합니다. 해당 데이터에서 다른 파생 계산을 수행합니다.

올바르게 가져온 Excel 스프레드시트에는 A-I 열에 데이터가 포함되어야 합니다. 데이터가 A 열에만 있고 화면에서 확장되는 경우 Excel을 닫고 위의 1-5단계를 다시 시도합니다.

계산된 필드를 추가합니다.

스프레드시트는 사용자가 요구하는 만큼 많은 계산 필드를 확장할 수 있습니다. 추가된 흥미로운 필드는 파일의 mtime(마지막 수정 시간, 일반적으로 DD에 기록된 시간)에 해당하는, 사람이 읽을 수 있는 날짜와 시간입니다. 또한 데이터가 사용되는 용도에 따라 일부 파일별 압축 값을 계산하고 표시하는 것이 도움이 될 수 있습니다. 새 열은 아래에 설명된 대로 Excel 수식을 사용하여 자동으로 채워집니다.

타임스탬프 변환:

UNIX와 유사한 타임스탬프를 사람이 읽을 수 있는 날짜 및 시간으로 변환하려면 다음을 수행합니다.

  1. J2 셀을 마우스 오른쪽 버튼으로 클릭하고 "셀 서식"을 선택합니다.
  2. 왼쪽의 "표시 형식" 목록에서 "맞춤 구성"을 선택합니다.
  3. 사람이 읽을 수 있는 날짜 및 시간 형식이 없다면 형식을 만듭니다(이 예에서는 끝에 EST 문자열이 포함되며 텍스트 시간대 정의로 대체하거나 관심이 없는 경우 "EST"를 완전히 제거할 수 있습니다): yyyy-mm-dd hh:mm:ss "EST"
  4. 작업을 완료하고 "확인"을 클릭합니다. 이제 J2 셀은 데이터에 대한 맞춤 구성 형식으로 보입니다.
  5. J2 셀에 다음 수식을 추가합니다. 이 수식에서 "sfs-dump" 데이터를 가져올 때 Data Domain에서 구성된 시간대의 UTC에 해당하는 올바른 시간대 차이로 (-6*3600)을 바꿉니다. 예를 들어, 미국 동부 표준시는 여름 동안 UTC보다 6시간 늦기 때문에 "-6"이 됩니다.
이러한 정확한 시간 조정에 관심이 없다면 축약된 형태의 공식을 대신 사용할 수 있습니다. 수식을 추가하고 날짜 및 시간 형식을 덮어쓰지 않도록 하는 가장 쉬운 방법은 셀에 "같음" 문자(=)를 입력한 후 아래 두 버전 중 하나를 복사하고 J2 셀에 붙여 넣어 셀 편집을 시작하는 것입니다.
(((B2/1000000000+(-6*3600))/86400)+25569)
(((B2/1000000000)/86400)+25569)
참고: 셀을 먼저 편집 모드로 전환하지 않고 텍스트를 J2에 붙여넣으면(소호출) 셀의 형식을 덮어씁니다. 또는 수식 앞에 "="를 붙이고 전체 텍스트를 복사한 다음 J2 셀을 마우스 오른쪽 버튼으로 클릭하여 선택하여 붙여넣은 다음 텍스트로를 선택하고 확인을 클릭합니다. 같은 효과를 얻게 됩니다. 이 작업이 제대로 수행되면 Excel에서 몇 가지 작업을 자동으로 수행합니다.
  • 수식을 J2 셀에 붙여 넣고, 스프레드시트의 같은 라인에 있는 나머지 모든 셀에 붙여 넣습니다. 
  • 전체 스프레드시트의 공식을 계산하고 날짜 및 시간 값을 구성된 형식으로 표시합니다.
  • 열을 기존 열과 같이 예쁘게 포맷하고 날짜 필터를 적용 할 수있는 날짜로 헤더를 구성하면 열에 대한 적절한 이름 (Date)을 설정해야합니다.

압축 정보:

위에서 설명한 대로 파일별 압축 정보에 열을 추가할 수 있습니다. 이번에는 수식에 "="가 포함되어 표시되므로 전체 텍스트를 복사하고 텍스트로 붙여 넣기 :

  • 다음 수식을 복사하고 K2 셀에 선택하여 텍스트로 붙여넣어 파일별 중복 제거를 위한 열을 만듭니다. gcomp파일로 교체합니다.
    =IF(H2=0,0,D2/H2)
  • 다음 수식을 복사하고 Paste Special as Text를 L2 셀에 붙여넣어 파일별 로컬 압축을 위한 열을 만듭니다. lcomp파일로 교체합니다.
    =IF(I2=0,0,H2/I2)
  • 다음 수식을 복사하고 M2 셀에 텍스트로 선택하여 붙여넣기를 사용하여 파일당 총 파일 압축률에 대한 열을 만듭니다.
    =K2*L2

새 열에 적절한 이름을 지정합니다. 압축 값의 서식을 다른 형식으로 지정하려면(예: 소수점 자릿수 제한) 수식을 붙여 넣기 전에 날짜와 시간 예제와 같이 미리 셀 숫자 서식을 설정합니다.

작업을 안전하게 보관하려면 파일 메뉴에서 다른 이름으로 저장을 선택하여 저장된 파일의 형식을 Excel 통합 문서(*.xlsx)로 설정하여 서식과 필터를 유지합니다.

설명된 작업을 완료하면 스프레드시트에 다음과 같은 (관련) 열이 포함됩니다.

  • A열은 파일 이름입니다.
  • B열은 파일이 마지막으로 기록된 시점에 대한 날짜스탬프(UNIX Epoch의 경우 나노초)입니다.
  • D열은 파일의 원래 크기입니다.
  • H열은 전역 압축 후 크기입니다.
  • I열은 전역 및 로컬 압축 후 크기입니다.
  • J열은 파일이 마지막으로 작성된 시점에 대한 날짜스탬프의 사람이 읽을 수 있는 형식입니다.
  • K열은 파일에 대한 전역 압축(중복 제거)입니다.
  • L열은 파일에 대한 로컬 압축입니다.
  • M열은 파일의 전체 압축입니다.

모든 파일 크기는 바이트 단위입니다.
이제 Excel에서 데이터를 보고하는 데 필요한 대로 필터링하거나 정렬할 수 있습니다.

  • 예를 들어 30일이 지난 MTree /data/col1/backup 내의 파일만 표시하려면 다음을 수행합니다.
  1. 이름 헤더의 아래쪽 화살표를 클릭하여 텍스트 필터 메뉴를 열고, 시작 문자 옵션을 선택한 후 상자 안에 /data/col1/backup/ 명령을 입력합니다. 후행 슬래시가 중요합니다. OK를 클릭합니다.
  2. 마지막 작성 날짜 헤더에서 아래쪽 화살표를 클릭하고, 날짜 필터를 선택한 다음 이전을 선택합니다. 대화 상자 오른쪽에 있는 날짜 선택기를 사용하여 30일 전 날짜를 선택합니다. 확인(OK)을 클릭합니다.
하단의 상태 표시줄에는 이 선택 항목과 일치하는 행 수가 표시됩니다.

Additional Information

파일 위치를 덤프하는 명령(활성 상태 및 클라우드)

어떤 파일이 활성 상태이고 어떤 클라우드 유닛인지 표시하는 파일 목록을 덤프하는 방법은 다음과 같습니다.

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

두 경우 모두 출력은 다음 유형입니다.

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

그러나 위의 명령은 대부분의 인텐트에 적합하지 않은 경향이 있습니다. 예를 들어 크기가 바이트 또는 MiB 또는 설정된 배수가 아닌 사람이 읽을 수 있는 단위로 되어 있고 배치 시간은 활성 상태에 있는 파일에 대해 Data Domain에 백업이 수행된 시간과 일치하지만 클라우드에 있는 파일에는 해당되지 않는 경우입니다(클라우드에 있는 파일의 경우 "배치 시간"은 파일이 클라우드 유닛으로 이동된 날짜 및 시간입니다).

또한 아래 명령(및 비 CSV에서 변환하는 sfs_dump스크립트는 탭으로 구분된 열로 데이터를 출력합니다. 출력에 있는 탭 문자를 로깅 파일에 저장하지 않으면, 위에서 설명한 CSV를 Excel로 가져오는 단계를 수행하여 필드를 올바르게 구분할 수 없습니다.

sfs_dump -c

제공되는 지침은 Excel에 대한 합리적인 지식이 있다고 가정하지만, 다른 스프레드시트 소프트웨어에 적용할 수 있습니다.

최신 버전의 Excel에서는 많은 행을 허용하지만, sfs_dump 출력의 각 파일은 한 줄이므로 Excel은 데이터세트의 파일만큼 많은 행으로 스프레드시트를 신속하게 처리하고 업데이트할 수 있어야 합니다. 하드 제한은 100만 행을 약간 넘지만 파일 수가 100만 개를 훨씬 넘더라도 Excel이 작업에 적합하지 않을 수 있습니다(너무 느림).

만약에 sfs_dump 출력에 Excel 버전에 비해 파일이 너무 많거나 성능을 위해 더 작은 비트로 데이터를 처리하려면 시스템에 대한 여러 스프레드시트가 있도록 각 MTree에 대해 절차를 한 번씩 실행해 보십시오.

단일 MTree도 sfs_dump Excel의 출력이 너무 클 수 있으며, 이 경우 split Linux 명령(또는 큰 텍스트 파일을 온라인 끝 경계를 분할하는 다른 유사한 도구)을 사용하여 한 번에 하나씩 처리할 여러 개의 작은 CSV 파일을 가질 수 있습니다.

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

예를 들어, 입력 텍스트 파일을 각각 200MiB로 분할하여 각 조각의 이름을 다음과 같이 시작하도록 지정할 수 있습니다.

"sfs_dump.out.split"

그렇다면 다음을 실행합니다.

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


파일 데이터의 전체 FS 덤프에 "filesys sfs-dump"를 사용하는 스크립트입니다.

CSV 형식으로 파일 세부 정보를 덤프하는 기능이 부족한 일부 릴리스의 경우, Dell은 사용자에게 아래에 표시된 스크립트를 있는 그대로(보장 없음) 제공하여 CSV가 아닌 sfs_dump 출력을 처리하여 유사한 결과를 달성하도록 했습니다.

CSV 출력을 지원하지 않는 릴리스도 FS의 모든 파일에 대한 정보를 전체적으로 덤프할 수 없으므로, 이 스크립트는 SSH를 사용하여 타겟 Data Domain에 연결하여 MTree 목록을 반복하고 한 번에 하나의 MTree 파일 덤프를 실행한 다음 모든 MTree에 대한 파일 목록을 수집하고 추가 처리에 적합한 CSV 형식으로 변환합니다.

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


CSV가 아닌 "sfs-dump" 및 "filesys report generate file-location"의 출력을 위의 스크립트와 동일한 모든 정보와 파일 계층별 및 배치 시간 정보가 포함된 CSV 파일로 결합하는 스크립트입니다.

다음 스크립트는 Dell이 사용자에게 있는 그대로(보장하지 않음) 제공하며, 위의 sfs_dump 및 filesys report generate file-location 명령 출력에 가치를 더할 수도 있습니다. 사용자는 계층(활성 상태 또는 최대 2개의 구성된 클라우드 유닛 중 하나)을 기준으로 파일을 필터링하여 출력 CSV의 각 파일 항목에 계층 위치 및 배치 시간 정보를 추가하여 계층별 파일 배포에 대한 보다 정확한 통찰력을 얻을 수 있습니다.

스크립트는 첫 번째 매개변수로 sfs-dump( sfs_dump -c아님) 출력을 예상하고, 두 번째 매개변수로 filesys report generate file-location 출력을 예상합니다. 출력은 하드 코딩된 파일 이름 "sfs-dump-output-tiers.csv"에 기록되며 스크립트 자체 내에서 변경할 수 있습니다.

출력은 위에서 설명한 것과 동일한 방식으로 Excel을 사용하여 처리할 수 있습니다.

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


Veritas NetBackup 사용자의 경우

Veritas NBU(NetBackup)는 Data Domain에 저장되는 파일 이름에 콜론 문자를 포함하여 파일을 생성합니다. 예를 들어 Data Domain이 NBU용 백엔드 스토리지로 사용되는 경우 유효한 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::

위의 예제 스크립트에 문제가 발생합니다. 콜론 문자가 sfs_dump 명령 출력 및 위의 스크립트를 실행하면 잘못된 결과가 생성됩니다.

이러한 경우 스크립트를 아래와 같은 방식으로 편집해야 합니다.

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

변경 사항은 Data Domain의 모든 MTree에서 반복하여 MTree별로 sfs_dump 데이터를 가져오는 스크립트에서 공유되며, 변경 사항은 다른 스크립트에 대해 동일합니다. 그러나 스크립트 자체의 경우와 마찬가지로 위의 변경 사항은 유용하기를 바라며 Dell에서 보증없이 제공합니다.

Affected Products

Data Domain

Products

Data Domain
Article Properties
Article Number: 000081345
Article Type: Solution
Last Modified: 22 ذو الحجة 1447
Version:  26
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.