Btrfs rootファイル・システムの操作
重要:
Oracle Linux 8では、Btrfsファイル・システム、およびこの章で説明されているすべての機能は、Unbreakable Enterprise Kernel (UEK)リリースのみでサポートされています。Btrfsファイル・システムの機能を使用するには、UEK R6以降を使用してシステムをブートする必要があります。
Btrfs rootファイル・システムは、インストール時に作成できます。そのためには、UEK R6以降を使用してシステムをブートする必要があります。
rootファイル・システムのサブボリュームの親のIDを検出するには、次のコマンドを使用します。
sudo btrfs subvolume list /
前のコマンドの出力で、最上位IDが5に設定されている点に注目してください。ファイル・システムの最上位は、事実上ファイル・システムのrootであり、そのファイル・システム内のすべてのサブボリュームへのアクセスに使用できます。
ID 256 gen 1591 top level 5 path boot ID 258 gen 1591 top level 5 path root ID 259 gen 1514 top level 5 path home ID 262 gen 1514 top level 258 path var/lib/portables"
前述の例では、インストールroot
ファイル・システムのサブボリュームのIDは258です。IDが258のサブボリューム(root
)が/
としてマウントされています。IDが258のデフォルト・サブボリューム(root
)は、アクティブなrootファイル・システムとしてマウントされています。
このmountコマンドでは、root
ファイル・システムとしてマウントされているデバイスが示され、サブボリュームID (258)が示されます。
sudo mount|grep 'on / '
/dev/sda2 on / type btrfs (rw,relatime,seclabel,space_cache,subvolid=258,subvol=/root)
なお、前の出力内の最上位ファイル・システムは、デフォルトではマウントされていません。最上位ファイル・システム・ボリュームをマウントするには、次のコマンドを使用します。
sudo mkdir /mnt sudo mount -o subvolid=5 /dev/sda2 /mnt
/mnt
のコンテンツをリストすると、root
サブボリュームなど、ファイル・システム・ボリューム内の各サブボリュームを表示できます。
ls /mnt
前述のコマンドを実行すると、次の出力が表示されます。
boot home root
なお、次の例で示すように、/
と/mnt/root
の内容は同一です。/mnt/root
に作成されたファイル(foo
)は/
でも表示されます。
sudo touch /mnt/root/foo ls /
前述のコマンドを実行すると、次の出力が表示されます。
bin boot dev etc foo home instroot lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
今度は、/mnt/root
のコンテンツをリスト表示します。
sudo ls /mnt/root
bin boot dev etc foo home instroot lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
/foo
ディレクトリを削除してから、/
のコンテンツをリスト表示します。
sudo rm -f /foo sudo ls /
bin boot dev etc home instroot lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
/mnt/root
の内容を再度リスト表示します。
sudo ls /mnt/root
bin boot dev etc home instroot lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
rootファイル・システムのスナップショットの作成
現在のroot
ファイル・システムのスナップショットを取得するには:
-
適切なマウント・ポイントにrootファイル・システムの最上位レベルをマウントします。
sudo mount -o subvolid=5 /dev/sda2 /mnt
-
ディレクトリをマウント・ポイントに変更してスナップショットを取得します。次の例では、
root
ファイル・システムとしてinstall
サブボリュームが現在マウントされています。sudo cd /mnt sudo mkdir -p /mnt/snapshots sudo btrfs subvolume snapshot root snapshots/root_snapshot_1
-
ディレクトリを
/
に変更してファイル・システムの最上位レベルをアンマウントします。sudo cd / sudo umount /mnt
サブボリュームのリストに、新規作成されたスナップショットが含まれるようになります。
sudo btrfs subvolume list /
ID 256 gen 1332 top level 5 path boot ID 258 gen 1349 top level 5 path root ID 259 gen 1309 top level 5 path home ID 261 gen 1309 top level 258 path var/lib/portables ID 264 gen 1348 top level 5 path snapshots/root_snapshot_1
rootファイル・システムとしての代替スナップショットのマウント
システムの変更をロールバックする場合は、デフォルトのサブボリュームとしてそのIDを指定し、root
ファイル・システムとしてスナップショットをマウントできます。
sudo btrfs subvolume set-default 264 /
GRUBコマンドラインによって設定が上書きされないようにするには、次のように更新します。
current_grub_kernel=$(sudo grubby --default-kernel); sudo grubby --remove-args="rootflags=subvol=root" --update-kernel $current_grub_kernel
変更を有効にするには、システムを再起動します。
スナップショット・サブボリュームIDとサブボリュームがrootファイルシステムとしてマウントされていることを確認します。
sudo mount|grep 'on / '
/dev/sda2 on / type btrfs (rw,relatime,seclabel,space_cache,subvolid=264,subvol=/snapshots/root-snapshot1)
rootファイル・システムのスナップショットの削除
ノート:
スナップショットは、サブボリュームのデフォルトIDとして設定されていると削除できません。rootファイルシステムとして使用中のスナップショットを削除すると、システム障害が発生して、ハードの物理リセットが必要になることがあります。rootファイル・システムのデフォルト・サブボリュームとして設定されているスナップショットを削除する前に、デフォルトIDを変更して、システムをリブートします。次に例を示します。
sudo btrfs subvolume set-default 258 / reboot
スナップショットを削除するには、次の手順を実行します。
-
次のようにファイル・システムの最上位レベルをマウントします。
sudo mount -o subvolid=5 /dev/sda2 /mnt
-
ディレクトリをマウント・ポイントに変更してスナップショットを削除します。
$ sudo cd /mnt sudo btrfs subvolume delete snapshots/root-snapshot1
-
ディレクトリを
/
に変更してファイル・システムの最上位レベルをアンマウントします。sudo cd / sudo umount /mnt
サブボリュームのリストには、
snapshots/root-snapshot1
が含まれなくなります。sudo btrfs subvolume list /
ID 256 gen 1332 top level 5 path boot ID 258 gen 1349 top level 5 path root ID 259 gen 1309 top level 5 path home ID 261 gen 1309 top level 258 path var/lib/portables