LinuxでThinkPad X220のBIOSをアップデートする
概要
Linuxを使ってThinkPad X220のBIOSをアップデートできたので方法を説明します。
ThinkPadのBIOSをアップデートしようと調べると、Windows用の説明が多く、非Windowsな環境での方法についての説明が少なかったので、参考資料として記録します。
ThinkPad X220 + Arch Linuxでの説明になりますが、他のThinkPadや他のLinuxディストリビューション、BSD系でも同様の方法でできると思います。
大まかな流れは次のようになります。
1. 起動CD用BIOSアップデートユーティリティを入手する
アップデートしたいBIOSをダウンロードします。このとき必ず「起動CD用」と書かれているものを選んでください。現時点でのThinkPad X220用最新BIOSは BIOS アップデート ユーティリティ (起動CD用) (Windows 8 32bit, 64bit/ 7 32bit, 64bit/ Vista 32bit, 64bit/ XP) - ThinkPad X220, X220i, X220 Tablet になります。
2. CD用イメージからUSBメモリー用イメージに変換する
入手したイメージはCD用なので、これをUSBメモリーから起動できるイメージに変換します (CDに書き込んで使う場合はこのままで構いません)。
2-1. 変換する
ここでは変換するためのツールとして geteltrorito.pl を使います。Arch Linuxの場合は次のコマンドでインストールできます。
yaourt -S geteltorito
ダウンロードしたBIOSアップデートユーティリティのファイルが 8duj28jp.iso だとします。これを bios.img というUSB用イメージに変換するには次のように指定します。
geteltorito.pl -o bios.img 8duj28jp.iso
すると次のように表示され、bios.img が作成されます。
Booting catalog starts at sector: 20 Manufacturer of CD: NERO BURNING ROM Image architecture: x86 Boot media type is: harddisk El Torito image starts at sector 27 and has 63488 sector(s) of 512 Bytes Image has been written to file "bios.img".
2-2. USBメモリーのデバイス名を調べる
USBメモリーを差し込みます。もし自動マウント(中身が表示できる状態)になったらマウントを解除してください。
USBメモリーのデバイス名を調べます。たとえばUSBメモリーを差し込んだすぐ後にシェルから次のように入力すると表示されていることがあります。
dmesg | tail
結果
[ 314.012890] scsi host6: usb-storage 2-1:1.0 [ 314.013209] usbcore: registered new interface driver usb-storage [ 314.022851] usbcore: registered new interface driver uas [ 315.016847] scsi 6:0:0:0: Direct-Access Generic Flash Disk 8.07 PQ: 0 ANSI: 4 [ 315.019114] sd 6:0:0:0: [sdb] 62566400 512-byte logical blocks: (32.0 GB/29.8 GiB) [ 315.019789] sd 6:0:0:0: [sdb] Write Protect is off [ 315.019796] sd 6:0:0:0: [sdb] Mode Sense: 23 00 00 00 [ 315.020531] sd 6:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 315.024735] sdb: sdb1 [ 315.026904] sd 6:0:0:0: [sdb] Attached SCSI removable disk
この場合、デバイス名は sdb です。
デバイス名を間違えると使用中の HDD の内容を壊したりしてしまいますので十分に注意してください。
2-3. USBメモリーに書き込む
dd コマンドで先ほど作成した bios.img をUSBメモリーに書き込みます。管理者権限で以下を実行します。
dd if=bios.img of=/dev/デバイス名 bs=512k
私の環境ではデバイス名は sdb だったので以下のように実行しました。
dd if=bios.img of=/dev/sdb bs=512k
結果
62+0 レコード入力 62+0 レコード出力 32505856 bytes (33 MB, 31 MiB) copied, 4.40096 s, 7.4 MB/s
3. USBメモリーで起動してBIOSをアップデートする
USBメモリーを挿入したままで再起動します。
ThinkPadの初期画面でF1キーを押してBIOS設定画面に入ります。Startupタブで以下を設定します。
F10キーを押して保存して再起動します。
再びThinkPadの初期画面が表示されるのでF12キーを押してBoot Menuを表示させます。USBメモリーを選んで起動します。USBメモリーは、たとえば「USB HDD: Generic Flash Disk」のように表示されます。
無事にUSBメモリーから起動できるとメニューが表示されますので「システム・プログラムの更新」を選択します。電源ケーブルをつないでいるかなどいくつかの質問がありますので確認しながら進めるとBIOSアップデートが開始されます。
以上でBIOSをアップデートできるはずです。
Puppy Linuxでnmblookupを使う
nmblookupとは
Puppy LinuxからLAN上のWindowsマシンにアクセスしようとする時、IPアドレスが必要になります。
Windowsのマシン名からIPアドレスを探すコマンドがnmblookupです。
しかし、単純にnmblookupを実行しても "name query failed to find name
Puppy Linuxでnmblookupを使うためには、次の2つを実行する必要があります。
- ファイアウォールのポートを開く
- nmblookupに-rオプションをつけて実行する
1. ファイアウォールのポートを開く
UDPポート137を開きます。
※以下の手順はPuppy LinuxでSambaなどのサービスを提供していない場合の設定です。サービスを提供している場合には、それに応じた設定にする必要があります。なお、現在の設定は/etc/rc.d/rc.firewallの先頭近くに「PERMIT="22/tcp"」のような形で入っています。
1. メニュー → ネットワーク → Linux-Firewall ファイアウォール をクリックします。
2. 「custom」を選び、OKをクリックします。
3. 「other」に "*" マークをつけ、OKをクリックします。
4. テキストボックスに「137/udp」と入力し、OKをクリックします。
5. 「ANY」を選び、OKをクリックします。
6. NOをクリックします。(Puppy Linuxをインターネット接続ルーターにしている場合はYesにします。)
7. テキストボックスを空欄にしたままOKをクリックします。
8. Yesをクリックします。設定がテストされます。「[PASSED]」と表示されればOKです。
9. Yesをクリックします。設定がインストールされます。
Puppy LinuxをUSBメモリーにインストールした
Puppy LinuxをUSBメモリーにインストールして使い始めました。
USBメモリーにインストールする利点・欠点
- 利点
- 既存のOS環境を壊さないため気軽に使える
- 出先のPCでいつもの環境が使える
- 欠点
Puppy Linuxでは起動時にファイルをUSBからメモリー上に読み込んで動作するため、動作中にUSBメモリーを読み込むことはほとんどなく、読み書き速度はそれほど問題になりません。
また、Puppy Linuxのシステムファイル(ISOファイル)は5.7.1日本語版で134MBなので、2〜4GBのUSBメモリーがあれば余裕で動きます。
インストール方法
どちらの方法でインストールしても、ほとんど同じです。(違いがありますが、後述します。)
2の方法はCD-Rなどを作成する手間が必要なく、自分も2の方法でインストールしたため、ここでは2の方法を説明します。
Windows上からUSBメモリーにインストールする
1. ISOファイルを取り寄せる
はじめにインストーラのISOファイルを取り寄せます。私はPuppy Linux 日本語版のページからprecise-571JP.isoをダウンロードしました。
2. UNetbootinを取り寄せる
次に、ISOファイルを書き込むツールであるUNetbootinをダウンロードします。UNetbootin, Universal Netboot Installer プロジェクト日本語トップページ - OSDN
3. UNetbootinを実行し、USBメモリーに書き込む
「ディスクイメージ」欄にISOファイルをドラッグ&ドロップするか、ファイルの場所を指定します。
タイプを「USB ドライブ」、ドライブに実際のUSBドライブ名を指定し、OKをクリックします。
CD-Rなどからインストールした場合との違い
UNetbootinでインストールすると、ファイルがUSBメモリーの直下に展開されます。
CD-Rなどの起動メディアからインストールすると、USBメモリーの中に任意のディレクトリを作り、その中にインストールすることができます。こちらの方法では、複数のバージョンのPuppy Linuxをインストールすることができます。
(UNetbootinでインストールしたときのUSBメモリーの状態。USBメモリーの直下にファイルが展開されている。)