btrfs에서 단일 파일에 대한 압축을 설정하는 방법은 무엇입니까?

btrfs에서 단일 파일에 대한 압축을 설정하는 방법은 무엇입니까?

3TB 드라이브 이미지를 생성하기 위해 GNU를 사용하고 있는데 ddrescue대상 드라이브에 비해 너무 크다는 것을 깨달았습니다. (빈 공간이 0x00 대신 0xAA로 채워져 있기 때문에 희소 출력 파일 대신 희소 출력 파일을 사용합니다.) 실제로 압축해야 함).

출력 파일은 파일별 압축을 지원하는 btrfs 파일 시스템에 있지만 어떤 방법을 사용합니까?

  1. https://wiki.archlinux.org/index.php/Btrfs#compression설명하다:

기존 파일에 압축을 적용하려면 is 또는 인 경우 이 명령을 사용하십시오. 예를 들어 zstd를 사용하여 전체 파일 시스템을 다시 압축하려면 다음 명령을 실행합니다.btrfs filesystem defragment -calgalgzliblzozstd

  # btrfs filesystem defragment -r -v -czstd /

이것은 기존 파일을 다시 압축하지만 개별 파일이 아닌 파일 폴더용인 것 같습니까?

  1. 또한 다음과 같이 말합니다.

힌트:마운트 옵션을 사용하지 않고도 파일별로 압축을 활성화할 수도 있습니다 compress. 이렇게 하면 chattr +c해당 파일에 대해 작동합니다. 디렉터리에 적용하면 새 파일이 나타나는 대로 자동으로 압축됩니다.

그러나 이것이 기존 파일을 다시 압축할지 여부는 확실하지 않습니다.

  1. https://btrfs.wiki.kernel.org/index.php/Compression#Can_I_force_compression_on_a_file_without_using_the_compress_mount_option.3F설명하다

btrfs property set <file> compression <zlib|lzo|zstd>will을 사용하여 파일의 압축 속성 설정지정된 알고리즘을 사용하여 파일을 압축합니다.

이는 압축 가능한 데이터가 적기 때문에 일반적으로 압축되지 않는 파일을 강제로 압축하기 위해 수행되는 것 같습니다.

볼륨에 있는 다른 파일의 압축을 변경하지 않고 전체 기존 파일을 (기본 LZO) 압축으로 변환하고 나중에 해당 파일에 기록된 추가 데이터를 계속 압축하려면 어떤 명령을 사용하고 싶습니까?

답변1

# btrfs filesystem defragment -r -v -czstd /

이것은 기존 파일을 다시 압축하지만 개별 파일이 아닌 파일 폴더용인 것 같습니까?

단일 파일에서도 작동합니다.

(디렉터리의 경우 이 플래그가 필요합니다 -r. 그렇지 않으면 디렉터리가 속한 하위 볼륨의 메타데이터 조각 모음을 수행합니다.)

chattr +c

그러나 이것이 기존 파일을 다시 압축할지 여부는 확실하지 않습니다.

그렇지 않습니다.

btrfs property set <file> compression <zlib|lzo|zstd>

이는 압축 가능한 데이터가 적기 때문에 일반적으로 압축되지 않는 파일을 강제로 압축하기 위해 수행되는 것 같습니다.

파일이 압축 가능한지 여부를 감지하고 어쨌든 압축하는 메커니즘을 비활성화합니다.
나는 그것이 적어도 어느 정도 압축 가능한 경우, 더 구체적으로 압축된 데이터가 원본 IIRC보다 크지 않은 경우에만 압축 파일을 저장할 것이라고 믿습니다.

또한 이 감지 메커니즘은 그다지 정교하지 않으며 때로는 압축 가능한 파일의 압축을 비활성화할 수도 있습니다.

볼륨에 있는 다른 파일의 압축을 변경하지 않고 전체 기존 파일을 (기본 LZO) 압축으로 변환하고 나중에 해당 파일에 기록된 추가 데이터를 계속 압축하려면 어떤 명령을 사용하고 싶습니까?

btrfs filesystem defragment -clzo /path/to/file

(참고: 이렇게 하면 파일이 강제로 압축됩니다.)

관련 정보