Btrfs Compression(압축) 사용 안하게 설정.

Btrfs 에서 CoW 를 사용 안하게끔 하는 법(NoCoW)은 이미 정리했었다.
여기선 Compression 을 사용하게끔 설정된 상황(fstab 에서 compress 설정)하에, 특정 디렉토리에만 압축을 사용하지 않는 방법을 설명한다.

정리

sudo btrfs property set <DIR> compression none

원하는 디렉토리(또는 파일)를 이렇게 설정하면, 새롭게 생성(복사)되는 파일은 압축이 해제된 상태가 된다.

굳이 왜 이런게 필요할까?

여러 상황이 있겠지만, Resilio Sync 를 쓰는 경우에 문제가 될 수 있을 듯 하다. (확실하진 않다.)

예를 들어, 다음과 같은 상황을 가정해볼 수 있다.

  • A(압축 사용 안함) 기기에 파일이 생성되었다.
  • B(압축 사용) 기기는 A 에 생성된 파일을 동기화(복사)하고, 그 파일은 압축된다.
  • B 기기로 복사된 파일은 압축되었기에, 결국 A 에 있는 파일과 달라졌다. 따라서 B 에서 압축된 파일이 A 와 다시 동기화된다.

이 때, B 기기에서 저 파일을 읽으면(열면) 자동으로 압축이 풀리지만, A 기기에선 어떻게 될지 알 수가 없다. 아마도 제대로 열리지 않을 듯 하다. (시험해보지 않아 확신은 없다.)

이런 상황이 발생할 가능성이 있으므로, 압축을 사용하지 않게해주는 설정이 필요하다.

실험

헌데, btrfs property 로 설정한 상황을, 확인할 방법이 없다.
get 을 쓰면 될 듯 하지만, 아무 결과도 나오질 않는다.

sudo btrfs property get <DIR> compression

그렇다면, 압축 상황을 어떻게 확인해볼 수 있을까?
그를 위해 compsize(꾸러미 btrfs-compsize)를 사용해보기로 한다.

다음과 같이 디렉토리 3개를 만들고, 크기가 800MB 정도인 파일을 각각에 복사해보기로 한다.

전제 조건은 다음과 같다.

  • Btrfs Compression 사용함으로 마운트(fstab).
  • no-adjustment – 추가 설정 없음.
  • test-btrfs-prop – btrfs property 로 compression none 설정
  • test-chattr – chattr -c 로 설정
mkdir no-adjustment test-btrfs-prop test-chattr
sudo btrfs property set test-btrfs-prop compression none
sudo chattr -c test-chattr

cp ~/Downloads/ubuntu-19.10-server-amd64.iso no-adjustment
cp ~/Downloads/ubuntu-19.10-server-amd64.iso test-btrfs-prop
cp ~/Downloads/ubuntu-19.10-server-amd64.iso test-chattr

파일 복사 결과를 compsize 로 확인해보면 다음과 같다.

sudo compsize no-adjustment
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL       98%      777M         785M         785M
none       100%      773M         773M         773M
lzo         30%      3.5M          11M          11M

sudo compsize test-btrfs-prop
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL      100%      785M         785M         785M
none       100%      785M         785M         785M

sudo compsize test-chattr
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL       98%      777M         785M         785M
none       100%      773M         773M         773M
lzo         30%      3.5M          11M          11M

no-adjustment 와 test-chattr 은 자동 압축이 이뤄졌고, test-btrfs-prop 만이 그대로 복사가 됐다.

자세한 용어설명은 man page 참고.
그러나, 어쨌든 test-btrfs-prop 에만 lzo 가 없다는 점만 기억하면 되겠다.

안녕하세요. 글 남겨주셔서 고맙습니다.