ディスクレス化に関する情報

Last-modified: 2009-01-23 (金) 23:23:14
初出 2006-12-5
最終更新 2009-01-18
マルチブートするなら2段階ブートに統一してMBMを使用しましょう。MBMは、WindowsがインストールするMicrosoft謹製のMBR用ブートローダやgrubのchainloader機能の上位互換となる高機能なブートローダです。
 

当サイト内のディスクレス関連ページの案内

検索エンジンによる振り分けが必ずしもうまくいっていないので、ここに案内を載せておきます。
ディスクレスという用語が昔から持っている意味、つまりローカルストレージを使わないディスクレスブート(主としてPXEブートやNFSROOT)のことなら、当サイト内には以下の関連ページがあります。

ハードディスクレスのブートに関してなら、当サイト内には以下の関連ページがあります。
※出来れば、ディスクレスブートという用語の範囲の一読もお願いします。

その他、ディスクレスに限らず、多少なりともブートに関連した内容なら、以下の関連ページがあります。

NFS以外のセキュアなファイルシステムの採用についての検討

(ディスクレス化キットについて)NFS以外のセキュアなファイルシステムの採用についての検討

 

rootファイルシステムはramdiskとし、ネットワーク上の読み込み専用なイメージファイルから必要なファイルを随時取得するという方法なら、あらゆるネットワークファイルシステムがNFSの代替手段として採用できます。しかし、NFSと同様に読み書き、実行、排他ロックができて信頼性の高いファイルシステムとなると選択肢は殆どないのが実際です。聞いてがっかりとされるかもしれませんが、NFSと同等に使用できるセキュアなネットワークファイルシステムとして一番に挙げるべきなのは、「VPN+NFS」だと思います。(2007-8-23追記) まあ実際には既存のVPNを活用したいなどの特定のニーズでもない限り、NFSv4を使った方がいいと思います。

VPN+NFS

disklesslinux-kitの方式はどんなVPNにも対応できる筈です。VPNはLayer-3レベルであれば何でも構いません。実際の要件に合わせて選択すればいいと思います。VPN化して特に不具合は発生しないと思います。試すまでもなく「出来るに決まってる」検討案です。

shfs

(以下の内容は2006年秋時点のものです)
main treeに取り込まれていない上に強力な支援母体もなく、更新も滞っているので、現時点では使えないと思います。

 

※ 上記評価は複数のカーネルで試用した上で記述しています。

sshfs-fuse

(以下の内容は2006年秋時点のものです)
sshfs以外にも様々なhogehoge-fuseファイルシステムが挙げられると思いますが、fuseはNFSと同等に使用できるようには設計されていませんので、一応検討外ということになります。ファイルをやりとりするだけの用途には十分ですが、直接rootファイルシステムとして使用することは出来ません。裏技としてunionfsと組み合わせると面白いんじゃないかと思いますが、私はまだ試していません。(2007-8-23追記) unionfsと組み合わせてのディスクレス運用はまず可能だと思いますが、データがサーバ側のストレージ上に高頻度でコミットされるディスクレス運用のデータ保全およびセキュリティ上のメリットが失われるのでこの案を採用する意味は薄いと思います。

 

※ 上記評価は複数のカーネルで試用した上で記述しています。当方ではunionfsとの組み合わせは未だ試していませんが、initrd内でmountするテストはおこなっています。

v9fs

(以下の内容は2006年秋時点のものです)
main treeに取り込まれているので、是非試してみたいと思っていますが、今のところまだ試していません。

openAFS

(以下の内容は2006年秋時点のものです)
IBMが推しているので試す価値はあると思いますが、フルスペックでmain treeに取り込まれないと熱心には取り組めません。

各OS毎のディスクレス化についての情報

以下は全ていわゆるPXEブート、nfsルート、nfsrootとかいわれる方式によるdiskless化についてです。

Solaris

書けば長くなるので詳細は省略します。
調査・開発・検証の結果はsourceforgeのプロジェクトのホームページからダウンロードできるキット(最新版のキット名はdlkit2)に反映されています。
☆私がディスクレス化をおこなったことのあるバージョン

  • Solaris 9 x86 (リリースは様々)
    • ローカルHDDにインストールした環境を手作業でディスクレス化していました。
  • Soalris 10 x86 3/05 (初期リリース)
  • Solaris 10 x86 1/06 (update1)
  • Solaris 10 x86 6/06 (update2)
  • Solaris 10 x86 11/06 (update3)
  • Solaris 10 x86 8/07 (update4)

FreeBSD

私がディスクレス化をおこなったことのあるバージョンは
FreeBSD 5.4
FreeBSD 6.1・・・・結果はNG(lockが駄目)
FreeBSD 6.2
です。

 

FreeBSDにおけるNFSROOT化は非常に簡単です。FreeBSDでのディスクレスブートについては、多くの媒体から沢山の情報が見つかります。でも多分、それら媒体から得た方法よりも実際にディスクレス化する方法はもっと簡単です。というのは、大概、FreeBSDのディスクレスブートについての情報は、多数のクライアントを集中管理する手段として記述されていることが殆どだからです。クライアントを1台だけディスクレスで起動するのであれば、それら媒体に記述されている内容の殆どは不用です。(2008-1-31追記) dhdp.confにfilename "pxeboot";とoption root-path "ipaddr:yournfsrootpath";を書く以外に殆ど作業は必要ありません。

 

もし、FreeBSDとLinuxが世界中で同じような人気を持ち、同じような使い勝手で使えたとしたら、私はLinuxではなく、FreeBSDをメインの常用OSとしていたことでしょう。

 

ただし、FreeBSDのディスクレスブートの短所として、ディスクレスブートの仕組みが独自に作りこまれている為、Linux等の他のOSとの(ネットワークブートでの)マルチブートが難しい(母艦のdhcpdを設定変更しなければならない)という面があります。

 

私はFreeBSDのディスクレス化に関しては全てLinuxを母艦として使用しています。
試したところFreeBSD6.1でのnfsroot化はNGでした。多分FreeBSD6.0も同様ではないでしょうか。
FreeBSD6.2では問題が解消され、再びディスクレス環境を問題なく使用できるようになりました。

Linux

私がディスクレス化をおこなったことのあるディストリビューション,バージョンは

等です。

 

また他に、

  • Ubuntu 7.1・・・・haldaemonを起動するとnfsマウントがumountされるバグがあります
  • Debian sarge
  • Debian etch

もディスクレス運用しています。
ただしこれらは元々ディスクレス化に対応しています。

ディスクレス化キットについてのFAQ

Fedora Core Linux ディスクレス化キットについてのFAQ

直接ディスクレス環境を構築できる専用のインストーラは作らないの?

簡単に言うと、それは私の役目ではないと思っています。

 現状のFedora Core Linuxディスクレス化キットは、一旦ローカルなHDDにインストールされた環境をユーザが手動で母艦にコピーし、それに対してキットを適用してディスクレス化するアプローチを採っています。直接ディスクレス環境を構築できる専用インストーラがあれば、確かに環境構築が楽になると思いますし、それこそが真のディスクレスだとは思います。しかし、そのようなインストーラを製作しても、何か技術的な検証価値が生まれるわけではありません。またディストリビューションの本家インストーラがあるのに、別立てでインストーラを製作するのは大変に労力の無駄です。

 もし、ディストリビューションとして公式にディスクレスブートでのディスクレスマシンへのインストールをサポートするなら、運用時のことも考慮して、インストーラのみならず、mkinitrdやinstallkernel等のカーネル更新用スクリプト、initrd内で使用するstaticなシェル(nash)等もディスクレスブートに対応させる必要があります。逆に言えばそこまで対応できれば、ディスクレス運用する場合と普通にローカルHDDで運用する場合の違いが殆どなくなるでしょう。

 とは言いながら、私自身はそのような段階を目指しているわけではありません。

その他

RedHat系のカーネル再構築手順

先日(確か2006-12月頃)、アットマーク・アイティに、私がおこなっているカーネル再構築手順に非常によく似たものが掲載されました。いい記事が掲載されたと思っていたのですが、何故か削除されてしまったらしく、今は掲載されていないようです。
そこで代わりにここに私流のRedHat系でカーネルを再構築する手順をごく簡単に掲載しておきます。ソースの変更はおこなわず、構成の変更のみおこなう場合の手順です。わかりやすいように絶対パスで記述します。

# rpm -ivh kernel-*.[arch].rpm
# rpm -bp /usr/src/redhat/SPECS/kernel-2.6.spec --target=* # 適宜各自の環境に合わせる
# mv /usr/src/redhat/BUILD/kernel*/linux-* /usr/src # 適宜各自の環境に合わせる
# cd /usr/src/linux-* # 適宜各自の環境に合わせる
# make xconfig # 構成をカスタマイズ
# vi Makefile # バージョンをカスタマイズ
# time make bzImage modules modules_install
# find /lib/modules/[kernel-version]/kernel -name "*.ko" -exec strip -S {} \; -print
↑ここではなく、カーネルツリーに対してstripを施す手もある。つまりfind . -name・・ってこと。
(rpm化しない場合は自分でstrip処理を施した方がいいと思います)
# /sbin/installkernel [kernel-version] arch/i386/boot/bzImage System.map

ディスクレスブートという用語の範囲

ここで個人的な意見を述べます。OneCDブート、CFブート、USBメモリブート等、ハードディスクレスなブートをディスクレスブートと呼ぶ人がいます。しかし私はこれには違和感を覚えます。

 

CFもUSBメモリもコンピュータにとってはハードディスクと同等のローカルストレージの一種に過ぎません。本来、ディスクレスブートという用語の中で使われているディスクという言葉はローカルストレージを端的に表す言葉として使われたに過ぎません。当時はOneCDブート、CDブート、USBメモリブート等がなく、ローカルストレージからブートするということは、ほぼ、ハードディスクからブートすることでした。”ディスクからブートすること”がコンピュータのブート方式としてネットワークブートの対比だと素直に定義づけられた時代でした。そこで逆にネットワークブートを端的に表す表現としてディスクレスブートという用語がよく使われるようになりました。

 

この背景説明に納得される人は多いと思います。今でも「ディスク=ローカルストレージの別名」という考え方が廃れたわけではありません。そういう中でローカルストレージからのブートなのに、ハードディスクからブートしていないことを理由にディスクレスブートと呼ぶやり方には違和感を覚えます。それらはハードディスクレスブートと呼ぶべきだと思います。英語にもそういう呼び方があります。

 

ご要望、ご意見、質問を下のフォームにどうぞ
(でもここより、掲示板書き込みフォームのページに書いて頂いた方が気づき易いと思います。)