os:boot_environment
差分
このページの2つのバージョン間の差分を表示します。
| 前のリビジョン | |||
| — | os:boot_environment [2021/12/27 10:35] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ===== Boot Environment ===== | ||
| + | |||
| + | Boot Environment とは ZFS をルートファイルシステムに選んだ場合に使える機能です。 | ||
| + | ルートファイルシステムのクローンを任意に作成し、 | ||
| + | どのクローンから起動するのかを自由に切り替えることができます。 | ||
| + | |||
| + | 例えば、新しいリリースまたはパッチを試すために、現在の環境のクローンを作成しバックアップ用に取っておきます。 | ||
| + | |||
| + | その上で、新しいリリースまたはパッチをインストールして、うまくいけばそのまま使い続ければ良いですし、 | ||
| + | 何か問題が発生したならば、バックアップ用に取っておいた環境からブートすれば、元に戻ります。 | ||
| + | |||
| + | また、異なるバージョンの FreeBSD をインストールしておき、切り替えて使うこともできます。 | ||
| + | |||
| + | ==== セットアップ ==== | ||
| + | |||
| + | FreeBSD のインストーラでルートファイルシステムに zfs を選んでインストールします。 | ||
| + | すると次のような zfs のファイルシステム構成になります。 | ||
| + | |||
| + | < | ||
| + | $ zfs list | ||
| + | NAME | ||
| + | zroot 683M 12.4G | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | </ | ||
| + | |||
| + | この zroot/ | ||
| + | ルートファイルシステムに含まれるディレクトリは /dev を除いた / 以下の全てのディレクトリです。 | ||
| + | /usr や /var も含みます。 | ||
| + | |||
| + | 逆を言うと個別にマウントされたものがルートファイルシステムには含まれないことになります。 | ||
| + | 上記のリストでは以下が該当します。 | ||
| + | |||
| + | * /tmp | ||
| + | * /usr/home | ||
| + | * /usr/ports | ||
| + | * /usr/src | ||
| + | * /var/audit | ||
| + | * /var/crash | ||
| + | * /var/log | ||
| + | * /var/mail | ||
| + | * /var/tmp | ||
| + | |||
| + | zroot/usr と zroot/var はルートファイルシステムに含まれない領域を作り出すためのダミーです。 | ||
| + | マウントポイントが割り当てられていますが、mounted が no のため実際にはマウントされていません。 | ||
| + | |||
| + | < | ||
| + | $ zfs get mounted, | ||
| + | NAME | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | </ | ||
| + | |||
| + | mount コマンドでも確認することができます。 | ||
| + | |||
| + | < | ||
| + | $ mount | ||
| + | zroot/ | ||
| + | devfs on /dev (devfs, local, multilabel) | ||
| + | zroot/tmp on /tmp (zfs, local, noatime, nosuid, nfsv4acls) | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot/ | ||
| + | zroot on /zroot (zfs, local, noatime, nfsv4acls) | ||
| + | </ | ||
| + | |||
| + | ==== 管理ツール ==== | ||
| + | |||
| + | Boot Environment を扱うためのツールとして以下の2つがあります。 | ||
| + | |||
| + | - **bectl** | ||
| + | * FreeBSD 12.0 から標準搭載されたコマンドラインツールです。 | ||
| + | - **beadm** | ||
| + | * ports/pkg でインストールできるコマンドラインツールです。\\ bectl がない環境でも使うことができます。 | ||
| + | |||
| + | どちらも機能的にはほとんど変わりません。 | ||
| + | このページでは bectl を例に説明します。 | ||
| + | |||
| + | ==== 使い方 ==== | ||
| + | |||
| + | === 1. ルートファイルシステムをクローンする === | ||
| + | |||
| + | < | ||
| + | bectl create < | ||
| + | </ | ||
| + | |||
| + | 現在のルートファイルシステムのスナップショットを取り、そこから新しいルートファイルシステムを作成します。 | ||
| + | |||
| + | zroot/ | ||
| + | |||
| + | 既にルートファイルシステムにスナップショットがあるならば、そこからクローンすることもできます。 | ||
| + | |||
| + | < | ||
| + | bectl create -e < | ||
| + | </ | ||
| + | |||
| + | 例えば default@2019-04-01 から test というルートファイルシステムを作成するのは次のようになります。 | ||
| + | |||
| + | < | ||
| + | bectl create -e default@2019-04-01 test | ||
| + | </ | ||
| + | |||
| + | === 2. 次回起動時のルートファイルシステムを変更する === | ||
| + | |||
| + | < | ||
| + | bectl activate < | ||
| + | </ | ||
| + | |||
| + | 次回起動時のルートファイルシステムを < | ||
| + | |||
| + | === 3. ルートファイルシステムの一覧表示 === | ||
| + | |||
| + | < | ||
| + | bectl list | ||
| + | </ | ||
| + | |||
| + | 作成したルートファイルシステム一覧を表示します。結果は次のように表示されます。 | ||
| + | |||
| + | < | ||
| + | BE Active Mountpoint Space Created | ||
| + | default | ||
| + | test | ||
| + | </ | ||
| + | |||
| + | この例では default と test の2つのルートファイルシステムがあります。 | ||
| + | |||
| + | N,R の意味は次の通りです。 | ||
| + | |||
| + | * N: 現在アクティブなファイルシステムです。 (Now Active) | ||
| + | * R: 次回起動時に選ばれるファイルシステムです。 (Reboot next time) | ||
| + | |||
| + | === 4. ルートファイルシステムの削除 === | ||
| + | |||
| + | < | ||
| + | bectl destroy < | ||
| + | </ | ||
| + | |||
| + | 作成したルートファイルシステムを削除します。 | ||
| + | |||
| + | |||
| + | === 5. ルートファイルシステムのマウント === | ||
| + | |||
| + | < | ||
| + | bectl mount < | ||
| + | </ | ||
| + | |||
| + | 指定したルートファイルシステムをマウントします。 | ||
| + | マウントポイントを省略した場合は /tmp にテンポラリのマウントポイントを作成し、 | ||
| + | そこにマウントします。 | ||
| + | |||
| + | アンマウントするには以下を実行します。 | ||
| + | |||
| + | < | ||
| + | bectl umount < | ||
| + | </ | ||
| + | |||
| + | === 6. 環境名の変更 === | ||
| + | |||
| + | < | ||
| + | bectl rename < | ||
| + | </ | ||
| + | |||
| + | 環境の名前を変更します。 | ||
| + | これは現在起動している環境に対して行うことも可能です。 | ||
| + | |||
| + | === 7. jail 起動 === | ||
| + | |||
| + | bectl のみの機能です。 | ||
| + | |||
| + | < | ||
| + | bectl jail < | ||
| + | </ | ||
| + | |||
| + | ルートファイルシステムから jail を作成し、その中で動く sh を起動します。 | ||
| + | ネットワーク環境はセットアップされません。sh から手動で設定します。 | ||
| + | |||
| + | ==== ブートローダでの選択 ==== | ||
| + | |||
| + | もし、新しいルートファイルシステムにトラブルがあり、カーネルすら起動できなくなった場合は | ||
| + | ブートローダでルートファイルシステムを選択することができます。 | ||
| + | |||
| + | {{os: | ||
| + | |||
| + | 起動直後の画面で " | ||
| + | |||
| + | {{os: | ||
| + | |||
| + | " | ||
| + | |||
| + | {{os: | ||
| + | |||
| + | 元の環境を選びスペースキーを押すと、その環境でブートします。 | ||
| + | |||
| + | 起動したらアクティブなファイルシステムを切り替えましょう。 | ||
| + | |||
| + | < | ||
| + | bectl activate default | ||
| + | </ | ||
| + | |||
| + | ローダはアクティブなファイルシステムを切り替えてはくれません。 | ||
| + | |||
| + | ==== ユースケース ==== | ||
| + | |||
| + | 実際に freebsd-update を行う場合を例にとると一連の操作の流れは次のようになります。 | ||
| + | |||
| + | === 1. バックアップの作成 === | ||
| + | |||
| + | < | ||
| + | bectl create backup | ||
| + | </ | ||
| + | |||
| + | " | ||
| + | |||
| + | === 2. freebsd-update === | ||
| + | |||
| + | < | ||
| + | freebsd-update fetch install | ||
| + | </ | ||
| + | |||
| + | freebsd-update を実行しシステムを更新します。 | ||
| + | |||
| + | === 3. 再起動 === | ||
| + | |||
| + | < | ||
| + | shutdown -r now | ||
| + | </ | ||
| + | |||
| + | アップデート後に再起動します。 | ||
| + | |||
| + | === 4. 動作確認 === | ||
| + | |||
| + | ps でプロセスを確認するなど、動作を確認します。 | ||
| + | |||
| + | === 5. 切り戻し === | ||
| + | |||
| + | もし、4. の動作確認で問題があれば、" | ||
| + | |||
| + | < | ||
| + | bectl activate backup | ||
| + | shutdown -r now | ||
| + | </ | ||
| + | |||
| + | その後、default を削除し、backup を default にリネームすると元に戻ります。 | ||
| + | |||
| + | < | ||
| + | bectl destroy default | ||
| + | bectl rename backup default | ||
| + | </ | ||
| + | |||
| + | === 6. 古いバックアップの削除 === | ||
| + | |||
| + | < | ||
| + | bectl destroy backup | ||
| + | </ | ||
| + | |||
| + | ある程度安定的に動くことが分かったならば、不要になったバックアップを削除します。 | ||
os/boot_environment.1640568501.txt.gz · 最終更新: 2021/12/27 10:30 (外部編集)
