
외장 하드 드라이브에 백업을 수행하려고 합니다. 기본 드라이브와 외부 드라이브 모두 BTRFS 파일 시스템을 사용합니다. 먼저 홈 디렉터리의 읽기 전용 스냅샷을 생성하여 이 작업을 수행합니다.
# btrfs subvolume snapshot -r /home /.snapshots/home/BACKUP
이어서 백업 드라이브로 보내기/받기:
# btrfs send /.snapshots/home/BACKUP | btrfs receive /.backup/home
나는 다음과 같은 결과를 얻습니다.
At subvol /.snapshots/home/BACKUP
At subvol BACKUP
ERROR: failed to clone extents to matt/.local/share/Anki2/Matt/collection.anki2: Invalid argument
1분 정도 후에 오류가 발생합니다. 여러 가지 다른 스냅샷을 사용해 보았으나 각각 동일한 오류가 발생했습니다. 게다가 어떤 스냅샷에서도 해당 파일을 찾을 수 없었습니다. 일종의 디스크 손상 오류일 수도 있다고 생각하여 USB OS 이미지로 부팅하고 실행했습니다.
# btrfs check --repair /dev/mapper/...
마운트 해제된 파일 시스템에서. 오류가 보고되지 않았습니다. 파일 시스템으로 다시 부팅한 후 백업을 다시 시도했지만 동일한 오류가 발생했습니다. 이 문제의 원인이 무엇인지 생각해 보세요.
편집하다
Emmanuel Rosa의 의견에 따라 나는 시도했습니다.
# btrfs scrub start -B /
오류 없이 종료되었습니다. 문제는 스크럽 후에도 여전히 존재합니다.
편집 2
나는 이것이 무엇이 잘못되었는지 알 수 없었습니다. 결국 로컬 파일을 삭제한 다음 다시 작동했습니다.
편집 3
파일을 삭제하면 문제가 일시적으로 중단되지만 동일한 오류를 생성하는 새 파일이 생성되는 경우가 많기 때문에 실제로는 해결되지 않습니다. sqlite 파일은 특히 문제가 있는 것 같습니다.
답변1
이것은 분명히 Linux 커널의 버그였으며 다음으로 수정되었습니다.이 커밋. 포스팅하면서 알게됐는데btrfs 메일링 리스트에 대한 질문. 커널을 업그레이드하면 문제가 해결되었습니다.