GNU/Linux에는 디렉토리를 포함하는 통합 마운트가 있습니다. 따라서 읽기 전용 디렉터리 위에 쓰기 가능한 디렉터리를 마운트할 수 있습니다. 쓰기 가능한 디렉터리가 마운트 해제되어도 읽기 전용 디렉터리는 영향을 받지 않습니다.
저는 블록 장치와 동일한 기능을 찾고 있습니다. 쓰기 가능한 부분을 파일에 저장하는 것이 좋습니다. 그래서 나는 다음과 같은 것을 실행하고 싶습니다 :
device-setup /dev/newdevice /dev/read-only-device overlayfile
/dev/newdevice에 쓰면 변경 사항이 덮어쓰기 파일에 저장되어야 합니다. 작성된 섹터를 읽으면 덮어쓴 파일에서 데이터를 가져와야 합니다. 기록되지 않은 섹터를 읽으면 /dev/read-only-device에서 데이터를 가져와야 합니다.
그런 도구가 존재하나요?
답변1
장치 매퍼와 해당 대상을 사용하여 snapshot
이 작업을 수행 할 수 있습니다.
기본적으로 쓰기 가능한 스냅샷을 생성할 때 LVM과 동일한 작업을 수행하게 됩니다.
dev=/dev/read-only-device
ovl=/path/to/overlay.file
newdevname=newdevice
size=$(blockdev --getsz "$dev")
loop=$(losetup -f --show -- "$ovl")
printf '%s\n' "0 $size snapshot $dev $loop P 8" |
dmsetup create "$newdevname"
그런 다음 을 통해 해당 장치에 액세스할 수 있습니다 /dev/mapper/newdevice
.
동시에 원시 장치에도 액세스해야 하는 경우 다음을 수행할 수 있습니다.
printf '%s\n' "0 $size snapshot-origin $dev" |
dmsetup create originaldevice
를 통해 액세스하세요 /dev/mapper/originaldevice
.
해당 장치에 쓸 수 있으며, 그런 다음 스냅샷 장치에 기록된 블록 외에도 덮어쓰기 파일에는 스냅샷 소스가 기록될 때 덮어쓴 블록의 복사본이 포함됩니다.
적용 범위 파일은 스파스 파일일 수 있습니다. (예를 들어 으로 생성 truncate -s10G the-file
) 원래 장치만큼 클 필요는 없습니다. 이것을 사용하여 얼마나 가득 차 있는지 알 수 있습니다 dmsetup status "$newdevname"
.
알아채다:스냅샷 장치의 크기 및 콘텐츠 요구 사항.