ext4와 함께 투명한 압축 파일 시스템


26

사용하는 응용 프로그램이 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에 나타나는 것처럼 보였습니다. 할당량에 투명하게 압축 할 수있는 솔루션이 있습니까?


확실한. OS / 디스트로 / 버전 및 저장하려는 데이터의 특성에 대한 세부 정보를 나열 할 수 있습니까?
ewwhite

하드웨어 세부 사항도 있습니다.
ewwhite

1
소프트웨어 RAID6에서 @ewwhite 8x3TB. 데이터는 다른 서버의 백업과 동기화되므로 혼합 된 데이터 유형과 다양한 최종 사용자, 문서 등 CentOS 6.5 x64입니다.
user235918

이것이 정말로 필요합니까? 크고 작은 파일이 많이 있습니까? 요즘 디스크 공간이 저렴합니다.
Andrew Schulman

@AndrewSchulman : 압축을 이용하는 것이 나의 계산에서 더 나은 방법입니다. 이를 지원하는 추가 디스크 및 컨트롤러 비용은 CPU 비용보다 비쌉니다.
user235918

답변:


27

내가 사용하는 리눅스에 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

왜 zvol을 파티션해야합니까? 그냥 직접 사용할 수 없습니까?
Michael Hampton

3
@MichaelHampton 주로 정렬과 일관성을 유지합니다. 또한 기본 볼륨을 확장하면 유연성이 필요합니다. 여기에는 여러 계층의 추상화가 있습니다. /dev/sdbvs 를 사용한다는 주장과 비슷합니다 /dev/sdb1.
ewwhite

1
정보 주셔서 감사합니다. 여기에 좋은 조언이 많이 있습니다. 테스트 해 볼게요.
user235918

2
@MichaelHampton BTW, 요즘에는 가상 머신으로 더 이상 파티션하지 않습니다.
ewwhite

1
이 설정 (RAM, CPU)에서 ZFS 계층의 추가 리소스 비용에 대해 말씀해 주시겠습니까?
Sz.

4

또한 ext4 파일 시스템에서 삭제를 활성화해야합니다. 삭제하지 않으면 zfs는 파일을 제거 할 때 공간을 회수하지 않습니다. 이로 인해 ext4 파일 시스템이보고하는 것과 zfs 볼륨이보고하는 것 사이에 공간 불일치가 발생할 수 있습니다.


4
Red Hat은 성능에 영향을 미치기 때문에 버리기 옵션 (ext4 또는 xfs)을 사용하여 온라인으로이 작업을 수행하지 않는 것이 좋습니다. 주기적으로 fstrim명령을 실행하는 것이 더 깨끗합니다 .
ewwhite

성능에 영향을 미치는 마운트 삭제에 대한 의견 : 이것은 오래된 저품질 SSD의 경우에 해당됩니다. 새로운 것은 사실이 아닙니다.
Stoat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.