ユーザ用ツール

サイト用ツール


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 のファイルシステム構成になります。
 +
 +<code>
 +$ zfs list
 +NAME                 USED  AVAIL  REFER  MOUNTPOINT
 +zroot                683M  12.4G   176K  /zroot
 +zroot/ROOT           680M  12.4G   176K  none
 +zroot/ROOT/default   679M  12.4G   679M  /
 +zroot/tmp            176K  12.4G   176K  /tmp
 +zroot/usr            704K  12.4G   176K  /usr
 +zroot/usr/home       176K  12.4G   176K  /usr/home
 +zroot/usr/ports      176K  12.4G   176K  /usr/ports
 +zroot/usr/src        176K  12.4G   176K  /usr/src
 +zroot/var           1.09M  12.4G   176K  /var
 +zroot/var/audit      176K  12.4G   176K  /var/audit
 +zroot/var/crash      176K  12.4G   176K  /var/crash
 +zroot/var/log        232K  12.4G   232K  /var/log
 +zroot/var/mail       176K  12.4G   176K  /var/mail
 +zroot/var/tmp        176K  12.4G   176K  /var/tmp
 +</code>
 +
 +この zroot/ROOT/default がデフォルトのルートファイルシステムです。
 +ルートファイルシステムに含まれるディレクトリは /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 のため実際にはマウントされていません。
 +
 +<code>
 +$ zfs get mounted,canmount zroot/usr zroot/var
 +NAME       PROPERTY  VALUE     SOURCE
 +zroot/usr  mounted   no        -
 +zroot/usr  canmount  off       local
 +zroot/var  mounted   no        -
 +zroot/var  canmount  off       local
 +</code>
 +
 +mount コマンドでも確認することができます。
 +
 +<code>
 +$ mount
 +zroot/ROOT/default on / (zfs, local, noatime, nfsv4acls)
 +devfs on /dev (devfs, local, multilabel)
 +zroot/tmp on /tmp (zfs, local, noatime, nosuid, nfsv4acls)
 +zroot/usr/home on /usr/home (zfs, local, noatime, nfsv4acls)
 +zroot/usr/ports on /usr/ports (zfs, local, noatime, nosuid, nfsv4acls)
 +zroot/usr/src on /usr/src (zfs, local, noatime, nfsv4acls)
 +zroot/var/audit on /var/audit (zfs, local, noatime, noexec, nosuid, nfsv4acls)
 +zroot/var/crash on /var/crash (zfs, local, noatime, noexec, nosuid, nfsv4acls)
 +zroot/var/log on /var/log (zfs, local, noatime, noexec, nosuid, nfsv4acls)
 +zroot/var/mail on /var/mail (zfs, local, nfsv4acls)
 +zroot/var/tmp on /var/tmp (zfs, local, noatime, nosuid, nfsv4acls)
 +zroot on /zroot (zfs, local, noatime, nfsv4acls)
 +</code>
 +
 +==== 管理ツール ====
 +
 +Boot Environment を扱うためのツールとして以下の2つがあります。
 +
 +  - **bectl**
 +    * FreeBSD 12.0 から標準搭載されたコマンドラインツールです。
 +  - **beadm**
 +    * ports/pkg でインストールできるコマンドラインツールです。\\ bectl がない環境でも使うことができます。
 +
 +どちらも機能的にはほとんど変わりません。
 +このページでは bectl を例に説明します。
 +
 +==== 使い方 ====
 +
 +=== 1. ルートファイルシステムをクローンする ===
 +
 +<code>
 +bectl create <環境名>
 +</code>
 +
 +現在のルートファイルシステムのスナップショットを取り、そこから新しいルートファイルシステムを作成します。
 +
 +zroot/ROOT/<環境名> というファイルシステムが作成されます。
 +
 +既にルートファイルシステムにスナップショットがあるならば、そこからクローンすることもできます。
 +
 +<code>
 +bectl create -e <環境名>@<スナップショット> <環境名>
 +</code>
 +
 +例えば default@2019-04-01 から test というルートファイルシステムを作成するのは次のようになります。
 +
 +<code>
 +bectl create -e default@2019-04-01 test
 +</code>
 +
 +=== 2. 次回起動時のルートファイルシステムを変更する ===
 +
 +<code>
 +bectl activate <環境名>
 +</code>
 +
 +次回起動時のルートファイルシステムを <環境名> に変更します。
 +
 +=== 3. ルートファイルシステムの一覧表示 ===
 +
 +<code>
 +bectl list
 +</code>
 +
 +作成したルートファイルシステム一覧を表示します。結果は次のように表示されます。
 +
 +<code>
 +BE          Active Mountpoint Space Created
 +default     NR     /          248K  2019-06-12 18:45
 +test                        679M  2019-06-12 18:53
 +</code>
 +
 +この例では default と test の2つのルートファイルシステムがあります。
 +
 +N,R の意味は次の通りです。
 +
 +  * N: 現在アクティブなファイルシステムです。 (Now Active)
 +  * R: 次回起動時に選ばれるファイルシステムです。 (Reboot next time)
 +
 +=== 4. ルートファイルシステムの削除 ===
 +
 +<code>
 +bectl destroy <環境名>
 +</code>
 +
 +作成したルートファイルシステムを削除します。
 +
 +
 +=== 5. ルートファイルシステムのマウント ===
 +
 +<code>
 +bectl mount <環境名> <マウントポイント>
 +</code>
 +
 +指定したルートファイルシステムをマウントします。
 +マウントポイントを省略した場合は /tmp にテンポラリのマウントポイントを作成し、
 +そこにマウントします。
 +
 +アンマウントするには以下を実行します。
 +
 +<code>
 +bectl umount <環境名>
 +</code>
 +
 +=== 6. 環境名の変更 ===
 +
 +<code>
 +bectl rename <古い環境名> <新しい環境名>
 +</code>
 +
 +環境の名前を変更します。
 +これは現在起動している環境に対して行うことも可能です。
 +
 +=== 7. jail 起動 ===
 +
 +bectl のみの機能です。
 +
 +<code>
 +bectl jail <環境名>
 +</code>
 +
 +ルートファイルシステムから jail を作成し、その中で動く sh を起動します。
 +ネットワーク環境はセットアップされません。sh から手動で設定します。
 +
 +==== ブートローダでの選択 ====
 +
 +もし、新しいルートファイルシステムにトラブルがあり、カーネルすら起動できなくなった場合は
 +ブートローダでルートファイルシステムを選択することができます。
 +
 +{{os:BootEnvironmentMenu0.png}}
 +
 +起動直後の画面で "7" を押します。
 +
 +{{os:BootEnvironmentMenu1.png}}
 +
 +"2" を押すと、ブートする環境が切り替わります。
 +
 +{{os:BootEnvironmentMenu2.png}}
 +
 +元の環境を選びスペースキーを押すと、その環境でブートします。
 +
 +起動したらアクティブなファイルシステムを切り替えましょう。
 +
 +<code>
 +bectl activate default
 +</code>
 +
 +ローダはアクティブなファイルシステムを切り替えてはくれません。
 +
 +==== ユースケース ====
 +
 +実際に freebsd-update を行う場合を例にとると一連の操作の流れは次のようになります。
 +
 +=== 1. バックアップの作成 ===
 +
 +<code>
 +bectl create backup
 +</code>
 +
 +"backup" という名前で新しいルートファイルシステムを作成します。
 +
 +=== 2. freebsd-update ===
 +
 +<code>
 +freebsd-update fetch install
 +</code>
 +
 +freebsd-update を実行しシステムを更新します。
 +
 +=== 3. 再起動 ===
 +
 +<code>
 +shutdown -r now
 +</code>
 +
 +アップデート後に再起動します。
 +
 +=== 4. 動作確認 ===
 +
 +ps でプロセスを確認するなど、動作を確認します。
 +
 +=== 5. 切り戻し ===
 +
 +もし、4. の動作確認で問題があれば、"backup" をアクティベートし、再起動します。
 +
 +<code>
 +bectl activate backup
 +shutdown -r now
 +</code>
 +
 +その後、default を削除し、backup を default にリネームすると元に戻ります。
 +
 +<code>
 +bectl destroy default
 +bectl rename backup default
 +</code>
 +
 +=== 6. 古いバックアップの削除 ===
 +
 +<code>
 +bectl destroy backup
 +</code>
 +
 +ある程度安定的に動くことが分かったならば、不要になったバックアップを削除します。
  
os/boot_environment.txt · 最終更新: 2021/12/27 10:35 by 127.0.0.1

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: 2-Clause BSD License
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki