에 읽기 전용 하위 볼륨이 있는 BTRFS 파일 시스템 A가 있다고 가정해 보겠습니다 <mount-point-A>/snaps/good-one
.콘텐츠<mount-point-B>/
하위 볼륨은 — 일반 읽기 및 쓰기 모드 에 있습니다 .
btrfs send/receive
채용을 통해 이를 달성할 수 있는 방법이 있나요 ? 하위 볼륨을 읽기 전용으로 수신 <mount-point-B>/good-one
한 다음 어떻게든 읽기-쓰기로 전환하는 것처럼요 <mount-point-B>/
? 아니면 다시 돌아가야 합니까 rsync
?
답변1
읽기 전용 하위 볼륨을 받은 후 rw
스냅샷을 생성하고 선택적으로 읽기 전용 하위 볼륨을 삭제합니다.
답변2
하위 볼륨은 자동으로 읽기 전용으로 설정 되지만 btrfs receive
언제든지 변경할 수 있습니다. 그러나 이렇게 하면 사본이 원본으로서 가지고 있는 모든 보호가 제거됩니다.
수신이 완료되면 다음 명령을 실행합니다 <mount-point-B>
.
sudo btrfs property set <mount-point-B> ro false
이제 백업의 무결성을 손상시키지 않으려면 rw
@Ginnungagap이 제안한 대로 스냅샷을 생성하세요.
답변3
긴 이야기 짧게
btrfs sub set-default <VolumeID> ./
완전한 답변
다음에서 읽기 전용 볼륨을 받았다고 가정합니다 <mount-point-B>/good-one
.
읽고 쓸 수 있게 만드세요:
cd mount-point-B
sudo btrfs property set -ts ./good-one ro false
ID를 얻으세요:
sudo btrfs sub show ./good-one | grep "Subvolume ID"
루트에 두십시오.
sudo btrfs sub set-default <Subvolume ID> ./
루트 볼륨의 변경 사항을 보려면 다시 마운트해야 합니다. 원래 루트 볼륨은 숨겨집니다.
다음은 전체 테스트 스크립트입니다.
#!/bin/bash
sudo modprobe loop
cd /tmp
fallocate -l 128M btrfs1 && \
fallocate -l 128M btrfs2 && \
sudo losetup /dev/loop0 ./btrfs1 && \
sudo losetup /dev/loop1 ./btrfs2 && \
sudo mkfs.btrfs -q /dev/loop0 && \
sudo mkfs.btrfs -q /dev/loop1 && \
mkdir btrfs1m && \
mkdir btrfs2m && \
sudo mount /dev/loop0 btrfs1m && \
sudo mount /dev/loop1 btrfs2m && \
sudo touch btrfs1m/file1 && \
sudo touch btrfs2m/file2 && \
sudo btrfs sub snapshot -r btrfs1m/ btrfs1m/s1 && \
sudo btrfs send btrfs1m/s1 | sudo btrfs receive btrfs2m/ && \
sudo umount /dev/loop0 && \
sudo losetup -d /dev/loop0 && \
rm btrfs1 && \
rmdir btrfs1m && \
cd btrfs2m
VID=$(sudo btrfs sub show ./s1 | grep "Subvolume ID" | tr -dc '0-9')
sudo btrfs property set -ts ./s1 ro false && \
sudo btrfs sub set-default $VID ./ && \
cd .. && \
sudo umount /dev/loop1 && \
sudo mount /dev/loop1 btrfs2m && \
echo "Now the received volume sits at the root:" && \
ls btrfs2m && \
sudo mv btrfs2m/file1 btrfs2m/renamed && \
sudo umount /dev/loop1 && \
sudo losetup -d /dev/loop1 && \
rm btrfs2 && \
rmdir btrfs2m