initrdファイルを完成させる

 initrdファイル内に自分Linuxと同一のデバイス・ファイルとrsyncコマンドを導入し,ファイル・システムをマウントするためのfstabファイルを作成,gzip圧縮を行って自分Linux用のinitrdファイルを完成させる。

 ただし,ひな形になるinitrdファイルは,8Mバイトの大きさのファイル・システムとして作成されている。自分Linuxでは256MバイトのRAMディスク領域を確保するため,同じ大きさのファイル・システムを作成し,その中で自分Linux用のinitrdファイルを完成させる。

(1)ファイル・システムを作成
 図7のようにして,ファイル内に256MバイトのExt3でフォーマットされたファイル・システムを作成する。ファイル名は完成したファイルと区別しやすいように「ramdisk」とした。このramdiskファイルを/mnt/loop0ディレクトリにマウントし,ファイルを書き込める状態にする。

図7 256Mバイトのファイル・システムを作成
図7 256Mバイトのファイル・システムを作成
[画像のクリックで拡大表示]

# mount /dev/loop0 /mnt/loop0

(2)必要なファイルをコピー
 前半で作成したinitrdファイルをファイルやディレクトリの属性を変更せずにすべてコピーする。

# cp -a /mnt/ram/* /mnt/loop0

 次に,RAMディスク上にルート・ファイル・システムを転送する際やルート・ファイル・システムとして稼働させる際に必要なディレクトリをすべて作成する(図8)。ちなみに図8の3行目のFMディレクトリが,rsyncコマンドによりルート・ファイル・システムを転送する際に一時的にマウントする場所になる。

図8 起動時に必要なディレクトリの作成
図8 起動時に必要なディレクトリの作成
[画像のクリックで拡大表示]

 ディレクトリを作成したら,本講座第2回で作成した自分Linux用デバイス・ファイルを/devディレクトリをコピーする。

# cp -aRf /usr/local/src/origdev/dev/*/mnt/loop0/dev/

 前述したように,linuxrcスクリプトの「mkdevices /dev」により,/proc/partitionsファイルに書き込まれている情報に従ってブロック・デバイスを作成する。しかし何らかの原因で/proc/partitionsファイル内にUSBメモリーに割り当てられたデバイス名(/dev/sda)がなかった場合,デバイス・ファイルが作成されない。そのようなトラブルを避けるために自分Linux用のデバイス・ファイル全体をコピーしている。

 最後にrsyncコマンドをコピーし,

# cp -a /usr/local/src/origsoft/rsync-2.6.3/rsync /mnt/loop0/bin

図9のfstabファイルを/mnt/loop0/etcディレクトリ配下に作成する。

図9 fstabファイル
図9 fstabファイル
起動時のファイル・システムのマウントに用いられる。
[画像のクリックで拡大表示]

(3)RAMディスクのイメージ化
 必要なすべてのファイルをコピーしたので,RAMディスクのイメージとして完成させる。その前にinitrdファイルをアンマウントしておく。

# cd <br># umount /mnt/ram

 続けて,ramdiskファイルも,

# umount /mnt/loop0

のようにアンマウントする。さらにループバック・デバイスとして割り当てた/dev/loop0を開放する。開放しないと次の作業時に/dev/loop0が使用中のままとなり,利用できない。

# /sbin/losetup -d /dev/loop0

 ここまでの作業が終わったら,ramdiskファイルをgzipにより圧縮し,/usr/local/src/origdev/bootディレクトリ配下に圧縮したファイルを格納する。

# gzip -c9 /usr/local/src/origlinux/ramdisk \ <br>> /usr/local/src/origdev/boot/ramdisk.img

 ramdiskファイルのイメージは前述したように「ramdisk.img」とした。256Mバイトのファイル・システムとして作成したが,それよりもかなり少ない容量のファイルしか格納していないため,ファイル・サイズは1Mバイト程度になる。