LinuxでThinkPad X220のBIOSをアップデートする

概要

Linuxを使ってThinkPad X220のBIOSをアップデートできたので方法を説明します。

ThinkPadBIOSをアップデートしようと調べると、Windows用の説明が多く、非Windowsな環境での方法についての説明が少なかったので、参考資料として記録します。

ThinkPad X220 + Arch Linuxでの説明になりますが、他のThinkPadや他のLinuxディストリビューションBSD系でも同様の方法でできると思います。

大まかな流れは次のようになります。

  1. 起動CD用BIOSアップデートユーティリティを入手する
  2. CD用イメージからUSBメモリー用イメージに変換する
  3. USBメモリーで起動してBIOSをアップデートする

1. 起動CD用BIOSアップデートユーティリティを入手する

アップデートしたいBIOSをダウンロードします。このとき必ず「起動CD用」と書かれているものを選んでください。現時点でのThinkPad X220用最新BIOSBIOS アップデート ユーティリティ (起動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タブで以下を設定します。

  • UEFI/Legacy Boot: Both
  • UEFI/Legacy Boot Priority: Legacy First

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つを実行する必要があります。

  1. ファイアウォールのポートを開く
  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をクリックします。設定がインストールされます。


2. nmblookupに-rオプションをつけて実行する

端末ウィンドウから「nmblookup -r 」のように実行します。「-r」はポート137を使う指定です。たとえばHOGEという名前のマシンを探す場合には「nmblookup -r HOGE」を実行します。

Puppy LinuxをUSBメモリーにインストールした

Puppy LinuxUSBメモリーにインストールして使い始めました。

USBメモリーにインストールする利点・欠点

  1. 利点
    1. 既存のOS環境を壊さないため気軽に使える
    2. 出先のPCでいつもの環境が使える
  2. 欠点
    1. 一般的に内蔵HDD/SSDに比べてUSBメモリーは読み書きが遅い
    2. 一般的に内蔵HDD/SSDに比べて容量が少ない

Puppy Linuxでは起動時にファイルをUSBからメモリー上に読み込んで動作するため、動作中にUSBメモリーを読み込むことはほとんどなく、読み書き速度はそれほど問題になりません。

また、Puppy Linuxのシステムファイル(ISOファイル)は5.7.1日本語版で134MBなので、2〜4GBのUSBメモリーがあれば余裕で動きます。

インストール方法

USBメモリーへのインストール方法は主に2つあります。

  1. CD-Rなどのメディアでブートし、USBメモリーにインストールする
  2. Windows上から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をクリックします。

4. USBメモリーから起動する

いちどPCの電源を切り、USBメモリーから起動します。もし内蔵HDDから普段使っているOSが起動してしまった場合には、BIOSの起動ドライブ設定で内蔵HDDよりUSBメモリーの起動順を先にします。

CD-Rなどからインストールした場合との違い

UNetbootinでインストールすると、ファイルがUSBメモリーの直下に展開されます。

CD-Rなどの起動メディアからインストールすると、USBメモリーの中に任意のディレクトリを作り、その中にインストールすることができます。こちらの方法では、複数のバージョンのPuppy Linuxをインストールすることができます。


(UNetbootinでインストールしたときのUSBメモリーの状態。USBメモリーの直下にファイルが展開されている。)