zfs linux 파일 수준 디스크 사용량 혼란

zfs linux 파일 수준 디스크 사용량 혼란

저는 Linux에서 ZFS를 사용하고 있는데 파일의 실제 디스크 사용량("du"로 보고됨)이 왜 여기저기에 나타나는지 혼란스럽습니다.

자동 크기 조정 "on"을 제외한 모든 기본값을 사용하여 하드웨어 Dell PERC RAID(/dev/sdb 전용)에 "vault"라는 풀을 만들었습니다.

그런 다음 다음을 사용하여 볼륨을 만들었습니다.

-o 예약=2040G -o 할당량=2040G -o 크기 조정=4k -o acltype=posixacl

그런 다음 ext4 볼륨을 동기화했습니다. 예를 들어, 이 볼륨에는 각각 크기가 13104바이트와 11264바이트인 두 개의 데이터 파일(Matlab *.mat 파일)이 있습니다. ext4 파일 시스템에서 이 파일의 du는 각각 4K 블록 크기에 해당하는 16K와 12K를 의미합니다. 4K 미만의 파일은 항상 du의 4K를 표시합니다.

이에 비해 ZFS du에서는 두 파일에 각각 25K와 21K가 표시되는 반면 1바이트 파일에서는 4.5K가 표시됩니다. 나는 다양한 메타데이터 사용으로 인해 후자의 추가 0.5K가 그다지 중요하지 않다고 생각합니다. 다른 <4K 파일을 실행했는데 반환된 결과는 정확히 4K였습니다. 가장 혼란스러운 점은 *.mat 파일의 du가 "실제" 데이터 크기의 거의 두 배인 이유입니다.

답변1

이러한 정보를 확인 하는 데 사용할 수 있습니다 zdb. 인덱스 노드와 데이터세트만 가져오면 됩니다. 예를 들어, 데이터 세트 이름이 이면 를 사용하여 inode 번호를 확인한 다음 정보를 덤프 tank/foo할 수 있습니다 .ls -izdb -ddddd tank/foo $INODE

내 컴퓨터의 예는 다음과 같습니다.

# cd /var/tmp
# mkfile 13104 file1
# ls -i file1
  4125 file1
# zdb -ddddd rpool/VARSHARE/tmp 4125
Dataset rpool/VARSHARE/tmp [ZPL], ID 4128, cr_txg 928175, 8.24G, 1223 objects, rootbp DVA[0]=<0:1f62907a00:200:STD:1> DVA[1]=<0:f4a2eda00:200:STD:1> [L0 DMU objset] fletcher4 lzjb LE unique unencrypted size=800L/200P birth=14962025L/14962025P fill=1223 contiguous 2-copy cksum=1b152e5f60:7b661ed2ecb:1445f97091785:278e0e37baf85b

    Object  lvl   iblk   dblk  dsize  lsize   %full  type
      4125    1    16K  13.0K  13.0K  13.0K  100.00  ZFS plain file
                                        168   bonus  System attributes
        dnode flags: USED_BYTES USERUSED_ACCOUNTED 
        dnode maxblkid: 0
        path    /file1
        uid     0
        gid     0
        atime   Fri Sep  7 18:48:00 2018
        mtime   Fri Sep  7 18:48:00 2018
        ctime   Fri Sep  7 18:48:00 2018
        crtime  Fri Sep  7 18:48:00 2018
        gen     14962023
        mode    0100600
        size    13104
        parent  4
        links   1
        pflags  0x40800000204
Indirect blocks:
                 0 L0 0:0x1f55eb0200:0x3400 0x3400L/0x3400P F=1 B=14962023/14962023 ---

                segment [000000000000000000, 0x0000000000003400) size 13.0K
#

이를 통해 데이터 크기와 파일이 소비하는 메타데이터("간접 블록"으로 표시됨)의 양에 대한 아이디어를 얻을 수 있습니다.

이 경우 정확히 13k 블록을 할당하고 단일 16k 간접 블록을 사용합니다. 따라서 29k를 사용하여 13k 파일을 저장합니다. 아마 숫자도 비슷할 것 같아요.

16k "iblk"는 압축되었을 가능성이 높으므로 물리적으로 4k만 차지합니다.

관련 정보