![zfs-fuse: 압축 활성화는 효과가 없습니다](https://linux55.com/image/39230/zfs-fuse%3A%20%EC%95%95%EC%B6%95%20%ED%99%9C%EC%84%B1%ED%99%94%EB%8A%94%20%ED%9A%A8%EA%B3%BC%EA%B0%80%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.png)
Debian Wheezy zfs-fuse 파일 시스템에 설치하고 하나의 데이터 세트("저장소/백업")에서 압축 gzip-9를 활성화했습니다. 이 데이터 세트에 압축이 활성화되어 있는지 확인하면 "예"라고 표시됩니다.
$: zfs get compression storage/backup
NAME PROPERTY VALUE SOURCE
storage/backup compression gzip-9 local
du -ah
그런데 압축이 있든 없든 압축률을 확인해 보면 sfx get compressratio
알 수 있습니다.
잘 압축되는 파일(예: 텍스트 파일)을 포함한 모든 파일은 압축되지 않은 파일과 정확히 동일한 디스크 크기를 차지합니다.
$: zfs get compressratio storage/backup
NAME PROPERTY VALUE SOURCE
stor/backup compressratio 1.00x -
왜 이런 일이 발생합니까?
zfs get all
데이터 세트에 대한 몇 가지 정보는 다음과 같습니다.
compressratio 1.00x -
mounted yes -
quota none default
reservation none default
recordsize 128K default
mountpoint /storage/backup default
sharenfs off default
checksum on default
compression gzip-9 local
atime on default
devices on default
답변1
zfs-fuse
제한된 IO가 발생하면서 데이터가 30초마다 업데이트되는 것처럼 보이지만 compressratio
, 백그라운드 IO 또는 매우 큰 파일로 인해 데이터 업데이트가 더 빠르게 발생할 수 있으므로 업데이트를 트리거하는 또 다른 요인이 있습니다.
좀 넣어봤어기능 테스트의 핵심 사항. 1.00x로 부팅된 깨끗한(파일 없음) 파일 시스템이 필요합니다.
첫 번째 테스트에서 스크립트가 영원히 일시 중지되면 압축 카운터가 업데이트되지 않으며 설치에 문제가 있는 것입니다.
Debian wheezy 머신에서 스크립트를 실행합니다.
$ uname -a
Linux zfs-fuse 3.2.0-4-686-pae #1 SMP Debian 3.2.54-2 i686 GNU/Linux
결과는 다음과 같습니다.
$ test_compression compress
Testing [compress]
Testing size [4096]
Waited 0 seconds for [compressratio_is_one]
4096 bytes made up of 1*4096 blocks
Waited 20 seconds for [compresstario_is_not_one]
1.12x
Testing size [16384]
Waited 30 seconds for [compressratio_is_one]
16384 bytes made up of 1*16384 blocks
Waited 30 seconds for [compresstario_is_not_one]
1.53x
Testing size [1048576]
Waited 30 seconds for [compressratio_is_one]
1048576 bytes made up of 1*131072 blocks
Waited 30 seconds for [compresstario_is_not_one]
31.44x
Testing size [33161216]
Waited 30 seconds for [compressratio_is_one]
33161216 bytes made up of 255*131072 blocks
Waited 0 seconds for [compresstario_is_not_one]
202.31x
카운터 업데이트를 트리거할 수 있는 집중적인 작업을 백그라운드에서 수행하여 일반적으로 이를 절반 정도 줄일 수 있습니다.
백그라운드에서
$ while true; do touch somefile; rm somefile; done
그런 다음 다시 테스트하십시오.
$ test_compression compress
Testing [compress]
Testing size [4096]
Waited 0 seconds for [compressratio_is_one]
4096 bytes made up of 1*4096 blocks
Waited 5 seconds for [compresstario_is_not_one]
1.11x
Testing size [16384]
Waited 17 seconds for [compressratio_is_one]
16384 bytes made up of 1*16384 blocks
Waited 17 seconds for [compresstario_is_not_one]
1.50x
Testing size [1048576]
Waited 16 seconds for [compressratio_is_one]
1048576 bytes made up of 1*131072 blocks
Waited 10 seconds for [compresstario_is_not_one]
29.73x
Testing size [33161216]
Waited 0 seconds for [compressratio_is_one]
33161216 bytes made up of 244*131072 blocks
Waited 0 seconds for [compresstario_is_not_one]
201.35x
FreeBSD에서는 대략 5초마다 업데이트된다는 점에 주목할 가치가 있습니다.
$ test_compression giggidy/compress
Testing [giggidy/compress]
Testing size [4096]
Waited 0 seconds for [compressratio_is_one]
4096 bytes made up of 1*4096 blocks
Waited 4 seconds for [compresstario_is_not_one]
1.21x
Testing size [16384]
Waited 5 seconds for [compressratio_is_one]
16384 bytes made up of 1*16384 blocks
Waited 5 seconds for [compresstario_is_not_one]
1.91x
Testing size [1048576]
Waited 5 seconds for [compressratio_is_one]
1048576 bytes made up of 1*131072 blocks
Waited 5 seconds for [compresstario_is_not_one]
39.33x
Testing size [33161216]
Waited 5 seconds for [compressratio_is_one]
33161216 bytes made up of 1*131072 blocks
Waited 4 seconds for [compresstario_is_not_one]
114.25x
상자를 얻을 수 있게 되면 Solaris 기반 예제를 추가하겠습니다.