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