"cp -R --reflink=always"가 Btrfs 파일 시스템에서 표준 복사를 수행하는 이유는 무엇입니까?

"cp -R --reflink=always"가 Btrfs 파일 시스템에서 표준 복사를 수행하는 이유는 무엇입니까?

Btrfs는 쓰기 중 복사를 지원합니다. 이 함수를 사용하여 디렉토리를 복제하려고 합니다.

cp -R --reflink=always foo_directory foo_directory.mirror

명령이 거의 즉시 완료될 것으로 예상했지만(예: btrfs subvolume snapshot) cp명령이 느린 표준 복사를 수행하는 것 같습니다.

--reflink=always매뉴얼 페이지에 따르면 Copy-On-Write를 적용하고 싶습니다 .

지정 되면 --reflink[=always]데이터 블록이 수정될 때만 복사되는 경량 복사를 수행합니다. 이것이 가능하지 않으면 복제가 실패하거나 --reflink=auto지정된 경우 표준 복사본으로 대체됩니다.

질문:

  • --reflink=always왜 작동하지 않는지 아시나요 ?
  • 어떤 옵션(또는 다른 명령)을 사용해야 합니까?

답변1

cp --reflink=always거의 확실히 잘 작동합니다. 그렇지 않으면 오류가 발생합니다. 설계상 --reflink=always이는 --reflink=auto. 오류는 다음과 같습니다.

# Filesystem that does not support the feature at all
cp: failed to clone `xx' from `yy': Inappropriate ioctl for device

# Filesystem that does support it, but copy across filesystems
cp: failed to clone `xx' from `yy': Invalid cross-device link

작은 파일이 많이 포함된 디렉터리 구조를 복사하고 있습니까? 이 경우 cp모든 디렉토리를 생성하고 모든 파일을 열고 닫아야 하므로 여전히 시간이 걸리며, 이는 btrfs subvolume snapshot아마도 그렇게 하는 데 걸리는 시간을 설명할 것입니다.

관련 정보