ルートbtrfsファイルシステムにマウントすると、多くのLinuxディストリビューションがデフォルトのサブボリュームにインストールされます。変更しないままにすると、このレイアウトは新しいスナップショットまたはサブボリュームがルートファイルシステム内に作成されるように強制します。これはスナップショット自体が含まれているため非常に混乱します。
/
│─dev
│─home
│─var
│─usr
│─...
└─snapshots
└─snap1
より理解しやすい基本サブボリュームのレイアウトは次のとおりです。
/
├─subvolumes
│ └─root
│ ├─dev
│ ├─home
│ ├─var
│ ├─usr
│ └─...
└─snapshots
└─snap1
livecdから起動せずにこのサブボリュームレイアウトを使用するようにディストリビューションのデフォルトのbtrfsインストールをどのように変更できますか?
答え1
必ずしも必要ではありませんが、予期しないデータ損失を防ぐために、シングルユーザー(「回復」)モードでこれらの手順を実行することをお勧めします。
基本サブボリュームに目的のレイアウトを作成します。
mkdir /subvolumes
btrfs subvolume snapshot / /subvolumes/root
mkdir /snapshots
/subvolumes/root
新しいルートファイルシステムになるのでこのステップの後、ファイルシステムを変更しないでください。。
/subvolumes/root/etc/fstab
システムが新しいルートサブボリュームをルートファイルシステムとして使用するように編集します。これを行うには、このsubvol=/subvolumes/root
オプションを含めるように変更する必要があります。
新しいサブボリュームを指すようにgrubを変更できるように、どこかに新しいルートファイルシステムをマウントする必要があります。
mkdir /media/temporary
mount -o subvol=/subvolumes/root /dev/sdXX /media/temporary
cd /media/temporary
mount -o bind /dev dev
mount -o bind /sys sys
mount -o bind /proc proc
mount -o bind /boot boot # only necessary if you have a separate boot partition
chroot .
update-grub
exit
それはすべてです。再起動すると、ルートファイルシステムが新しいサブボリュームになります。成功したら、ディレクトリがあってはいけません/snapshots
。
必要に応じて、デフォルトのサブボリュームの永続マウントポイントを作成できます。
mkdir /media/btrfs/root
mount -o subvolid=0 /dev/sdXX /media/btrfs/root
その後、デフォルトのサブボリュームをマウントできます。
これで、デフォルトのサブボリュームから古いルートファイルシステムの内容を安全に削除できるようになりました。
cd /media/btrfs/root
rm -rf {dev,home,var,...}
答え2
提案されたレイアウトには「マイナーな」問題があります。 (とにかく大丈夫です。今使っています。)
GURB - 「デフォルト設定」パスを評価できません。常に (hd0,gpt2)/boot/grub2/grub.cfg (または grub2-install で "--boot-directory=/path" で指定されたエントリ) で grub.cfg を期待します。
だから - /subvolumes/{root,home,swap}を持つアイデアがうまくいきます!しかし、残念ながら - /bootがないと起動できなくなります。 :-( (厳密に言えば grub ロードは可能ですが grub.cfg(メニュー) は見つかりません)
実行中の OS (/subvolumes/root -> /) で /boot にバインドマウントされたサブボリューム "/boot" を作成して問題を解決しました。その後、 "grub2-install /dev/sda --boot-directory=/boot" は必要なファイルをインストールします。 "grub"が起動すると、 "ls(hd0、gpt2)/boot/grub/grub.cfg"が予想される場所にあり、すべてがうまく機能します。 OSはまた、これを/ boot(subvol-mount)に「認識」し、カーネルなどを更新することもできます。
もちろん、この設定は少し「殺す」です。私はいくつかの独立したルートインストールのアイデアを持っており、「btrfs set-default」を介してそれらを切り替えるだけです。残念ながら、これはグラブのために動作しません。
だから私の/ etc / fstabは次のようになります:
UUID=blah / btrfs auto,compress=no,subvol=/subvolumes/fedora_33_root 0 0
UUID=blah /boot btrfs auto,compress=no,subvol=/boot 0 0
UUID=blah /home btrfs auto,subvol=/subvolumes/home 0 0
UUID=blah /mnt/swap btrfs auto,subvol=/subvolumes/swap_subvol 0 0
/mnt/swap/swapfile none swap 0 0