나는 라이브 시스템에서 백업 드라이브로 읽기 전용 스냅샷을 자주 사용 btrfs send
하고 복사합니다. btrfs receive
백업 드라이브에 이미 여러 개의 스냅샷이 있습니다. 오늘 궁금했던 점: 여러 이전 스냅샷에서 오늘의 여러 스냅샷을 증분 업데이트로 복사할 수 있나요?즉시?
최근에 나는 그랬다
btrfs send -p home_old home_today | btrfs receive /mnt/backup/
btrfs send -p share_old share_today | btrfs receive /mnt/backup/
이거 1개의 명령어로 통일할 수 있나요?
그래서 내가 조사했어man btrfs-send
그리고 읽어보세요:
증분 모드(옵션 -p 및 -c)에서는 전송자와 수신자 모두가 사용할 수 있는 이전에 전송된 스냅샷을 사용하여 전송된 스냅샷을 다른 파일 시스템에서 재구성하기 위해 전송해야 하는 정보의 양을 줄일 수 있습니다.
이것이 내가 원하는거야.
-p <부모>
상위 볼륨에서 하위 볼륨으로 델타 스트림 보내기
-c <클론 소스>
이 스냅샷을 델타 전송의 복제 소스로 사용(여러 개 허용)
그 중 하나만이 기존의 여러 스냅샷을 -p
지원하는 것 같은데 -c
, 둘 사이의 차이점을 이해하지 못합니다. 차이점은 무엇입니까?
답변1
여기그것은 말한다-피btrfs-send는 먼저 상위 및 하위 볼륨의 스냅샷을 생성한 다음 btrfs-send의 데이터 흐름에 따라 그에 따라 스냅샷을 수정합니다. 그리고-씨btrfs-receive 옵션은 빈 하위 볼륨을 생성하고 수정하여 변경되지 않은 파일에 대한 참조 링크를 생성합니다. 차이점은 btrfs-send가 전송해야 하는 메타데이터의 크기입니다. 의 경우-씨옵션모두다음과 같은 경우 메타데이터가 전송됩니다.-피옵션 -일부메타데이터.
하위 볼륨(250G, 310k 파일)의 스냅샷을 사용하여 이를 테스트했으며 결과는 다음과 같습니다.
# time btrfs send -p server-20181031-1746 server-20181225-1144 -f /mnt/parent.diff
At subvol server-20181225-1144
real 3m12,618s
Parent.diff의 크기는 6418364996바이트입니다.
# time btrfs send -c server-20181031-1746 server-20181225-1144 -f /mnt/clone.diff
At subvol server-20181225-1144
real 3m17,435s
Parent.diff의 크기는 6418364996바이트입니다.
그래서 제가 아는 한 거의 차이가 없습니다.
btrfs-send가 하나의 명령으로 여러 하위 볼륨에 대한 스트림을 생성할 수 있다고 생각하지 않습니다.
답변2
방금 하나만 썼어요긴 대답또한 옵션, 관련 섹션 복사 및 붙여넣기에 대해 설명합니다 -p
.-c
부모는 하나만 가질 수 있습니다
이것매뉴얼 페이지그리고 (늙은)위키 FAQ불행하게도 꽤 혼란스럽습니다. 저자는btrfs-clone
역설btrfs 보내기 및 받기는 기껏해야 고려할 수 있습니다.하나델타 전송의 상위입니다. 상위 항목은 -p
하나 이상의 옵션을 통해 -c
직접 또는 간접적으로 지정할 수 있습니다.
btrfs-send
btrfs-tools 4.13에서 하위 볼륨 S의 상위 볼륨과 지정된 복제 소스 세트 C_i를 선택합니다.이와 같이:
- 옵션을 지정 하면
-p
사용됩니다.- S에 세트가 없거나
parent_uuid
uuid를 찾을 수 없으면 포기하세요.C_i
있는 경우C_i->uuid == S->parent_uuid
(S는 하위 볼륨의 하위 볼륨(스냅샷)이므로 "엄마"라고 부르겠습니다)을 사용합니다.- C_i가 S와 동일하지 않으면
parent_uuid
포기하세요.- "어머니"의 모든 자녀 C_i 중에서 "어머니"에 가장 가까운 세대를 선택합니다(실제로 ,
ctransid
와 "세대"의 차이점은 무엇인가요?).알아채다위키피디아위의 알고리즘은 일반적으로 이를 암시하지만,
-c
with는 with와 다르다는 것을 암시하므로 약간 오해의 소지가 있습니다 .p
관련된 유일한 예외는 상위 볼륨 없이 하위 볼륨을 보내는 것입니다.-c
-p
-p
요약하자면, 항상 명시적으로 부모를 지정 -p
하고 무시하는 것이 좋습니다 -c
. btrfs receive
"두 부모"라는 개념은 전혀 없습니다.