2010年7月 8日 (木)

ESX 4.0上のVMのバックアップ方法を考えてみる

要件

  1. 別サーバ(Windows 2003)のタスクスケジューラに登録されたバッチファイルで実行
  2. バッチファイルにて、バックアップ前にVMをシャットダウン
  3. バッチファイルにて、バックアップ取得後VMを起動
  4. バックアップ先はできればCIFS(SMB)、ダメならNFS
  5. バックアップ先はバックアップ時だけマウントする、バックアップ後にアンマウント(バックアップ先が停止する場合があるので)
  6. バックアップ時に人の操作は不要であること(sshを使う場合はパスワード認証は無しとする)
  7. バックアップ失敗時はWindowsのイベントログにエラーを吐くこと

参考URL
ESX4.0でsmbを使う
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1010819
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=242

パスワード無しでESXにsshで接続する
http://communities.vmware.com/docs/DOC-8890

ESXi/ バックアップ運用
http://www.masatom.in/pukiwiki/VMware/ESXi/%A5%D0%A5%C3%A5%AF%A5%A2%A5%C3%A5%D7%B1%BF%CD%D1/

| | コメント (0)
|

2010年7月 3日 (土)

ESX 4.0上のWindows 2000 ServerのVMがBlue Screenで落ちる

P2VでESX4.0に乗せたWindows 2000 Advanced Server SP3のVMがBlue Screenで落ちる。 いろいろ調べたところ、

  1. ESXのパッチが出てる。(VMware Toolsのアップデータも必要?)
  2. PAEオプションを外すと安定する場合がある。

ような感じ。とりあえず、両方試してみるかな。


VMware ESX 4.0, Patch ESX400-200911201-UG: Updates Core

Fixes an issue where virtual machines sometimes fail with a blue screen when hardware acceleration is enabled fully. Virtual machine fails displaying a blue screen when you run certain applications with the hardware acceleration enabled fully in Windows guest operating system. This is an issue with the SVGA driver, which is resolved in this release.


VMware ESX 4.0, Patch ESX400-201006201-UG: Updates the VMware ESX 4.0 Core and CIM components

A Physical Address Extension (PAE) enabled multiprocessor Windows 2000 virtual machine might stop responding on reboot, or fail randomly.


VMware ESXi 4.0, Patch ESXi400-201006201-UG: Updates Firmware

A Physical Address Extension (PAE) enabled multiprocessor Windows 2000 virtual machine might stop responding on reboot, or fail randomly.


Windows 2000 virtual machine fails with "Stop 0x0000001a" when using more than 4GB of memory

  • After using the PAE switch in a Windows 2000 virtual machine it bluescreens with "Stop 0x0000001a"
  • Moving back to 4GB stabilizes the virtual machine

There is a known Microsoft PAE issue. See Microsoft article 885272 for more details and apply the hotfix:
http://support.microsoft.com/kb/885272/en-us


A Microsoft Windows kernel bug causes the Windows system to fail/crash often issuing the error STOP 0x50

ESX 4.x

  • monitor_control.disable_eagervalidate_wide = TRUE
  • monitor_control.disable_patchseteagervalidate = TRUE (Required only for mulitprocessor virtual machines, also known as SMP virtual machines)

Random BSOD on Virtual Server

2000 Advanced Server SP4だが、PAEオプションを外すと安定したらしい。↑のMSのパッチはSP4に含まれていたらしい。

検索用キーワード: BSOD PAE STOPエラー VMware ESX


2010/07/08 追記

どちらを適用してもBSODで落ちることがなくなりました。いい感じです。

 

| | コメント (0)
|

2009年12月11日 (金)

Apacheが "Digest: generating secret for digest authentication ..."でハングする

OS起動時はApacheが正常に起動するのですが、OS起動後に手動でApacheを再起動すると上記メッセージをerror_logに出力したところで止まってしまいます。

いろいろと調べたところ、こちらと同じように、Apacheが起動しない時にpsコマンドで見ると、random_readで止まっています。

# ps ax -o pid,comm,wchan  | grep httpd
 1815 httpd           random_read
entropy_availも少ないようです。
# cat /proc/sys/kernel/random/entropy_avail
51
対策としては、rng-toolsをインストールすればよいらしいのですが、
# apt-get install rng-tools

Trying to create /dev/hwrng device inode...
.udevdb or .udev presence implies active udev.  Aborting MAKEDEV invocation.
Starting Hardware RNG entropy gatherer daemon: (Hardware RNG device inode not found)
/etc/init.d/rng-tools: Cannot find a hardware RNG device to use.
invoke-rc.d: initscript rng-tools, action "start" failed.
デバイスが無いようで起動してくれません。
こちらを参考に/etc/default/rng-toolsに
HRNGDEVICE=/dev/urandom
を追記し、
# /etc/init.d/rng-tools start
Starting Hardware RNG entropy gatherer daemon: rngd.
とすると動きました。entropy_availも問題ないようです。
# cat /proc/sys/kernel/random/entropy_avail
1991
Apacheも正常に起動するようになりました。

| | コメント (0) | トラックバック (0)
|

2009年9月10日 (木)

rep2を並列ダウンロードで高速化してみる

rep2(現在はp2)を1.8.40から1.8.58にバージョンアップしていると、conf_admin.inc.phpに気になるコメントを見つけました。

// pecl_http が利用できる場合、HttpRequestPool による並列ダウロードを有効にする(※PHP5以上のみ可)
// この設定を有効にした場合は、$_conf['dlSubjectTotalLimitTime*'] の設定が無効となる。
// (off:0, on:1, モバイル時のみon:3) // cli:2 は未対応
$_conf['expack.use_pecl_http'] = 0; // (0)

そもそも今回玄箱からSheevaPlugに変えたのはrep2を高速化させるためでした。たしかにCPUクロックの向上とメモリの増加によりPHP自体の高速化はできたものの、[更新]ボタンを押した際のレスポンスは大して速くなりませんでした。どうやら2chのサーバからのダウンロードがボトルネックになっているようで、高速化をあきらめていましたが、並列ダウンロードとなればさらなる高速化が期待できます。早速pecl_httpを使えるようにしてみたいと思います。

とりあえずは、peclでinstallを試してみたものの

# pecl install pecl_http
pecl.php.net is using a unsupported protocal - This should never happen.
install failed

エラーが出てインストールできません。仕方がないのでソースからビルドします。

$ wget http://pecl.php.net/get/pecl_http-1.6.5.tgz
$ tar zxf pecl_http-1.6.5.tgz
$ cd pecl_http-1.6.5/
$ ./configure

checking for curl/curl.h... not found
configure: error: could not find curl/curl.h

curl.hが無いみたいです。

$ su -
# apt-get install libcurl3 libcurl3-gnutls
# apt-get install libcurl4-gnutls-dev
# exit
$ ./configure

checking for curl/curl.h... found in /usr
checking for curl-config... found: /usr/bin/curl-config
checking for curl version >= 7.12.3... 7.18.2

creating libtool
appending configuration tag "CXX" to libtool
updating cache ./config.cache
creating ./config.status
creating config.h

今度はうまくいきました。それでは、makeします。

$ make

Build complete.
Don't forget to run 'make test'.
$ su -
# make install
Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20060613/
Installing header files:          /usr/local/include/php/

# ls /usr/local/lib/php/extensions/no-debug- non-zts-20060613/
eaccelerator.so http.so

インストールされたようですので、php.iniを修正します。

# vi /usr/local/lib/php.ini

; Directory in which the loadable extensions (modules) reside.
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613/

extension=http.so

conf_admin.inc.phpを修正前後でどれぐらい応答時間が違うか「最近読んだスレ」の[更新]で測定してみます。(最近読んだスレの記録数は1000にしています。)

$_conf['expack.use_pecl_http'] = 0の場合

192.168.1.xxx - - [10/Sep/2009:21:36:51 +0900] "GET ..... HTTP/1.1" 200 214782 20

$_conf['expack.use_pecl_http'] = 1の場合

192.168.1.xxx - - [10/Sep/2009:21:40:11 +0900] "GET ..... HTTP/1.1" 200 214782 14

20秒→14秒...1.43倍,うーん微妙。

| | コメント (0)
|

2009年8月30日 (日)

SheevaPlug 請求書が来ました

8月28日にFedExから請求書が来ました。どうやらこちらのDAIさんからのコメントでも指摘があったように輸入消費税のようです。請求金額は\1,200で内訳は、

  • 関税 \0
  • 消費税 \600
  • 地方消費税 \100
  • 手数料 \500

となっていました。
コンビニか銀行振り込みで10日以内に支払いをしなさいとのことでしたので、コンビニで早速支払ってきました。ちなみに、銀行振り込みだと手数料がかかるようです。

| | コメント (0)
|

2009年8月29日 (土)

SheevaPlug Apacheインストール

Apacheはaptでインストールしても良いのですが、今使っている玄箱と比較したいので、いつものようにセルフビルドする方針で行きます。

  1. OpenSSLのヘッダーファイルをインストールします
    # apt-get install libssl-dev
  2. 作業用ディレクトリを作成します。(/opt/srcallにダウンロードしたソースファイル、/opt/srcをビルド作業ディレクトリにしています)
    # cd /opt
    # mkdir srcall
    # mkdir src
    # chmod 777 srcall src
  3. Apache 2.0.63のソースをダウンロードした後、ビルドしてインストールします。
    $ cd /opt/srcall
    $ wget http://www.meisei-u.ac.jp/mirror/apache/httpd/httpd-2.0.63.tar.gz
    $ cd ../src
    $ tar zxf ../srcall/httpd-2.0.63.tar.gz
    $ cd httpd-2.0.63
    $ ./configure --disable-ipv6 --disable-include --disable-env --disable-status --disable-autoindex --disable-asis --disable-imap --enable-auth-digest --enable-ssl --with-ssl=/usr
    $ su -
    # cd /opt/src/httpd-2.0.63
    # make install

httpd.confの設定などは後回しにします。とりあえずPHPが必要なのでこちらもセルフビルドします。 また、Apache2.0.63のconfigure,makeの時間をtimeコマンドで計測してみました。なお、比較対象は無印の玄箱(PowerPC 200MHz, メモリ64MB, OS:純正OS)です。

configure

sheevakuro-box
real 3m 47.402s 9m 32.803s
user 2m 13.120s 4m 55.290s
sys 1m 33.250s 4m 31.900s

make

sheevakuro-box
real 15m 26.416s 31m 31.129s
user 13m 21.240s 25m 10.390s
sys 2m 3.160s 6m 3.380s

続いてPHP5.2.10をセルフビルドします。

  1. 必要となる前提パッケージををインストールしておきます。
    # apt-get install libxml2 libxml2-utils libxml2-dev
    # apt-get install libjpeg62 libjpeg62-dev
    # apt-get install libpng12-0 libpng12-dev
    # apt-get install libgd2-xpm libgd2-xpm-dev
    # apt-get install bison flex re2c
  2. PHP5.2.10のソースをダウンロードした後、ビルドしてインストールします。
    $ cd /opt/srcall
    $ wget http://jp2.php.net/get/php-5.2.10.tar.gz/from/jp.php.net/mirror
    $ cd ../src
    $ tar zxf ../srcall/php-5.2.10.tar.gz
    $ cd php-5.2.10
    $ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-pcntl --enable-mbstring --enable-mbregex --enable-zend-multibyte --without-mysql --with-pear=/usr/local/lib/php --with-openssl=/usr --with-zlib --with-zlib-dir=/usr/lib --with-gd=/usr  --enable-gd-native-ttf --enable-gd-jis-conv --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-xpm-dir==/usr/lib
    $ make
    # cd /opt/src/php-5.2.10
    # make install
    うーん、なぜかインストール中にこんなWarningがたくさん出ます...
    Warning: Cannot use a scalar value as an array in phar://install-pear-nozlib.phar/PEAR/ChannelFile.php on line ...
    ググってみたけど、pearまわりのトラブル?
    http://pear.php.net/go-pear をダウンロードしてphpで実行すればよいとか、もう一度make installでいけたとか、よく分かりません。とりあえず、make installをもう一回するとエラーが出ません。
    試しに、go-pearをやると今度はpear関連のファイル配置が変になるようで、pearが動かなくなってしまいます。
    とりあえず、pear versionでこんな感じ↓で出るので次に進みます。
    # pear version
    PEAR Version: 1.8.0
    PHP Version: 5.2.10
    Zend Engine Version: 2.2.0
    Running on: Linux sheeva 2.6.30.5 #1 PREEMPT Sun Aug 16 18:37:13 MDT 2009 armv5tel
  3. php.inを編集します。
    # cp -p php.ini-dist /usr/local/lib/php.ini
    # vi /usr/local/lib/php.ini
    [mbstring]
    mbstring.language = Japanese
    mbstring.internal_encoding = UTF-8
    mbstring.http_input = auto
    mbstring.http_output = EUC-JP
    mbstring.detect_order = auto
    mbstring.substitute_character = none;

    expose_php = Off
  4. httpd.confを環境に合わせて修正します。このあたりは、たくさん情報があると思いますので省略します。
  5. PHPの実行を高速化するため、eAcceleratorをインストールします。
    $ cd /opt/srcall
    $ wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
    $ cd ../src
    $ tar jxf ../srcall/eaccelerator-0.9.5.3.tar.bz2
    $ cd eaccelerator-0.9.5.3/
    $ /usr/local/bin/phpize
    こんなWarningが出ます。
    configure.in:158: warning: AC_CACHE_VAL(lt_prog_compiler_static_works, ...): suspicious cache-id, must contain _cv_ to be cached
    ググってみるとautoconf2.63だとダメみたいなのでバージョン2.13を入れた後、再度phpizeを実行します。
    $ su -
    # apt-get install autoconf2.13
    # exit
    $ /usr/local/bin/phpize
    $ ./configure --enable-eaccelerator --with-eaccelerator-shared-memory --with-eaccelerator-sessions --with-eaccelerator-content-caching --with-eaccelerator-disassembler --with-eaccelerator-userid=80   ←80はApacheの起動ユーザのuidです。
    $ make
    # cd /opt/src/eaccelerator-0.9.5.3
    # make install
  6. /usr/loca/lib/php.iniにeaccelerator.iniの内容を追記します。以下は私の場合の設定内容です。
    • キャッシュ内容をメモリにのみ保持します。
    • 圧縮は無しにしています。
    • キャッシュサイズを32MBにしているため、/etc/sysctl.confに kernel.shmmax=67109888 を追加してkerelの共有メモリサイズを64MBに変更しています。(SheevaPlugのkernel.shmmaxのデフォルト値は32MBでした。)
    ;; eAccelerator
    zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
    eaccelerator.shm_size = "32"    ← 16MB以上に増やす場合は/etc/sysctl.confのkernel.shmmaxの値を増やして下さい。 
    eaccelerator.cache_dir = "/tmp/eac-cache" ← キャッシュ保存用ディレクトリ
    eaccelerator.enable = "1"
    eaccelerator.optimizer = "1"
    eaccelerator.check_mtime = "1"
    eaccelerator.debug = "0"
    eaccelerator.filter = ""
    eaccelerator.shm_max = "0"
    eaccelerator.shm_ttl = "0"
    eaccelerator.shm_prune_period = "0"
    eaccelerator.shm_only = "0"
    eaccelerator.compress = "0" ← 圧縮無し
    eaccelerator.compress_level = "9"
    eaccelerator.keys     = "shm_only" ← メモリのみキャッシュを保存する場合
    eaccelerator.sessions = "shm_only" ← メモリのみキャッシュを保存する場合
    eaccelerator.content  = "shm_only" ← メモリのみキャッシュを保存する場合
    eaccelerator.allowed_admin_path = "/usr/local/apache2/htdocs/control.php"
  7. 後はcontrol.phpをApacheのhtdocs(上の場合は/usr/local/apache2/htdocs)に入れて動作確認します。
  8. Apacheの自動起動の設定を行います。
    # cd /etc/rc2.d
    # ln -s /usr/local/apache2/bin/apachectl S97apache
    # cd /etc/rc0.d
    # ln -s /usr/local/apache2/bin/apachectl K10apache
  9. Apacheのログローテーションの設定をします。
    # vi /etc/logrotate.d/httpd
    月1回、2世代まで保管する場合の例
    /usr/local/apache2/logs/*_log {
        monthly
        rotate 2
        postrotate
            /usr/local/apache2/bin/apachectl restart
        endscript
    }

この後、玄箱からrep2のファイルを持ってきて実行させたところ正常に動作しました。なお、期待していた実行速度ですが、明らかに速い箇所と、1.5倍ぐらいの速さのところがあり、まだまだチューニングが必要なようです。(素直にaptで入れた方が実行速度が速いって事はないよね...)

| | コメント (2)
|

2009年8月25日 (火)

SheevaPlug OS設定

カーネル更新まで完了したので、OSの設定に入ります。

  1. SDカードからブートします。
  2. IPアドレスを固定します。
    # vi /etc/network/interfaces
    auto eth0
    iface eth0 inet dhcp
    # /usr/share/doc/ifupdown/examples for more information.
      ↓以下の通り修正
    auto eth0
    iface eth0 inet static
        address 192.168.1.100
        netmask 255.255.255.0    
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
  3. rootのパスワードをデフォルト値から変更します。
    # passwd
  4. 一般ユーザを追加します。
    # useradd -u 1001 -g users -m -s /bin/bash ユーザ名
    # passwd ユーザ名
  5. sshでrootのログインを禁止します。
    # vi /etc/ssh/sshd_config
    PermitRootLogin yes
      ↓
    PermitRootLogin no
  6. 一度リブートします。
  7. サービスのON/OFFをするため、sysv-rc-confをインストールします。
    # apt-get install sysv-rc-conf
  8. サービス一覧を表示し、不要なサービスを停止します。
    # sysv-rc-conf
    # sysv-rc-conf samba off
  9. aptにてインストール済みパッケージを更新します。
    # apt-get update
    # apt-get -u upgrade
  10. /var/log/messagesに  -- MARK -- が定期的に記録されるのを止めます。
    # vi /etc/init.d/sysklogd 2009/8/26訂正(修正するファイルを間違えていました)
    # vi /etc/default/syslogd
    SYSLOGD=""
      ↓
    SYSLOGD="-m 0"
    # /etc/init.d/sysklogd restart
  11. gccなどの開発ツールをインストールします。 2009/8/26訂正(makeなどが入っていませんでした)
    # apt-get update
    # apt-get install build-essential
    # apt-get install libtool
  12. ホスト名を変更します。あわせてhostsも更新したあとリブートして反映します。
    # vi /etc/hostname
    # vi /etc/hosts
    # shutdown -r now

今日はここまで。明日以降Apacheを入れる予定です。

| | コメント (0)
|

2009年8月24日 (月)

SheevaPlug SDカードと内蔵フラッシュを疑似マルチブート

Plug Wikiのこちらの記事を見ていると、SDカードでブートしてみてブートできなければ内蔵フラッシュメモリからブートさせることができるようなので、早速やってみました。

  1. ubootから以下の環境変数を設定します。
    Marvell>> setenv bootargs_nand 'rootfstype=jffs2 console=ttyS0,115200 mtdparts=orion_nand:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw root=/dev/mtdblock1'
    Marvell>> setenv bootcmd_nand 'setenv bootargs $(bootargs_nand); nand read.e 0x800000 0x100000 0x400000; bootm 0x800000'

    Marvell>> setenv bootargs_sd 'console=ttyS0,115200 mtdparts=orion_nand:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw root=/dev/mmcblk0p3 rootfstype=ext2 rootdelay=3'
    Marvell>> setenv bootcmd_sd 'setenv bootargs $(bootargs_sd); mmcinit; ext2load mmc 0:1 0x800000 /sheeva-2.6.30.5-uImage; bootm 0x800000'

    Marvell>> set bootcmd 'run bootcmd_sd; run bootcmd_nand'
  2. 環境変数を保存します。
    Marvell>> saveenv

これで、SDカードがセットされていればSDカードから、SDカードがない場合は内蔵フラッシュメモリからブートするようになりました。

| | コメント (0)
|

SheevaPlug SDカードからの起動 その2

前回はrootファイルシステムのみSDカード、カーネルイメージは内蔵フラッシュという少し中途半端なところまでしかいけませんでした。
ということでリベンジです。今度こそSDカードのみで使えるようにしてみたいと思います。

  1. 内蔵フラッシュからOSを起動します。
  2. SDカードをセットし、パーティション作成します。(今回は/bootを256MB, swapを512MB, 残りを/にします。)
    # fdisk /dev/mmcblk0
    Command (m for help): o
    Command (m for help): n
    Command action p
    Partition number (1-4): 1
    First cylinder (1-2046, default 1):
    Last cylinder, +cylinders or +size{K,M,G} (1-2046, default 2046): +256M

    Command (m for help): n
    Command action p
    Partition number (1-4): 2
    First cylinder (136-2046, default 136):
    Last cylinder, +cylinders or +size{K,M,G} (136-2046, default 2046): +512M

    Command (m for help): n
    Command action p
    Partition number (1-4): 3
    First cylinder (405-2046, default 405):
    Last cylinder, +cylinders or +size{K,M,G} (405-2046, default 2046): そのまま[Enter]

    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 82

    Command (m for help): w
    Command (m for help): q
  3. フォーマットします。
    # mkfs -t ext2 /dev/mmcblk0p1
    # mkfs -t ext2 /dev/mmcblk0p3
    # mkswap /dev/mmcblk0p2
  4. 前々回カーネルを更新したときのsheeva-2.6.30.5-uImageを/bootになる領域にコピーします。(前回/rootで作業したため、sheeva-2.6.30.5-uImageは/rootに残っています。)
    # mount /dev/mmcblk0p1 /mnt/sdcard
    # cp -p /root/sheeva-2.6.30.5-uImage /mnt/sdcard
    # umount /mnt/sdcard
  5. rootファイルシステムをSDカードにコピーします。
    # mount /dev/mmcblk0p3 /mnt/sdcard
    # cp -ax / /mnt/sdcard
    # cp -a /dev /mnt/sdcard
    # umount /mnt/sdcard
  6. リブートしてubootに移行したあと、環境変数を設定します。
    Marvell>> set bootargs 'console=ttyS0,115200 mtdparts=orion_nand:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs)rw root=/dev/mmcblk0p3 rootfstype=ext2 rootdelay=3'
    Marvell>> set bootcmd 'mmcinit; ext2load mmc 0:1 0x800000 /sheeva-2.6.30.5-uImage; bootm 0x800000'
  7. OSを起動します。
    Marvell>> boot
  8. OSを起動後、swapを有効にします。(2009/10/14デバイス名修正)
    # swapon /dev/mmcblk0p2
  9. swap,/bootをfstabに追加します。(2009/8/25追記)
    # mkdir /boot
    # vi /etc/fstab
    /dev/mmcblk0p2 swap  swap defaults 0 0
    /dev/mmcblk0p1 /boot ext2 defaults 0 0

今度はbootargsのmdtpartsを設定したため、OS起動時に uncorrectable error : <3>uncorrectable errorが出ません。心なしか起動も速いような感じがします。

また、bootcmdで使用しているext2loadコマンドですが、こちらによると引数は以下のような意味があるようです。

mmc インターフェイス (mmcはSDカードを指す)
0:1 デバイス番号(0~):パーティション番号(1~)  (デバイス0のパーティション1を指す)
0x800000 ロードするアドレス
/sheeva-2.6.30.5-uImage ロードするファイル名

また、Plug Wikiのこちらの記事も参考になります。

| | コメント (2)
|

SheevaPlug SDカードからの起動

一度更新したubootですが、SDカードからの起動に対応していないため、対応版に更新します。 本来はこのあたりを参考にubootのパッチ当てと再コンパイルが必要なのですが、Windowsマシンで作業しているため、「Hisao's blog」さんがこちらで公開されているコンパイル済みのバイナリを使用させていただきます。 手順としては以下の通りです。

  1. 上記で公開されているコンパイル済みのバイナリをダウンロードし、u-boot-rd88f6281Sheevaplug_400db_nand-sd.binにリネームします。
  2. 前回と同じようにtftpd32のCurrent Directoryで設定したディレクトリにコピーします。
  3. 前回と同じようにXPマシンとクロスケーブルで接続して起動し、IPアドレスを設定します。
  4. ubootを更新します。
    Marvell>> bubt u-boot-rd88f6281Sheevaplug_400db_nand-sd.bin
    Using egiga0 device
    TFTP from server 192.168.2.222; our IP address is 192.168.2.10
    Filename 'u-boot-rd88f6281Sheevaplug_400db_nand-sd.bin'.
    Load address: 0x2000000
    Loading: #################################################################
             ###########################
    done
    Bytes transferred = 470920 (72f88 hex)

    **Warning**
    If U-Boot Endiannes is going to change (LE->BE or BE->LE), Then Env parameters should be overriden..
    Override Env parameters? (y/n) n  ← nを入力
    Erase 0 - 655360 ...
    Copy to Nand Flash...
    done
  5. 再起動します。
    Marvell>> reset
  6. 再度ubootに入りバージョンを確認します。(ビルド日付が2009/8/22になっているはずです。)
    Marvell>> version
    U-Boot 1.1.4 (Aug 22 2009 - 11:36:42) Marvell version: 3.4.16
  7. 内蔵フラッシュからOSを起動します。
    Marvell>> boot

ubootが更新できたら、内蔵フラッシュのファイルをSDカードにコピーし、SDカードからブートできるようにします。

  1. SDカード(私の場合は4GBを使用)をスロットに差し込みます。
  2. SDカードを認識しているか/var/log/messagesを確認します。(mmcblk0が認識されているはずです。)
  3. SDカードにパーティションを作成します。
    # fdisk /dev/mmcblk0
  4. 私の場合は、/で2GB, swapで512MB, 残りをWeb serverコンテンツ用(/www)にしました。
  5. SDカードをフォーマットします。
    # mkfs -t ext2 /dev/mmcblk0p1
    # mkfs -t ext2 /dev/mmcblk0p3
    # mkswap /dev/mmcblk0p2
  6. SDカードをマウントして内蔵のフラッシュメモリの内容をコピーします。
    # mkdir /mnt/sdcard
    # mount /dev/mmcblk0p1 /mnt/sdcard
    # cp -ax / /mnt/sdcard
    # cp -a /dev /mnt/sdcard
  7. リブートしてubootに入ります。
  8. bootargsを変更し、SDカードからブートします。
    Marvell>> setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p1
    Marvell>> boot
  9. OS起動後、dfで/の容量を確認します。
  10. swapを有効にします。
    swapon /dev/mmcblk0p2
  11. /dev/mmcblk0p3を/wwwにマウントするようにします。
    # mkdir /www
    # vi /etc/fstab
    /dev/mmcblk0p3 /www ext2 rw 1 1
  12. swapをfstabに追加します。(2009/8/25追記)
    # vi /etc/fstab
    /dev/mmcblk0p2 swap  swap defaults 0 0
  13. リブートして確認します。(ubootに入った後、bootargsを15の通りに設定してからbootして下さい。そのままbootすると内蔵のフラッシュメモリからbootします。)

これでSDカードからブートできるようになりました。SDカードからのブートをメインにする場合は、bootargsを変更後、saveenvで保存して下さい。
なお、起動時に uncorrectable error : <3>uncorrectable errorなどが表示されるようです。もう少し修正が必要なのかもしれません。

2009/08/24 追記
どうやら、この設定ではカーネルイメージは内蔵フラッシュから読み込んでいるようです。(bootcmdがnand readのままのため) 出直してきます...

| | コメント (0)
|

«SheevaPlug カーネル更新