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


12

Btrfs는 Copy-On-Write를 지원합니다. 이 기능을 사용하여 디렉토리를 복제하려고했습니다.

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

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

매뉴얼 페이지에 따르면, --reflink=alwaysCopy-On-Write를 시행 할 것으로 예상 됩니다.

--reflink [= always]가 지정되면 경량 복사를 수행하십시오. 여기서 데이터 블록은 수정시에만 복사됩니다. 이것이 불가능하면 복사에 실패하거나 --reflink = auto를 지정하면 표준 복사본으로 폴백합니다.

질문 :

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

답변:


20

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. 그것은 아마도 작업을 수행하는 데 걸리는 시간을 설명합니다.


3
예, 파일 수가 많으며 대부분 작은 텍스트 파일입니다. cp가 여전히 모든 파일을 처리해야한다는 것을 몰랐습니다. 고마워, 그건 내가 이해하지 못한 부분이었다. 유스 케이스에서는 쓰기 가능한 스냅 샷을 만드는 것이 좋습니다.
— Philipp Claßen

1
예, 스냅 샷을 만들 수 있다면 가십시오. cp --reflink=always복제하려는 항목이 하위 볼륨의 루트가 아닌 경우에도 여전히 유용 할 수 있습니다 btrfs subvolume snapshot. 하위 볼륨의 일부가 아닌 하위 볼륨에서만 작동하기 때문 입니다.
— Celada
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.