사용하는 응용 프로그램이 ext4 기능에 의존하기 때문에 ext4 파일 시스템을 사용하여 압축 저장소가 필요한 프로젝트를 테스트하려고합니다.
ext4의 투명한 압축을위한 생산 / 안정적인 솔루션이 있습니까?
내가 시도한 것 :
압축이 활성화 된 ZFS 볼륨 을 통한 Ext4 . 이것은 실제로 부정적인 영향을 미쳤습니다. lz4 압축이 활성화 된 ZFS 볼륨을 만들고 / dev / zvol /에서 ext4 파일 시스템을 만들려고했지만 zfs 볼륨이 실제 사용량의 두 배를 보였으며 압축이 아무런 영향을 미치지 않는 것 같습니다.
# du -hs /mnt/test
**1.1T** /mnt/test
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 15.2T 2.70G 290K /pool
pool/test 15.2T 13.1T **2.14T** -
ZFS 작성 명령
zpool create pool raidz2 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde2 /dev/sdf1 /dev/sdg1 /dev/sdh2 /dev/sdi1
zfs set recordsize=128k pool
zfs create -p -V15100GB pool/test
zfs set compression=lz4 pool/test
mkfs.ext4 -m1 -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink /dev/zvol/pool/test
Fusecompress : 작동하는 것처럼 보이지만 100 % 안정적이지 않습니다. 대안을 찾고 있습니다.
LessFS : ext4와 함께 Lessfs를 사용할 수 있습니까? 아직 시도하지 않았지만 사용자 통찰력에 관심이 있습니다.
한 가지 주요 문제 : 진정한 투명성이 아님
fusecompress에서 보았던 문제는 할당량이었습니다. 예를 들어, 파일 시스템에서 압축을 활성화 한 경우 시스템이 최종 사용자 일 필요는없는 압축의 이점을 원합니다. 압축 비율이 1.5 인 사용자에 대해 1GB의 할당량을 활성화하면 1GB의 데이터가 아니라 1.5GB의 데이터와 압축의 이점을 얻는 시스템을 업로드 할 수 있습니다. 이것은 또한 df -h에 나타나는 것처럼 보였습니다. 할당량에 투명하게 압축 할 수있는 솔루션이 있습니까?
답변
내가 사용하는 리눅스에 ZFS를 볼륨 관리자로와 수단은 기존의 파일 시스템에 추가적인 보호 및 기능을 제공합니다. 여기에는 블록 레벨 스냅 샷, 복제, 중복 제거, 압축 및 고급 캐싱 을 XFS 또는 ext4 파일 시스템으로 가져 오는 것이 포함됩니다 .
다른 설명은 https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ 를 참조하십시오 .
가장 일반적인 사용 사례에서 ZFS zvol 기능을 활용하여 기존 zpool에 스파 스 볼륨을 만듭니다. 이 zvol의 속성은 일반적인 ZFS 파일 시스템과 마찬가지로 설정할 수 있습니다. 이 시점에서 압축 유형, 볼륨 크기, 캐싱 방법 등과 같은 속성을 설정할 수 있습니다.
이 zvol을 만들면 선택한 파일 시스템으로 포맷 할 수있는 블록 장치가 Linux에 제공됩니다. 사용 fdisk
또는 parted
파티션 및 생성 mkfs
완성 된 볼륨을.
이것을 마운트하면 본질적으로 zvol에 의해 지원되는 파일 시스템과 모든 속성이 있습니다.
여기 내 워크 플로우가 있습니다 …
네 개의 디스크로 구성된이 zpool 만들기 :
당신은 할 수 있습니다 ashift=12
사용중인 디스크의 유형에 대한 지침을. 이 경우 zpool 이름은 “vol0″입니다.
zpool create -o ashift = 12 -f vol0 미러 scsi-AccOW140403AS1322043 scsi-AccOW140403AS1322042 미러 scsi-AccOW140403AS1322013 scsi-AccOW140403AS1322044
초기은 zpool 설정을 설정 :
내가 설정 autoexpand=on
내가 큰 드라이브에 디스크를 교체하거나에서 풀을 확장하는 경우에은 zpool 수준에서 ZFS 거울의 설치. 필자는 일반적으로 성능이 저하되고 zpool을 확장 할 수 없기 때문에 ZFS raidz1 / 2 / 3를 사용하지 않습니다.
zpool set autoexpand=on vol0
초기 zfs 파일 시스템 속성 설정 :
새 ZFS 설치
에는 lz4
압축 알고리즘 을 사용하십시오 . 항상 그대로 두는 것이 좋습니다.
zfs set compression=lz4 vol0
zfs set atime=off vol0
ZFS zvol 만들기 :
Linux의 ZFS의 경우 큰 블록 크기를 사용해야합니다. -o volblocksize=128k
여기서 절대적으로 필요합니다. 이 -s
옵션은 스파 스 zvol을 생성하고 필요할 때까지 풀 공간을 사용하지 않습니다. 데이터를 잘 알고 있다면 여기에서 초과 커밋 할 수 있습니다. 이 경우 풀에 약 444GB의 사용 가능한 디스크 공간이 있지만 XFS에 800GB의 볼륨을 제공하고 있습니다.
zfs create -o volblocksize=128K -s -V 800G vol0/pprovol
파티션 zvol 장치 :
( 첫 번째 zvol의 경우 / dev / zd0, 후속 zvols의 경우 / dev / zd16, / dev / zd32 등 )
fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)
새로 작성된 파티션 / dev / zd0p1에 파일 시스템 mkfs.xfs 또는 ext4를 작성하고 마운트하십시오 .
mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1
로 UUID를 잡고 blkid
수정하십시오 /etc/fstab
.
UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro xfs noatime,logbufs=8,logbsize=256k 1 2
새 파일 시스템을 마운트하십시오.
mount /ppro/
결과 …
[root@Testa ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sde2 20G 8.9G 9.9G 48% /
tmpfs 32G 0 32G 0% /dev/shm
/dev/sde1 485M 63M 397M 14% /boot
/dev/sde7 2.0G 68M 1.9G 4% /tmp
/dev/sde3 12G 2.6G 8.7G 24% /usr
/dev/sde6 6.0G 907M 4.8G 16% /var
/dev/zd0p1 800G 398G 403G 50% /ppro <-- Compressed ZFS-backed XFS filesystem.
vol0 110G 256K 110G 1% /vol0
ZFS 파일 시스템 목록.
[root@Testa ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vol0 328G 109G 272K /vol0
vol0/pprovol 326G 109G 186G - <-- The actual zvol providing the backing for XFS.
vol1 183G 817G 136K /vol1
vol1/images 183G 817G 183G /images
ZFS zpool 목록
[root@Testa ~]# zpool list -v
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol0 444G 328G 116G 73% 1.00x ONLINE -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322043 - - - -
scsi-AccOW140403AS1322042 - - - -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322013 - - - -
scsi-AccOW140403AS1322044 - - - -
ZFS의 zvol 속성 ( 테이크의 주 referenced
, compressratio
그리고volsize
).
[root@Testa ~]# zfs get all vol0/pprovol
NAME PROPERTY VALUE SOURCE
vol0/pprovol type volume -
vol0/pprovol creation Sun May 11 15:27 2014 -
vol0/pprovol used 326G -
vol0/pprovol available 109G -
vol0/pprovol referenced 186G -
vol0/pprovol compressratio 2.99x -
vol0/pprovol reservation none default
vol0/pprovol volsize 800G local
vol0/pprovol volblocksize 128K -
vol0/pprovol checksum on default
vol0/pprovol compression lz4 inherited from vol0
vol0/pprovol readonly off default
vol0/pprovol copies 1 default
vol0/pprovol refreservation none default
vol0/pprovol primarycache all default
vol0/pprovol secondarycache all default
vol0/pprovol usedbysnapshots 140G -
vol0/pprovol usedbydataset 186G -
vol0/pprovol usedbychildren 0 -
vol0/pprovol usedbyrefreservation 0 -
vol0/pprovol logbias latency default
vol0/pprovol dedup off default
vol0/pprovol mlslabel none default
vol0/pprovol sync standard default
vol0/pprovol refcompressratio 3.32x -
vol0/pprovol written 210M -
vol0/pprovol snapdev hidden default
답변
또한 ext4 파일 시스템에서 삭제를 활성화해야합니다. 삭제하지 않으면 zfs는 파일을 제거 할 때 공간을 회수하지 않습니다. 이로 인해 ext4 파일 시스템이보고하는 것과 zfs 볼륨이보고하는 것 사이에 공간 불일치가 발생할 수 있습니다.