Data Domain: Data Domain 파일 시스템에 파일을 나열하는 방법, sfs-dump
摘要: 이 문서에서는 Data Domain CLI를 사용하여 개별 MTrees 또는 FS(File System) 전체에 대한 파일 및 디렉토리 목록을 덤프하는 방법을 설명합니다. 이를 통해 사용자는 백업 애플리케이션에서 Data Domain에 저장된 내용을 확인할 수 있습니다.
症狀
수집된 프로토콜에 관계없이 Data Domain FS에는 MTrees로 구성된 디렉토리 내 파일만 포함됩니다. 모든 파일(활성 상태 및 클라우드 유닛의 파일 모두)은 동일한 루트 및 네임스페이스를 공유합니다. 단일 네임스페이스가 존재합니다. 즉, 파일 및 디렉토리 목록에 활성 상태 및 클라우드 유닛의 파일이 구분 없이 포함됩니다.
다음과 같은 이유로 자세한 파일 덤프를 가져오는 것이 유용할 수 있습니다.
- 백업 애플리케이션에서 관리하는 파일 목록과 비교하여 해당 백업 애플리케이션에서 분리된 파일이 있는지 확인합니다.
- 백업 애플리케이션이 백업 보존 기간 제한을 적용하는지 확인하기 위해 특정 기간 임계값을 초과하는 모든 파일을 나열합니다.
- 7.13.0.0, 7.10.1.15, 7.7.5.25 및 6.2.1.110 이전 DDOS의 경우
se sfs_dump
- 7.13.0.0, 7.10.1.15, 7.7.5.25 및 6.2.1.110 이후 DDOS의 경우
filesys sfs-dump
原因
sfs_dump이러한 기능에 액세스하려면 필요한 SE 모드가 더는 지원되지 않으며, 이는 DSA-2023-412: 다중 보안 취약점에 대한 Dell Technologies PowerProtect 보안 업데이트에서 설명합니다.
일시적으로 SE 모드에서 이전
sfs_dump 명령의 일부 기능을 사용할 수 없었지만, 나중에 다시 도입되었습니다. 따라서 이 KB는 차이점을 설명하고 모든 경우에 명령 출력을 처리하는 방법을 설명합니다.解析度
CLI에서 Data Domain의 자세한 파일 목록을 얻고 궁극적으로 Data Domain에 저장된 파일에 대한 인텔리전스를 확보하는 프로세스는 실행 중인 DDOS 릴리스에 따라 달라집니다. 파일 세부 정보가 포함된 텍스트 출력 파일이 수집되면 모든 DDOS 릴리스의 출력 형식이 동일하거나 스크립트를 사용하여 공통 형식으로 변환할 수 있으므로, 출력을 보다 유용한 형식으로 처리하는 것은 항상 동일합니다.
모든 DDOS 릴리스에서 일반적으로 Data Domain에 admin 사용자로 로그인해야 하며, 클라이언트 측의 텍스트 파일에 콘솔 출력 로깅을 지원하는 SSH 클라이언트를 사용하여 로그인해야 합니다(PuTTY는 이 경우에 적합). 사용자는 SSH 클라이언트가 클라이언트 컴퓨터의 텍스트 파일에 출력을 기록하도록 구성해야 합니다(기록된 줄 수 또는 개별 줄 길이에 제한이 없도록 함). SSH 세션 로그 파일(및 DD 파일 목록)은 Data Domain에 기록되지 않지만 일반적으로 SSH 연결이 시작되는 데스크탑 컴퓨터에 기록됩니다.
SSH 세션 출력을 수집할 때 파일에 의미 있는 이름을 지정하고(예: 덤프할 Data Domain 호스트 이름 및 MTree 이름 추가) 로그 파일을 위한 충분한 공간이 있는지 확인합니다. 100만 개의 파일이 있는 시스템의 경우 약 200MB가 충분한 공간입니다.
파일 목록을 수집하기 위해 DD CLI에서 실행하는 정확한 명령은 사용된 DDOS 버전에 따라 다르며 아래에 요약되어 있습니다.
DDOS 7.13.0.0, 7.10.1.15, 7.7.5.25 및 6.2.1.110 이전 릴리스
이러한 릴리스는 여전히se sfs_dump 명령(및 -c 옵션을 통해 추가 처리 없이 파일 세부 정보를 CSV로 직접 출력)을 계속 지원하지만, 보안상의 이유로 SE 모드로 전환하는 것은 권장하지 않습니다. 대신 사용 가능한 최신 LTS DDOS 릴리스로 업그레이드를 권장합니다.
Data Domain에 admin 사용자로 로그인하여 SSH 클라이언트를 구성하여 출력을 디스크에 쓰도록 설정한 후 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 를 사용하지 않으면 이 형식은 이후 릴리스에서 위에 표시된 형식과 동일합니다. CSV 출력에 -c를 사용한 경우 형식은 다음과 같습니다(출력의 첫 번째 줄로 표시된 헤더 포함).
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 이상 릴리스
이 릴리스에서는 이제 SE 모드에서 sfs_dump 에 액세스할 수 있는 기능을 제공하지 않습니다(다음 기능은 사용할 수 없음).
se sfs_dump발견된 보안 문제로 인해 SE 모드가 더 이상 사용되지 않습니다. 사용할 대체 명령은 다음과 같습니다. 명령 이름이 약간 다르며, 이 경우 나열할 MTree는 "MTree" 키워드 뒤에 옵니다.
# filesys sfs-dump mtree <mtree-path>제목에 있는 릴리스의 경우 이 sfs-dump 명령은
se sfsa_dump와 다음과 같은 차이점이 있습니다.
- 새 명령은 파일 정보를 CSV(열) 형식으로 덤프하는
-c옵션을 지원하지 않습니다. - 새 명령은 한 번에 MTree만 실행할 수 있으며 단일 호출로 전체 FS에 대해 실행할 수 없습니다.
# mtree list아래 명령의 출력은 이전
se sfs_dump 명령의 출력과 동일합니다. -c 옵션 없이 사용할 경우입니다.
filesys sfs-dumpData Domain에 admin 사용자로 로그인하고, 출력을 디스크에 쓰도록 구성된 SSH 클라이언트를 사용하여 각 MTree의 파일 세부 정보를 확인하려면 다음 명령을 실행합니다.
# filesys sfs-dump mtree <mtree-path>
둘 이상의 MTree에 대한 파일 세부 정보를 가져오는 경우, 옵션을 선택하여 동일한 출력 파일로 모든 덤프를 수행하거나, SSH 클라이언트 구성에서 다른 파일로 전환한 후 각 MTree에 대해 명령을 실행합니다.
또는 다음과 같이 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 이상 릴리스
고객의 요구에 의해 이전의se sfs_dump 명령이 다시 도입되었으며, 이제 filesys sfs-dump 명령을 사용할 수 있으므로 다음 사항이 가능합니다.
- 이제
-c옵션을 추가할 수 있으므로, 출력은 열로 구분된 필드를 갖는 CSV와 유사한 형식으로 인쇄됩니다. - FS의 모든 파일에 대한 파일 덤프 정보를 한 번에 실행할 수 있습니다.
#### 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바이트를 사용하고, 디스크에 쓰기 전에 파일의 고유 세그먼트가 압축된 경우 8760바이트를 사용하도록 계산됩니다. 따라서:
- 파일 중복 제거("gcomp" 또는 전역 압축이라고 함)는 비율이 9.09(136,794~15,045바이트)입니다.
- 파일 로컬 압축(로컬 압축의 경우 "lcomp"라고 함)은 비율이 1.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" 또는 전역 압축이라고 함)는 비율이 0.99(33,554,431/33,668,007바이트)입니다.
- 파일 로컬 압축(로컬 압축의 경우 "lcomp"라고 함)은 비율이 0.98(33,668,007/34,208,564바이트)입니다.
- 예상 총 파일 크기 감소("압축률"이라고 함)는 비율이 0.98(33,554,431/34,208,564바이트)입니다.
-c 를 사용하지 않은 예제에 표시된 파일과 비교하면, 이 파일은 중복 제거(중복 세그먼트 없음)나 로컬 압축을 달성하지 않았습니다. 이는 파일이 압축되었음을 나타냅니다.
post_lc_size 에 주어진 용량이 해당 파일에서 사용하는 디스크 공간과 동일하다는 의미는 아닙니다. 제한 사항은 다음 명령에 대해 이미 알려진 제한 사항과 동일합니다.
mtree show compression위의 출력 파일의 정보를 활용하는 것은 사용자의 목표에 맞는 방식으로 숫자 데이터를 처리하는 것으로 구성됩니다. 활용 사례의 몇 가지 예는 다음과 같습니다.
- 특정 경로에 해당하는 파일의 gcomp 및 lcomp 확인합니다(경로를 특정 백업 서버, 클라이언트, 정책, 작업 등과 일치시킬 수 있는 경우).
- 지정된 시간보다 오래된 특정 위치에 저장되는 데이터 양(압축 전)을 계산합니다(분리된 파일을 확인하거나, 백업 애플리케이션이 기한이 지난 백업을 만료하지 않는 문제 해결).
- 다른 유형의 통계 역시 사용할 수 있습니다.
sfs_dump -c 옵션이 사라진 것을 보완하기 위해, 출력 데이터를 위의 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
이 부분 이후의 모든 것은 그대로 사용자에게 제공됩니다. 아래에 공유된 지침에 대한 Dell 측의 보장이나 의무는 없습니다. 파일 목록 세부 정보에서 인텔리전스를 얻는 것은 사용자의 작업이며, 이를 달성하는 방법은 전적으로 파일 덤프 출력에서 데이터를 마이닝하는 데 사용되는 툴 세트, 달성해야 할 목표 및 위에 설명된 명령 출력에서 데이터를 처리하는 사용자 자신의 전문 지식에 따라 달라집니다. 어떤 사용자는 텍스트 파일의 Linux 명령줄 처리를 사용하여 일부 집계를 덤프하도록 선택할 수 있으며, 다른 사용자는 "gnuplot"을 사용하여 값 차트 입력을 생성할 수도 있습니다. 반면, 대부분의 사용자는 분석을 위해 CSV 파일에서 스프레드시트를 작성하는 더 간단한 (그러나 제한적인) 접근 방식을 추구하는 것으로 간주됩니다.
Dell은 아래 지침이 정확하고 작동하며 사용자에게 유용하도록 노력했지만, 이러한 지침이 귀하에게 적합하다고 보장할 수 없으며, 지원 범위를 벗어나므로 지원을 제공하지 않습니다.
CSV 형식의 sfs_dump 출력을 스프레드시트로 가져오기(예: Excel)
파일 세부 정보 목록의 CSV 버전을 사용할 수 있게 되면 데이터에서 인텔리전스를 얻는 한 가지 방법은 데이터를 스프레드시트 소프트웨어에 로드하는 것입니다. Microsoft Excel이 예시로 사용되지만 지침은 다른 소프트웨어에서도 유사할 수 있습니다. CSV 텍스트 파일을 Excel에 CSV로 가져오려면 다음 단계를 따릅니다.
- Excel을 열고 새로운 빈 스프레드시트를 만듭니다.
- 상단의 데이터 메뉴로 이동하여 텍스트/CSV에서라는 이름의 아이콘을 클릭하십시오.
- 대화 상자를 사용하여 CSV 형식으로 파일 데이터(CSV 형식이 아닌 변환 스크립트 예제와 같은
sfs-dump-CSV.csv)를 찾아서 선택한 다음 가져오기를 클릭합니다. - 입력 파일 형식이 올바르고 Excel이 처음 200줄에서 형식을 가져올 수 있는 경우(그래야 함), 생성할 스프레드시트의 미리보기가 대화 상자에 표시됩니다. 정보를 검토하여 첫 번째 줄이 헤더로 인식되는지 확인하고, 그 외 모든 부분도 양호하게 보이는지 확인합니다.
- 미리 보기에 모든 것이 잘 표시되면 대화 상자 아래쪽에 있는 불러오기 버튼을 클릭합니다. 새 스프레드시트가 보기 좋은 서식으로 표시되고, 필드 헤더에서 검색 및 필터를 사용할 수 있습니다.
제대로 가져온 Excel 스프레드시트에는 A~I열에 데이터가 있어야 합니다. 데이터가 A열에만 있고 화면 전체에 걸쳐 있는 경우, Excel을 닫고 위의 1~5단계를 다시 시도하십시오.
추가 계산 필드 추가
스프레드시트는 사용자가 요구하는 만큼 많은 계산 필드를 확장할 수 있습니다. 추가된 흥미로운 필드는 파일의 mtime(마지막 수정 시간, 일반적으로 DD에 기록된 시간)에 해당하는, 사람이 읽을 수 있는 날짜와 시간입니다. 또한 데이터가 사용되는 용도에 따라 일부 파일별 압축 값을 계산하고 표시하는 것이 도움이 될 수 있습니다. 새 열은 아래에 설명된 대로 Excel 수식을 사용하여 자동으로 채워집니다.타임스탬프 변환:
UNIX와 유사한 타임스탬프를 사람이 읽을 수 있는 날짜 및 시간으로 변환하려면 다음을 수행합니다.- J2 셀을 마우스 오른쪽 버튼으로 클릭하고 "셀 서식"을 선택합니다.
- 왼쪽의 "표시 형식" 목록에서 "맞춤 구성"을 선택합니다.
- 사람이 읽을 수 있는 날짜 및 시간 형식이 없다면 형식을 만듭니다(이 예에서는 끝에 EST 문자열이 포함되며 텍스트 시간대 정의로 대체하거나 관심이 없는 경우 "EST"를 완전히 제거할 수 있음). yyyy-mm-dd hh:mm:ss "EST"
- 작업을 완료하고 "확인"을 클릭합니다. 이제 J2 셀은 데이터에 대한 맞춤 구성 형식으로 보입니다.
- J2 셀에 다음 수식을 추가합니다. 이 수식에서 "sfs-dump" 데이터를 가져올 때 Data Domain에서 구성된 시간대의 UTC에 해당하는 올바른 시간대 차이로 (-6*3600)을 바꿉니다. 예를 들어, 미국 동부 표준시는 여름 동안 UTC보다 6시간 늦기 때문에 "-6"이 됩니다.
(((B2/1000000000+(-6*3600))/86400)+25569) (((B2/1000000000)/86400)+25569)
- 수식을 J2 셀에 붙여 넣고, 스프레드시트의 같은 라인에 있는 나머지 모든 셀에 붙여 넣습니다.
- 전체 스프레드시트의 공식을 계산하고 날짜 및 시간 값을 구성된 형식으로 표시합니다.
- 열을 기존 열 형식과 같은 형식으로 지정하고 헤더를 날짜로 구성하여 날짜 필터를 적용할 수 있습니다. 이 경우에는 적절한 열 이름(날짜)만 설정하면 됩니다.
압축 정보
- 다음 수식을 복사하고 K2 셀에 텍스트로 선택하여 붙여넣기를 사용하여 파일별 중복 제거 또는 gcomp에 대한 열을 만듭니다.
=IF(H2=0,0,D2/H2)
- 다음 수식을 복사하고 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 내의 파일만 표시하려면 다음을 수행합니다.
- 이름 헤더의 아래쪽 화살표를 클릭하여 텍스트 필터 메뉴를 열고, 시작 문자 옵션을 선택한 후 상자 안에
/data/col1/backup/명령을 입력합니다. 후행 슬래시가 중요합니다. OK를 클릭합니다. - 마지막 작성 날짜 헤더에서 아래쪽 화살표를 클릭하고, 날짜 필터를 선택한 다음 이전을 선택합니다. 대화 상자 오른쪽에 있는 날짜 선택기를 사용하여 30일 전 날짜를 선택합니다. 확인(OK)을 클릭합니다.
其他資訊
파일 위치를 덤프하는 명령(활성 상태 및 클라우드)
어떤 파일이 활성 상태이고 어떤 클라우드 유닛인지 표시하는 파일 목록을 덤프하는 방법은 다음과 같습니다.#### 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만 개 행보다 약간 높지만 파일 수가 그보다 훨씬 적은 경우에도 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.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
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에서 유용하게 사용되기를 바라며 아무런 보장 없이 제공하는 것입니다.