FreeBSD Daily Topics

2010年10月11日nextboot(8)と同様の操作をブートローダレベルで実施する機能導入、パーティション切り替え起動可能

heads-up

gptboot rewrite for technical boot

current - FreeBSDにはnextboot(8)というコマンドがあります。これは次に起動する時にどのカーネルを使うか、どのオプションを使用するかを指定するものです。たとえばmake installworldを実施するために次の起動だけはシングルユーザモードで起動してほしい場合、次のようにnextboot(8)コマンドを実行します。

次の起動はいつも使っているカーネルで、シングルユーザモードで起動する、という指定
nextboot -o "-s" -k kernel

コマンドを実行すると次のようなファイル/boot/nextboot.confが作成され、次の起動はシングルユーザモードになります。端末の前で選択画面を待つ必要がなく便利です。この機能は一回のみ有効で、次に起動したときには/boot/nextboot.confは削除され、以降の再起動には影響を与えません。

リスト コマンドを実行すると作成される/boot/nextboot.confファイル
nextboot_enable="YES"
kernel="kernel"
kernel_options="-s"

ZFSの移植者でありGEOMプロバイダ、GPT周りの開発で知られるPawel Jakub Dawidek氏が、こうした操作をブートローダのレベルで実現したいとして、gptbootまわりを大幅に書き換えたことを紹介しています。パッチはhttp://people.freebsd.org/~pjd/patches/gptboot.patchで提供されています。

まずPawel Jakub Dawidek氏はシステムを2つのパーティションに分けておき、システムのアップグレードに利用するシーンを紹介しています。起動しているパーティションでアップグレードされたイメージを作成し、dd(1)でもうひとつのパーティションへ上書き。次はdd(1)で書き込んだ方から起動し、成功すればそのパーティションを基本パーティションに、従来のパーティションをdd(1)でアップグレード版を書き込むパーティションとして使用する方法を紹介しています。dd(1)したパーティションからの起動に失敗した場合は、従来のパーティションから再起動するという仕組みです。この仕組みは継続的で安全なアップグレードを実施する方法として組み込み機器などで使われています。Chrome OSも同様の仕組みを採用しています。

gptbootまわりの大幅変更はこれを実現するためのもので、まず次の新しいGPT属性値を導入したことが紹介されています。

  • bootme - ブート可能パーティション
  • bootonce - 一度だけブートするパーティション
  • bootfailed - このパーティションからのブートには失敗したことを示す

こうした属性の使用例として次のコマンドもサンプルとして掲載されています。

GPTの新しい属性を使用する例
gpart set -a bootme -i 3 ada0
gpart set -a bootonce -i 4 ada0
gpart unset -a bootfailed -i 2 ada0

これら変更はすでに9-CURRENTにマージされています。

おすすめ記事

記事・ニュース一覧