btrfsを使用して、プライマリサブボリューム(subvolid = 0)のLinuxインストールを別のサブボリュームに移動します。

btrfsを使用して、プライマリサブボリューム(subvolid = 0)のLinuxインストールを別のサブボリュームに移動します。

ルート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

関連情報