Linux 압축 및 중복 제거 순서의 zfs

Linux 압축 및 중복 제거 순서의 zfs

Linux의 zfs에 있는 zfs 파일 시스템에 데이터가 기록되는 순서는 무엇입니까?

내가 찾은 유일한 특정 문서는http://docs.oracle.com/cd/E36784_01/html/E36835/gkknx.html말한다;When a file is written, the data is compressed, encrypted, and the checksum is verified. Then, the data is deduplicated, if possible.

그러나 이것이 사실이라면 중복 제거는 다른 압축 알고리즘으로 압축된 블록을 중복 제거하지 않습니다.

나는 mysqlf를 테스트했고 순서는 다음과 같다고 생각합니다 dedup, compress, encrypt.

내 테스트 설정:

zpool create tank /dev/sdb
zfs create tank/lz4
zfs create tank/gzip9
zfs set compression=lz4 tank/lz4
zfs set compression=gzip-9 tank/gzip9
zfs set dedup=on tank

출력zfs list

NAME         USED  AVAIL  REFER  MOUNTPOINT
tank         106K  19,3G    19K  /tank
tank/gzip9    19K  19,3G    19K  /tank/gzip9
tank/lz4      19K  19,3G    19K  /tank/lz4

다음을 사용하여 임의의 파일을 생성합니다.dd if=/dev/urandom of=random.txt count=128K bs=1024

131072+0 Datensätze ein
131072+0 Datensätze aus
134217728 Bytes (134 MB) kopiert, 12,8786 s, 10,4 MB/s

빈 풀의 zpool 목록 출력:

NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank  19,9G   134K  19,9G         -     0%     0%  1.00x  ONLINE  -

그런 다음 파일을 다른 압축 알고리즘을 사용하여 데이터세트에 복사합니다.

 cp random.txt /tank/lz4
 cp random.txt /tank/gzip9

zfs list복사 후 출력 :

NAME         USED  AVAIL  REFER  MOUNTPOINT
tank         257M  19,1G    19K  /tank
tank/gzip9   128M  19,1G   128M  /tank/gzip9
tank/lz4     128M  19,1G   128M  /tank/lz4

zpool list복사 후 출력 :

NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank  19,9G   129M  19,7G         -     0%     0%  2.00x  ONLINE  -

중복제거 비율은 다음과 같습니다.2.0동일한 파일을 다른 데이터세트에 복사한 후 제 생각에는 이는 중복 제거가 수행되었음을 의미합니다.데이터-압축 및 암호화 전에 차단됩니다.

누군가 이것이 올바른지 확인해 줄 수 있습니까?

답변1

그것은 밝혀졌다http://docs.oracle.com/cd/E36784_01/html/E36835/gkknx.html맞습니다.

파일이 작성되면 데이터가 압축되고 암호화되며 체크섬이 확인됩니다. 그런 다음 가능한 경우 데이터가 중복 제거됩니다.

무작위 파일에 대한 나의 가정은 틀렸습니다. ZFS는 특정 최소 압축 비율을 달성할 수 없으면 압축을 중단하는 것 같습니다.

인용하다https://wiki.illumos.org/display/illumos/LZ4+압축

주목해야 할 또 다른 특별한 점은 압축할 수 없는 데이터에 대한 LZ4의 성능이 매우 높다는 것입니다. LZ4가 예상되는 최소 압축 비율(ZFS의 경우 12.5%)을 충족할 수 없는 경우 트리거되는 "조기 중단" 메커니즘을 통합하여 이를 달성합니다.

테스트를 위해 내 파일 시스템에서 find / >> tree.txt.

파일을 두 데이터세트에 복사한 후 zpool get dedupratio다음을 반환했습니다.

NAME  PROPERTY    VALUE  SOURCE
tank  dedupratio  1.00x  -

중복 제거는 실제로 이 쓰기 체인의 마지막 부분입니다. 다른 압축 알고리즘을 선택하면 중복 제거 성능이 저하됩니다!

불행히도 내 ZoL 버전은 암호화를 지원하지 않습니다. 그러나 서로 다른 데이터 세트를 암호화하면 중복 제거가 망가질 수도 있는 것 같습니다. 암호화 정보:https://docs.oracle.com/cd/E53394_01/html/E54801/gkkih.html

관련 정보