Btrfs: 하위 볼륨 스냅샷을 활성화하려면 스냅샷 전용 데이터 하위 볼륨마다 별도의 하위 볼륨을 생성해야 합니까?

Btrfs: 하위 볼륨 스냅샷을 활성화하려면 스냅샷 전용 데이터 하위 볼륨마다 별도의 하위 볼륨을 생성해야 합니까?

초기 면책조항으로 저는 스냅샷에 Inception 스타일 스냅샷이 포함되는 것을 원하지 않습니다.

예를 들어 @에 마운트 /하고 @_snapshots에 마운트 한 경우 하위 볼륨 /.snapshots이므로 /.snapshots스냅샷에 포함되지 않지만 /에 계속 표시됩니다 /. 이것은 좋다.

그러나 예를 들어 @home_fsinatra어디에 설치되어 있습니까 /home/fsinatra? 이 하위 볼륨의 스냅샷을 어디에 배치해야 합니까? @home_fsinatra_snapshots? /home/fsinatra/.snapshots또는 어딘가에 있는 전용 스냅샷 하위 볼륨 /.snapshots/...(이를 달성하는 방법은 확실하지 않지만).

저는 ZFS 고유의 중첩 데이터 세트와 스냅샷에 대해 매우 잘 알고 있으며 처음부터 Btrfs를 사용했지만 지금까지는 스냅샷을 건드리는 것을 피했습니다. 이는 실제로 논리적으로 중첩된 하위 볼륨과 스냅샷을 사용하는 ZFS의 현재 시스템과 같이 Btrfs에 새 시스템 드라이브를 마운트하는 것입니다(단순화를 위해 아마도 문자 그대로의 단순 구성을 취하고 "중첩 세트"를 전달하지만 fstab). 스냅샷은 수동으로 생성하거나 Snapper를 통해 자동으로 생성할 수 있습니다.

나는 Btrfs 이외의 특정 아이디어나 요구 사항에 얽매이지 않으며 일부 항목(시스템 및 개인 사용자 홈페이지 등)의 스냅샷을 찍지만 다른 항목(다양한 tmp 및 캐시 디렉터리, /opt, /var, docker 등)의 스냅샷은 찍지 않습니다. .) 스냅샷을 찍습니다. 내 하위 볼륨도 마찬가지입니다.필요솔직히 말해서, 나는 그것이 시대정신에 기초하여 가장 쉬운 것이라고 생각했습니다.

(이것은 Debian Bookworm BTW, SSD의 amd64에서 작동합니다.)

답변1

이것은 단순히 인기가 없는 주제나 대답이 필요한 질문이 아닌 것 같지만, 이 주제에 대해 지구상에는 잘못된 정보가 많거나 적어도 이에 대한 이해가 부족하고 12명이 그것에 대해 많은 관심을 가지고 있습니다. , 그리고 인터넷에 관련 기사를 썼습니다.

더 관련성이 높은 것은 일반적인 개념이 파일 시스템 사용자 도구 설계 결정으로서 불필요하게 복잡해 보인다는 것입니다.

나는 원래 내 자신의 질문에 대답하고 원래 질문에서 제기된 주장이 실제로 "최상의"(유일한 것은 아닐지라도) 접근 방식일 수 있는 이유를 설명했습니다. 구체적으로:

그러나 예를 들어 @home_fsinatra어디에 설치되어 있습니까 /home/fsinatra? 이 하위 볼륨의 스냅샷을 어디에 배치해야 합니까? 이름이 지정된 전용 스냅샷 하위 볼륨에서 @home_fsinatra_snapshots[수동 설치]는 /home/fsinatra/.snapshots​​?

그러나 그것이 유일한 방법은 아닙니다. 실제로 이 접근 방식의 단점은 금새 명백해집니다. 예를 들어 홈 디렉터리의 스냅샷을 자주 또는 자동으로(또는 실제로 모든) 촬영하는 경우 홈 폴더 아래(특히 해당 폴더 Center)에 정크 더미가 빠르게 생성될 수 있습니다. 축적되어 ~/.snapshots다양한 유틸리티를 손상시킵니다. 그 중 일부는 실제로 피하기 어렵거나 불가능합니다. 물론 많은 유틸리티(rsync 및 백업 프로그램 등)와 다른 유틸리티의 특정 플래그를 사용하여 이를 제외할 수 있지만 다른 유틸리티는 제외할 수 없습니다. 예를 들어, 단지 심볼릭 링크로만 나타나는 것은 아닙니다.

ZFS는 기본적으로 숨겨져 있는 가상 폴더를 사용하여 이 문제를 탁월한 방법으로 해결합니다. (단지 점으로 숨겨진 것이 아니라 디렉토리 목록에 전혀 나타나지 않으므로 특별히 이름을 찌르지 않는 한 액세스할 수 없다는 뜻입니다.)

ZFS는 위에 제시된 아이디어와 매우 유사한 하위 볼륨 아래의 "하위 볼륨"(데이터 세트 또는 파일 시스템이라고도 함)의 스냅샷을 제공합니다. 그러나 기본적으로 리터럴 문자열을 통해 수동으로 반복하지 않으면 검색할 수 없습니다. 어떤 유틸리티나 프로그램도 어떤 이유로 정확한 명명된 폴더를 명시적으로 테스트하도록 프로그래밍되지 않은 한 파일 시스템을 탐색/스캔하여 우연히 발견하지 않습니다.

그러나 Btrfs는 이를 수행하지 않기 때문에(공평하게 말하면 "표준"이 아님) 이 "스냅샷 아래 볼륨"은 일반 사용자에게 너무 많은 단점을 가질 것으로 예상됩니다. 하지만 자체 하위 볼륨이므로 "스냅샷 부팅" 문제를 피할 수 있습니다. 그러나 이는 사용자가 달리 요청하지 않는 한 대부분의 도구가 이미 감지하고 피하는 데 매우 능숙한 보다 가벼운 심볼릭 링크를 사용하여 수행할 수 있습니다.

그래서 나의 새로운 접근 방식은 @ 및 @home(및 기타)과 형제인 스냅샷 볼륨을 사용하는 것이며, 모든 스냅샷은 해당 볼륨 아래에 있습니다. 내 기본 Btrfs 볼륨은 다음과 같습니다.

@/                          -> /
@home~fsinatra/             -> /home/fsinatra/
@snapshots/                 -> /.snapshots/
@snapshots/@/               -> /.snapshots/@/
@snapshots/@home~fsinatra/  -> /.snapshots/@home~fsinatra/

@snapshots 아래의 첫 번째 수준 개체는 중첩된 하위 볼륨이 아닌 일반 파일 시스템 폴더입니다. 즉, for 는 @snapshots/@/하위 @snapshots볼륨이지만 @그 아래에는 일반 폴더가 있습니다. (이 질문을 게시할 당시에는 이것이 가능한지 몰랐지만 일이 더 쉬워졌습니다.) @또는 에 대한 스냅샷이 생성 되면 /단순히 아래로 이동됩니다./.snapshots/@/

각 하위 볼륨에는 동일한 이름을 가진 전용 폴더가 있습니다 @snapshots/. (물론 모두 수동으로 설정됩니다.)

너한테는 이유가 없어가지다미러 스냅샷 아래에 하위 볼륨 이름과 동일한 평면 레이아웃이 있습니다. 대신 설치된 계층 구조를 모방할 수 있습니다. 그러나 스냅샷 폴더와 수백, 수천 개까지 늘어날 수 있는 계층적 폴더를 혼합하는 것은 이상하고 관리하기 어려워 보입니다. 예를 들어 스냅샷을 명확하게 정의하는 것이 더 명확하다고 생각합니다.오직루트( @) 아래에는 각 하위 볼륨에 동일한 수준의 전용 스냅샷 폴더가 있습니다.

다시 말하지만, 스냅샷 폴더를 계층적 파일 시스템에 중첩시키려면 심볼릭 링크 폴더의 이름을 .snapshotsback 으로 지정하면 됩니다 /.snapshots. 심볼릭 링크를 사용하면 무거운 설치 폴더에서 발생하는 위의 문제를 대부분 피할 수 있습니다.

미러 아래의 하위 볼륨 이름 1:1도 의미가 있습니다 /.snapshot. 그런 다음 스냅샷 이름을 YYYMMDD-HHMMSS로 지정할 수 있으며 이는 컨텍스트에 완벽하게 부합합니다.

어떤 전략을 채택하더라도 알아야 할 큰 주의 사항이 있습니다.

하위 볼륨의 진정한 평면 레이아웃을 원하는 경우(수동을 통해 중첩했는지 여부에 관계없이 fstab):

마운트된 파일 시스템에 하위 볼륨을 생성하면 안 됩니다..

이렇게 하면 모든 새 볼륨이 실제로 @.(또는 에 설치한 하위 볼륨 이름 /)에 중첩됩니다.

대신에 해야 할 일은 기본 Btrfs 파티션 자체(지정된 하위 볼륨 없이)를 안전한 곳에 마운트하는 것입니다. (예를 들어, .) 나는 /mnt/btrfs-root일시적으로, 어쩌면 영구적으로 이 일을 하고 있을 뿐입니다. 이렇게 하면 및 기타 최상위 하위 볼륨 fstab만 볼 수 있는 최상위 수준에 쉽게 액세스할 수 있습니다 . 따라서 스냅샷 및/또는 사용자 홈 디렉토리에 대한 다른 플랫 하위 볼륨을 생성할 때 에 상대적 이 아닌 다른 하위 볼륨을 만듭니다 . 그렇게 하면 하위 볼륨이 아닌 다른 하위 볼륨("루트" 하위 볼륨 포함)이 됩니다.@@home/mnt/btrfs-root//

-o subvol=@/@snapshots(그렇지 않으면 in 으로 지정해야 합니다. fstab그렇지 않으면 마운트되지 않습니다. 에는 존재하지 않습니다 @snapshots. 그것이 저를 이 버려진 토끼굴로 이끌었습니다.)

일단 이 개념을 이해하고 나면 그것은 분명해 보일 수 있고 독자 여러분에게도 항상 분명했을 것입니다. 하지만 제가 아는 한 인터넷 전체에서 그것에 대해 글을 쓴 사람은 아마도 단 한 명뿐일 것입니다. 덕분에 많은 [추가] 두통이 있는 경우, 오딘이 사후 세계에서 그 사람의 영혼을 축복하기를 바랍니다.

이것이 향후 10년 동안 세 명 더 많은 사람들에게 보답하는 데 도움이 되기를 바랍니다.

저와 다른 사람들을 혼란스럽게 하는 또 다른 트릭이 있습니다: 데비안 테스트에서 Calamares가 Btrfs에 설치되면 Ubuntu는 항상 항목의 이름을 별도로 지정합니다 fstab( /@슬래시 /@home없이 @) @home. 나는 슬래시를 사용하거나 사용하지 않고 실행하여 테스트했으며 제 경우에는 어느 쪽이든 작동했습니다. 나는 선행 슬래시가 더 정확하다고 생각합니다. 그렇지 않으면 mount단지가설이는 설치 중에 지정된 볼륨의 루트 디렉터리에 상대적입니다.

관련 정보