slackware (13.37) | 2011-08-21 14:54 |
SDカードやUSBメモリなどフラッシュメモリを利用したデバイスが安価になり、こうしたデバイスにLinuxディストロをインストールする機も増えてきました。フラッシュメモリにインストールする際には、ハードディスクにインストールするときとは違った以下の3つのポイントがあります。
これらは、フラッシュメモリの書込み回数の上限があり、それを抑えるためのものです。フラッシュメモリの書込み回数の制限については、よく知られており、最近ではフラッシュメモリの一部のエリアで書込みするのではなく、フラッシュメモリ全体を均一に使用することで、耐用期間を延ばしているといわれています。しかし、こうすることにより、期間の延長が期待できます。また、フラッシュメモリのもう一つの特徴である、書込み時間が遅いことから回避するメリットもあります。 もうひとつ忘れてならないことは、フラッシュメモリをumontするときには、かならずsyncコマンドを用いることです。これもまた、書込み時間が遅いことから生じるエラーを回避するためです。以前は、syncコマンドを実行するには、次の理由がいわれてきました。
ということで、必ず3回実行してからフラッシュメモリを抜くことに心がけましょう。
Slackwareの標準では、initrdは用いません。しかしオリジナルのカーネルでは、フラッシュメモリをハードディスクのようにストレージとして用いるためのドライバが用意されていないので、mkinitrdコマンドを用いて作成する必要があります。本来ならば、フラッシュメモリにインストールしたディストロのmkinitrdコマンドを使用したいところですが、起動できないので既存のハードディスクにインストールしてあるディストロのものを使用します。
以下のmkinitrdコマンド実行例では、フラッシュメモリは/dev/sdb1で、/mnt/sdb1にmountしているものとします。
# mkinitrd -c -k 2.6.37.6-smp -r /dev/sdb1 -C /dev/sdb1 -l jp -f ext2 -o /mnt/sdb1/boot/initrd.img -s /mnt/sdb1/boot/initrd-tree/ -w 10 -m ext2:ehci-hcd:ohci-hcd:usb-storage
パラメータは、以下のとおりです。
-c 以前のinitrdはクリアして新規の作成
-k 2.6.37.6-smp フラッシュメモリで使用するカーネル
-r /dev/sdb1 ルートの位置
-C /dev/sdb1 デバイスリスト
-l jp キーボードレイアウト
-f ext2 使用するファイルシステム
-o /mnt/sdb1/boot/initrd.img 作成するinitrdファイル
-s /mnt/sdb1/boot/initrd-tree/ 作成するinitrdのツリー構造のディレクトリ
-w 10 起動の待機時間
-m ext2:ehci-hcd:ohci-hcd:usb-storage:sd_mod 埋め込むフラッシュメモリのストレージとext2のモジュールリスト
起動の待機時間は、デバイスの読込み時間によるので、場合によっては短めに設定して起動時間を短縮することができます。
initrdイメージがフラッシュメモリの/boot/以下に生成されていることを確認したら、/etc/lilo.confを編集します。大容量のフラッシュメモリを使用するので、lba32を指定します。lba32は、ハードディスクにおいて、1024シリンダ以上の箇所からブートするためのオプションです。これを抜くとワーニングが表示されるので、お呪いとして記述します。同様に、large-memoryも記述しておきます。
以下の/etc/lillo.conf例では、フラッシュメモリの/dev/sdb1にインストールした場合のものです。large-memory以下に続くbmp関連の記述は、LILO起動時にSlackwareのロゴを画面一杯に表示させて、右上に起動するOSのラベルを表示させるためのものです。
# LILO configuration sample file append=" vt.default_utf8=0" boot = /dev/sda lba32 large-memory bitmap = /boot/slack.bmp bmp-colors = 255,0,255,0,255,0 bmp-table = 60,6,1,16 bmp-timer = 65,27,0,255 prompt timeout = 1200 change-rules reset vga = 788 image = /boot/vmlinuz-huge-smp-2.6.37.6-smp root = /dev/sdb1 label = Linux read-only initrd = /boot/initrd.img label = SDLinux read-only
(/mnt/sdb1)/etc/lilo.confを記述したら、LILOを書込みます。前述したように、SDカードを/dev/sdb1として認識して、/mnt/sdb1にmountしているときに、単にliloコマンドを実行すると、起動したOS(この場合は、/dev/sda1)の/etc/lilo.confにあるものが、/dev/sda(または/dev/sda1)に記述されることになり、後で悲しい思いをすることになります。そこでchrootコマンドと同じ要領で、仮想的にルートを指定して実行します。
# lilo -b /deb/sdb -C /etc/lilo.conf -r /mnt/sdb1
場合によっては、このフラッシュメモリにSlackwareをインストールする構築環境と、実行環境が異なることがあります。自分の環境では、構築環境ではフラッシュメモリが/dev/sdc1として認識して、実行環境では/dev/sdb1として認識します。こういう場合は、最初に/dev/sdc1で起動するものとして、(/mnt/sdb1)/etc/lilo.confを設定してliloコマンドを上記のパラメータを指定して実行します。
次に、自動生成されている(/mnt/sdb1)/etc/fstabで/dev/sdc1と記述してあるところを/dev/sdb1に変更します。そして実行環境で起動してから、/etc/lilo.confで/dev/sdc1と記述してあるところを/dev/sdb1に変更して、再度liloコマンドを実行します。この時は単にliloと実行するだけでかまいません。