“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.