SDカード/USBメモリへのインストール

SDカードやUSBメモリなどフラッシュメモリを利用したデバイスが安価になり、こうしたデバイスにLinuxディストロをインストールする機も増えてきました。フラッシュメモリにインストールする際には、ハードディスクにインストールするときとは違った以下の3つのポイントがあります。

  • ファイルシステムはext2を選択
  • /tec/fstabのオプションにはnoatimeを記述
  • syslogを停止

これらは、フラッシュメモリの書込み回数の上限があり、それを抑えるためのものです。フラッシュメモリの書込み回数の制限については、よく知られており、最近ではフラッシュメモリの一部のエリアで書込みするのではなく、フラッシュメモリ全体を均一に使用することで、耐用期間を延ばしているといわれています。しかし、こうすることにより、期間の延長が期待できます。また、フラッシュメモリのもう一つの特徴である、書込み時間が遅いことから回避するメリットもあります。 もうひとつ忘れてならないことは、フラッシュメモリをumontするときには、かならずsyncコマンドを用いることです。これもまた、書込み時間が遅いことから生じるエラーを回避するためです。以前は、syncコマンドを実行するには、次の理由がいわれてきました。

  • sync 1回目 貴方のため
  • sync 2回目 私のため
  • sync 3回目 念のため

ということで、必ず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と実行するだけでかまいません。