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 가 없다는 점만 기억하면 되겠다.