저는 btrfs와 스내퍼를 사용하고 있습니다. 따라서 읽기 전용으로 표시된 주기적인 btrfs 스냅샷이 여러 개 있습니다(물론 btrfs를 통해 r/w로 변경하고 다시 되돌릴 수 있음).
처음 설치하는 동안 vimrc를 설정했다고 가정해 보겠습니다. 그리고 이제 vimrc를 변경하여 스냅샷으로 돌아가면 내 vimrc가 새로운 것이 되도록 하고 싶다고 가정해 보겠습니다. 예, 이는 기록을 완전히 다시 작성하며 기록 백업 아이디어에 어긋납니다. 하지만 테스트 목적으로 활성 스냅샷을 자주 변경하고 이와 같은 일부 구성 파일을 계속 다시 변경하고 싶지 않다고 가정해 보겠습니다. 내 파일 백업을 삭제할 수 있습니다.
이제 사용/지정되는 vimrc 파일 내용의 복사본은 하나만 있어야 합니다. 첫 번째 스냅샷 이후 수정된 적이 없기 때문입니다.
"모든 것"이 업데이트되도록 vimrc 파일을 수정할 수 있는 방법이 있습니까?
편집 중에 쓰기 중 복사를 무시하고 하나의 파일에 대해서만 수행하여 백그라운드의 모든 시스템 파일이 계속 COW를 사용할 수 있습니까? 파일이 새 것이 아니거나 비어 있기 때문에 chattr의 NOCOW를 사용할 수 없다는 것을 알았습니다. 다른 방법이 있나요?
아니면 라이브 파일을 편집하고 모든 스냅샷을 읽기/쓰기로 전환하고 모든 스냅샷 파일에 대해 cp -ax --reflink=always를 수행한 다음 모든 스냅샷을 읽기/쓰기로 전환해야 합니까? 이를 수행할 수 있는 스냅샷이 많이 있습니다. (물론 이 고통을 덜 고통스럽게 만들어주는 스크립트가 있습니다.)
답변1
BTRFS 도구 세트에서는 이 작업을 수행할 수 없습니다.
하지만:
라이브 미디어에서 시스템을 부팅하고 16진수 편집기에서 원시 파티션(예: /dev/sda1)을 엽니다. 검색 기능을 사용하여 디스크의 파일을 검색하고 파일이 모두 한 범위에 있도록 변경 사항을 짧게 만들어 쉽게 작업할 수 있습니다. 파일을 편집한 적이 없으므로 수정할 수 있는 복사본은 하나만 있어야 합니다. 그렇지 않은 경우 fstrim 또는 유사한 도구를 사용하여 디스크의 사용되지 않는 부분을 지워 중복 복사본을 제거하세요.
참고: 파일 길이를 변경하면 안 됩니다. 그렇지 않으면 문제가 발생할 수 있습니다. 길이를 줄이고 null 등으로 채울 수는 있지만 더 길게 만들 수는 없습니다. 그렇지 않으면 파일 시스템이 손상됩니다.
참고: BTRFS 체크섬으로 인해 파일 시스템을 마운트하고 사용하려고 하면 읽기 오류가 감지됩니다. 전체 체크섬 트리를 삭제하고 다시 작성하려면 복구 도구를 사용해야 합니다. 이 작업을 시도하기 전에 복구해야 할 손상된 데이터가 없는지 확인하세요.
참고: 이것은나쁜이 아이디어는 노력과 위험을 감수할 가치가 없는 것이 거의 확실합니다! 스냅샷을 그대로 두고 복원해야 할 경우 이 파일을 업데이트하도록 메모해 두세요. 괜찮을 거예요!