前回はLinuxの起動の仕組みをブートローダ段階、カーネル段階、/sbin/init段階の3つに分けて解説しました。 その際にも簡単に触れましたが、最近のほとんどのディストリビューションでは、初期化用ramdiskを用いて起動に必要なモジュールドライバを組み込むようになっています。 初期化用ramdiskは、1つの汎用的なカーネル設定であらゆる環境に対応できるようになる、ディストリビューターにとっては便利な仕組みですが、余計な仕組みが入っている分、カーネル再構築の敷居が高くなっていることも事実です。そこで、今回はこの初期化用ramdiskやその元になっているモジュールカーネルの考え方について解説すると共に、実際の初期化用ramdiskを調べてその中身を紹介しようと思います。 モノリシックカーネルとマイクロカーネル 最近では大型コンピュータから携帯機器までカバーしていますが、元々のLinux
debian etch で initrd イメージを作ろうとし、何も考えず mkinitrd を実行したのだが、ルートファイルシステムが LVMの論路ボリュームのシステムが上手く立ち上がらなかった。 しばらく熟考後、分かったことだがカーネルパラメータ root= の指定方法に問題があったようだ。 論理ボリュームを /dev/VG01/LV01 で指定するか /dev/mapper/VG01-LV01 で指定するかで正しく立ち上がるかの挙動が違う。 /dev/VG01/LV01で起動できるもの sarge initrd-tools etch yaird centos mkinitrd /dev/mapper/VG01-LV01で起動できるもの sarge initrd-tools etch yaird etch mkinitramfs fedora core 4 mkinitrd yaird
JF: Linux Kernel 2.6 Documentation: /usr/src/linux/Documentation/filesystems/ramfs-rootfs-initramfs.txt filesystems/ramfs-rootfs-initramfs.txt ramfs, rootfs, initramfs の説明 [プレインテキスト版] 原著作者: Rob Landley <rob at landley dot net> 翻訳者: Akira YOSHIYAMA <yosshy at debian dot or dot jp> バージョン: 2.6.18 翻訳日時: 2007/01/28 ramfs, rootfs and initramfs October 17, 2005 2005年10月17日 Rob Landley <rob@landley.net>
/を論理ボリューム上に置く場合は、カーネルが/をマウントする前に論理ボリュームを有効化してやる必要があります。そのため、initramfsに有効化処理を組み込んでカーネルに渡します。 genkernelを使うと自動でやってくれますが、スクラッチから作る方法もあります。 ディスク構成 Device Boot Start End Blocks Id System /dev/hda1 1 123 987966 83 Linux /dev/hda2 124 246 987997+ 82 Linux swap / Solaris /dev/hda3 247 9729 76172197+ 8e Linux LVM/dev/hda3上の論理ボリュームをルートファイルシステムにします。 ACTIVE '/dev/vg/0root' [5.00 GB] inherit論理ボリュームは/mnt/gentooに
ブートパラメータとして「initrd=」を与えると、 ブートローダがイメージをメモリ上に読み込んでカーネルに渡す。 するとカーネルはそのイメージがファイルシステムなのか、 cpio アーカイブなのか調べる。 もしファイルの magic number が cpio であれば、 ramfs としてマウントする。 そして /init が実行可能ならば、 initramfs として扱い、 /init を起動する。 以上の条件が一つでも成立しない場合、 すなわち cpio アーカイブでない場合や、 /init が実行できない (/init が存在しない) 場合は、 initrd 扱いになるので注意が必要である。 すなわち RAM ディスクとしてマウントしようとするので、 カーネルに RAM ディスクドライバが組み込まれていなかったり、 「root=/dev/ram0」カーネルパラメータを指定していな
GNU/Linux OS のブート時に、init(8) を経由せずにシェル (/bin/sh) を実行すると、 このシェル上ではジョブ制御 (job control) が行なえない。 つまりこのシェル環境は制御端末 (controlling tty) に成れない。 これがどんなに不便かというと、 自動的に止まらないプログラム (例えばオプション無しで ping を実行したときなど) を止める方法が無いわけで、 いったんそういうプログラムを動かしてしまったら最後、 CTRL-ALT-DEL で reboot させる他なくなってしまう。 そもそも、なぜ init(8) を起動する前に /bin/sh を実行したいかというと、 ミニルート (initramfs) 上で 作業を行ないたいから。 initramfs の init (これは init(8) ではなくシェル・スクリプト) の中で、 Bu
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く