전체 복사를 수행하지 않고 btrfs 스냅샷에서 개별 파일을 복원합니다.

전체 복사를 수행하지 않고 btrfs 스냅샷에서 개별 파일을 복원합니다.

배경

다음 명령을 사용하여 btrfs 파일 시스템에서 일련의 시간별 스냅샷을 유지 관리합니다.BTRBK. 하위 볼륨과 스냅샷은 다음과 같이 저장됩니다(이해하기 쉽도록 이름을 줄였습니다).

/@vol               (subvolume)
/btrbk/@vol.00      (snapshots of /@vol, one per hour)
/btrbk/@vol.01      ...
/home/user/vol      (mountpoint for /@vol)

/home/user/vol이제 삭제하면 안되는 파일을 삭제했습니다 . 문제 없습니다. 최신 스냅샷에서 쉽게 복원할 수 있습니다.

# cd /home/user/vol
# cp -a --reflink=always /btrbk/@vol.01/all_ipv4_numbers.txt ./
cp: failed to clone './all_ipv4_numbers.txt' from '/btrbk/@vol.01/all_ipv4_numbers.txt': Invalid cross-device link

파일을 "다시 연결"할 수 없는 것 같습니다. 그러나 나는 파일의 복사본 두 개로 끝나고 싶지 않습니다. 이상적으로는 가장 최근 스냅샷과 앞으로 촬영할 다음 스냅샷 사이에 아무 일도 일어나지 않은 것처럼 보이도록 하고 싶습니다.

(예, 실제 백업도 있지만 스냅샷이 사용 가능한 한 스냅샷에서 복원하는 것이 훨씬 더 편리합니다!)

질문

복원 방법단일 파일모든 좋은 참조와 마법을 유지하면서 btrfs 스냅샷에서 btrfs가 모든 스냅샷에서 동일한 데이터라는 것을 알 수 있도록 하시겠습니까?

답변1

5.18 이전의 Linux 커널(구체적으로는 커밋9f5710bcp --reflink), 소스와 대상이 동일한 마운트 지점에 있는 경우에만 사용할 수 있습니다. 이를 위해 동일한 파일 시스템을 여러 디렉터리에 마운트하는 것은 포함되지 않습니다. Linux 5.18 이상으로 업그레이드하거나 btrfs 파일 시스템의 "루트" 볼륨을 어딘가에 마운트한 다음 cp --reflink해당 디렉터리 아래의 스냅샷 하위 볼륨과 @vol 간의 작업을 수행합니다.

관련 정보