btrfsを受信しました/?

btrfsを受信しました/?

に読み取り専用サブボリュームを持つ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

関連情報