Btrfs: 압축 및 nodatacow 우선 순위 지정 + 자동화

Btrfs: 압축 및 nodatacow 우선 순위 지정 + 자동화

압축이 활성화된 btrfs 파티션을 마운트했습니다 /.

mount -o subvol=@,defaults,noatime,nodiratime,compress=zstd,space_cache=v2 /dev/mapper/archlinux /mnt

특정 폴더에서 CoW 메커니즘을 비활성화하고 싶습니다. 예를 들면 다음과 같습니다.

  • 내 VM 디스크가 포함된 폴더
  • SQLite 데이터베이스를 포함할 수 있는 모든 폴더(주로 브라우저용)

이게 뭐야?btrfs 문서상태:

압축이 활성화되면 nodatacow 및 nodatasum이 비활성화됩니다.

하지만 그것은 또한 지적한다.

nodatacow 또는 nodatasum이 활성화되면 압축이 비활성화됩니다.

상호 배타적이라는 점에는 동의하지만 chattr +C폴더로 설정하면 어느 것이 우선적으로 적용되는지 궁금합니다. 내 변경사항은 영구적인가요? 아니면 해당 옵션을 사용하여 파티션을 다시 마운트하면 다음 부팅 시 덮어쓰이게 됩니까 compress? 내 직감으로는 이것이 우선순위가 될 것이라고 말하지만 chattr +C이를 확인하는 문서를 찾을 수 없습니다.

두 번째 질문은 새로 생성된 모든 SQLite 데이터베이스에서 CoW를 자동으로 비활성화하는 방법이 있습니까?입니다. 처음에는 전체 파일 시스템에서 SQLite 데이터베이스를 검색하고 설정하는 시스템 타이머를 작성하고 싶었습니다 chattr +C. 하지만 그러다가chattr 매뉴얼 페이지나는 다음을 읽었습니다.

이미 데이터 블록이 있는 파일에 설정하면 파일에 할당된 블록이 완전히 안정적인지 확실하지 않습니다.

chattr +C따라서 기본적으로 비어 있지 않은 기존 파일에는 사용해서는 안됩니다 . \.(sqlite|db)SQLite 매직 바이트로 끝나거나 SQLite 매직 바이트를 갖는 파일이 CoW를 사용하지 않도록 파일 시스템에 연결하는 방법이 있습니까 ? 아니면 대상 응용 프로그램을 설치하기 전에 NoCoW 폴더를 수동으로 생성할 수밖에 없습니까? X 또는 Y 애플리케이션이 SQLite 백엔드를 사용하고 있는지 반드시 알 수는 없으며 애플리케이션이 SQLite를 사용하고 있다는 것을 알 때마다 NoCoW를 설정하기 위해 모든 애플리케이션 데이터를 삭제하는 것은 매우 불편할 것입니다. 이 프로세스를 자동화하는 방법을 어떻게 제안하시나요?

편집하다:

chattr +CSQLite를 사용하는 패키지를 설치할 때 이를 설정하는 것이 배포 관리자의 책임이라고 생각하십니까 ?

관련 정보