마운트된 상위 파일 시스템을 대체하는 변경 사항을 하위 파일 시스템에 병합할 수 있기를 원합니다.
나는 모든 것에 관심이 있습니다.온라인(즉, 병합하지만클래딩 설치) 및오프라인(오버레이 제거 후 병합) 해결책.
몇 가지 오프라인 솔루션을 찾았고 이를 답변으로 추가했습니다.
혹시 아는 사람 있나요?온라인해결책? 오버레이가 설치되어 있는 동안 레이어를 병합하기 위해 실행할 수 있는 "커밋" 유형 명령이 있으면 좋을 것입니다.
다음 질문에서도 비슷한 질문이 제기되었지만 답변은 없습니다.
- 파일을 수정하여 OverlayFs의 하위 디렉터리에 동기화하는 방법이 있나요?
- OverlayFS 디렉터리를 통해 하위 수준 파일을 수정하는 방법은 무엇입니까?
- OverlayFS는 하위 수준 디렉터리 파일을 원활하게 편집합니다.
- OverlayFS - 마운트 해제하지 않고 상위 파일 시스템을 지속적으로 변경하는 방법은 무엇입니까?
이 게시물의 댓글에는 다양한 제안이 제시되었습니다.파일 시스템 병합그리고은닉처, 둘 다 특정 사용 사례를 다루지만 오버레이에서 제공하는 일반적인 파일 시스템 독립적 사용 사례는 아닙니다.
내 목표는 모든 (가능한 경우) 기본 파일 시스템에서 Linux 애플리케이션과 함께 사용할 수 있는 스냅샷이 포함된 안전한 파일 시스템 샌드박스를 확보하여 준비가 되었을 때 변경 사항을 롤백하거나 수동으로 커밋할 수 있도록 하는 것입니다.
나는 사용 방법을 알고 있다면 지난 몇 년간의 모든 샌드박스/가상화 혁신 덕분에 최신 메인라인 Linux에 필요한 모든 기능이 내장되어 있다고 생각합니다.
답변1
나는 발견했다Overlayfs-도구이 프로젝트는 유용한 도구 세트(diff, merge 및 Vacuum)를 구현합니다. 오버레이를 언로드해야 하므로오프라인- 유일한 해결책.
이는 좋은 개념 증명이지만 관리자가 한 명뿐이고 몇 년 동안 활동하지 않았기 때문에 현재 상태에서는 의존하지 않을 것입니다.
답변2
노력하다온라인해결책이지만 아직은 존재하지 않습니다.
설정(예: /tmp
디렉터리에서 루트로):
LOWER=$HOME
mkdir u1 w1 o1 O
mount -t overlay overlay -o lowerdir=$LOWER,upperdir=u1,workdir=w1 o1
mount --bind o1 O
그런 다음 스냅샷을 생성하려는 경우 O
다음과 같은 디렉토리에서 작업 할 수 있습니다 .$LOWER
mkdir u2 w2 o2
mount -t overlay overlay -o lowerdir=o1,upperdir=u2,workdir=w2 o2
(이와 같은 중첩된 재정의는 이전 커널에서는 작동하지 않습니다.)
그러나 나는 바인드 마운트를 대신 O
point 로 원자적으로 변경할 수 있는 방법을 원합니다 . 다음 외에는 무엇을 해야할지 모르겠습니다.o2
o1
umount O
mount --bind o2 O
(비원자성; 제거된 창이 있습니다 O
).
이상적으로는 실행 중인 프로세스가 기본 파일 시스템 O
이 . 이것이 가능한지, 아니면 이와 같이 기본 파일 시스템을 변경하면 열려 있는 응용 프로그램이 너무 많이 중단될 수 있는지 모르겠습니다 . 좀 더 조사해 볼 필요가 있어요.o1
o2
O
그런 다음 O
리디렉션 되면 예방 조치로 읽기 전용으로 o2
다시 마운트한 다음 rdiffdir 또는 overlayfs-tools 등을 사용하여 오프라인 병합을 수행할 수 있습니다.o1
o2
마지막으로, , 및 (이제 모든 빈 디렉토리)를 삭제할 수 있도록 자동으로 다시 마운트하는 방법이 필요합니다 . 다시 말하지만 이것이 가능한지 모르겠습니다.lowerdir=$HOME,upperdir=u2,workdir=w2
o1
u1
w1
그렇지 않으면 병합이나 정리를 시도하지 않고도 오버레이를 점점 더 깊게 중첩하고 각 설치에 대한 오버레이 및 상위 디렉터리를 유지하여 스냅샷을 얻을 수 있습니다. 그러나 설치할 수 있는 중첩 오버레이 수는 제한될 수 있습니다. 어느 시점에서 변경 사항을 유지하려면 레이어를 병합해야 합니다.
답변3
다른오프라인내가 생각해 낸 해결책은 다음과 같습니다.목차오버레이가 설치된 패치를 만든 다음 제거하고 적용합니다. 이 솔루션을 사용하려면 패치를 어딘가(디스크 또는 ramdisk/tmpfs)에 저장하는 동안 중간 단계가 필요합니다.
답변4
==설명==
Btrfs 스냅샷을 사용하여 상위 디렉터리와 하위 디렉터리를 병합하겠습니다. Btrfs 하위 볼륨은 디렉터리와 거의 동일하게 작동하지만 하위 볼륨의 스냅샷(복제)을 수행하므로 추가 디스크 공간이 필요하지 않습니다. 그런 다음 Overlayfs의 내용을 스냅샷으로 재동기화하면 상위 디렉토리 디스크 공간의 두 배만 사용됩니다. rsync가 완료되면 원래 하위 디렉터리와 상위 디렉터리를 삭제하고 새 스냅샷과 새(빈) 상위 디렉터리로 교체할 수 있습니다.
==단계==
- Btrfs 하위 볼륨을 기본 디렉터리로 생성합니다(며칠 또는 몇 주 후에 병합할 준비가 되면 2단계로 이동).
- 기본 디렉터리의 (쓰기 가능한) 스냅샷을 찍습니다.
- Overlayfs를 마운트한 후 rsync를 사용하여 Overlayfs의 모든 변경 사항을 스냅샷에 동기화합니다.
- Overlayfs를 제거합니다.
- 하위 디렉토리 삭제
- 이전 lowerdir을 새 스냅샷으로 교체합니다.
- 상위 디렉터리를 삭제합니다.
- 새(빈) 상위 디렉터리를 다시 만듭니다.
- Overlayfs 파일 시스템을 다시 마운트합니다.
==Steps as terminal commands (untested!)==
1# btrfs subvolume create lowerdir
2# btrfs subvolume snapshot lowerdir lowerdir_new
3# rsync --delete -a overlayfs lowerdir_new
4# umount overlayfs
5# btrfs subvolume delete lowerdir
6# mv lowerdir_new lowerdir
7# rm -rf upperdir
8# mkdir upperdir
9# mount -o lowerdir
Btrfs 스냅샷은 새로운 하위 볼륨이므로 이 프로세스를 무기한 반복할 수 있습니다.