忘れたときに備えた記録

トップ «前の日記(2008-01-11(Friday)) 最新 次の日記(2008-01-13(Sunday))» 編集
2005|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|11|12|
2009|01|02|03|04|05|06|10|12|
2010|06|07|08|12|
2011|07|09|
2012|09|11|
2013|02|03|09|
2015|10|11|
2016|01|08|11|
2017|02|08|10|
2018|11|
2020|03|

2008-01-12(Saturday)

宇宙

そこは最後のフロンティア。という話ではないのです。

飛行船の復活 - スラッシュドット・ジャパンあるコメント|で読んで初めて知ったのですが、「宇宙」という言葉は

  • 宇 : 空間のこと
  • 宙 : 時間のこと

なのだそうです。へえぇぇぇぇぇ。

Tags: 雑談

GRUBでRAIDなWindowsXPとUbuntuをデュアルブートする

僕のパソコンには、次の順番でSATAにHDDをつないでいます

  1. WindowsXP用RAID0 1台め
  2. WindowsXP用RAID0 2台め
  3. Ubuntu 7.10用

マザーボードのチップセットはP965+ICH8Rで、WindowsXPのRAID0にはICH8Rの機能を使っています。

インストールは WindowsXP -> Ubuntu 7.10 の順番で行い、パソコン起動時にF8キーを押すことで出てくる「どのドライブからブートするか」のメニューで起動するドライブを選んで使い分けていました。

このやり方の不便な点は、パソコン起動時の最初にF8を連打し損なうとメニューが表示されなくなることで、そろそろWindowsXPの方をRAID0で使うのは止めようかなと思っていたのです。そうすれば、GRUBからWindowsXP用のパーティションが認識できるので、GRUBのメニュー(タイムアウトを5秒くらいに設定する)で選べるようになりますから。

ところが最近になって、RAID0のデバイスに直接GRUBの起動部分をインストールできればうまく行くのではないかと考えつきました。

調べてみたら同じ事をやっている人がいて、その人の解説を参考に試したところ実際にうまく行ったので、忘れたときに備えてまとめる次第です。

参考にしたのはATA RAIDでのgrub インストール - ribbon の日記です。

また、起動したUbuntuからWindows用のRAID0を認識してマウントする方法はRAID by dmraid - tuchiya.org Wikiを参考にしました。

RAID0ディスクの認識

# dmraid -ay

とすると、次のデバイスファイルが作られます。

  1. /dev/mapper/isw_bcihaahfac_HIRAID0
  2. /dev/mapper/isw_bcihaahfac_HIRAID01

1番目がRAID0によるディスク全体で、2番目はそこに作られたWindowsXPのパーティションです。

# mount /dev/mapper/isw_bcihaahfac_HIRAID01 /mnt

とかすると、UbuntuからRAID0のWindowsXPのディスクを使うこともできてとても便利です。

GRUBのRAID0ディスクへのインストール

# grub --device-map=/dev/null

としてgrubを起動して、次のように入力します。

# GRUBにRAID0を(hd0)として登録する
grub> device (hd0,0) /dev/mapper/isw_bcihaahfac_HIRAID01
grub> device (hd0) /dev/mapper/isw_bcihaahfac_HIRAID0 

# Ubuntu用ディスクを(hd2)として登録する
grub> device (hd2,0) /dev/sdc1
grub> device (hd2) /dev/sdc 

# Ubuntuの/bootがあるパーティションを指定する
grub> root (hd2,0)

# GRUBのインストール先をRAID0に指定してインストール
grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 d (hd0) (hd0)1+17 p (hd2,0)/boot/grub/stage
2 /boot/grub/menu.lst"... succeeded
Done.

/dev/sdcを番号を詰めて(hd1)にするとGRUB自体が正常に起動しなくなります。 Ubuntu起動後のGRUBの認識に合わせて/dev/sdcを(hd2)にすると、パソコン起動時の認識と食い違って起動しなくなります((hd2)にして起動したと思ったのは間違いでした)。 (やはり(hd2)が正解でした。)

menu.lst書き換え

/boot/grub/menu.lstに次の記述を追加します。

title		Windows XP
root		(hd0,0)
savedefault
makeactive
chainloader	+1

これで、起動時に(F8を連打しなくても)GRUBのメニューが表示されて、WindowsXPとUbuntuを選べるようになりました。どっとはらい

Hiki XHTML化キット0.21.3を公開しました

正規表現部分にTypoがあって止まらなくなる場合があったバグを解決しました。

ダウンロードはこちらからどうぞ。

Tags: 更新

describeとitのスコープ

RSpecのdescribeメソッドとitメソッドに渡されるブロックのスコープを調べてみました。

test1_spec.rb, test2_spec.rb という2つのファイルを、まったく同じ以下の内容で作成します。

puts "outside: (#{self.class})#{self}"
describe "HOGE" do
   puts "HOGE: (#{self.class})#{self} < #{superclass}"
   it do
      puts "it1 of HOGE: (#{self.class})#{self}"
   end
   it do
      puts "it2 of HOGE: (#{self.class})#{self}"
   end
end

describe "FUGA" do
   puts "FUGA: (#{self.class})#{self} < #{superclass}"
   it do
      puts "it1 of FUGA: (#{self.class})#{self}"
   end
   it do
      puts "it2 of FUGA: (#{self.class})#{self}"
   end
end
hiraku@shako:~/tmp$ ls
test1_spec.rb  test2_spec.rb

で、実行。

hiraku@shako:~/tmp$ spec .
outside: (Object)main
HOGE: (Class)Spec::Example::ExampleGroup::Subclass_1 < Spec::Example::ExampleGroup
FUGA: (Class)Spec::Example::ExampleGroup::Subclass_2 < Spec::Example::ExampleGroup
outside: (Object)main
HOGE: (Class)Spec::Example::ExampleGroup::Subclass_3 < Spec::Example::ExampleGroup
FUGA: (Class)Spec::Example::ExampleGroup::Subclass_4 < Spec::Example::ExampleGroup
it1 of HOGE: (Spec::Example::ExampleGroup::Subclass_1)#<Spec::Example::ExampleGroup::Subclass_1:0xb7b4ca00>
.it2 of HOGE: (Spec::Example::ExampleGroup::Subclass_1)#<Spec::Example::ExampleGroup::Subclass_1:0xb7b4c9c4>
.it1 of FUGA: (Spec::Example::ExampleGroup::Subclass_2)#<Spec::Example::ExampleGroup::Subclass_2:0xb7b4c514>
.it2 of FUGA: (Spec::Example::ExampleGroup::Subclass_2)#<Spec::Example::ExampleGroup::Subclass_2:0xb7b4c4d8>
.it1 of HOGE: (Spec::Example::ExampleGroup::Subclass_3)#<Spec::Example::ExampleGroup::Subclass_3:0xb7b4b1c8>
.it2 of HOGE: (Spec::Example::ExampleGroup::Subclass_3)#<Spec::Example::ExampleGroup::Subclass_3:0xb7b4b18c>
.it1 of FUGA: (Spec::Example::ExampleGroup::Subclass_4)#<Spec::Example::ExampleGroup::Subclass_4:0xb7b4acdc>
.it2 of FUGA: (Spec::Example::ExampleGroup::Subclass_4)#<Spec::Example::ExampleGroup::Subclass_4:0xb7b4aca0>
.

Finished in 0.008873 seconds

8 examples, 0 failures

この結果で、次の事が分かりました。

  • describe に渡したブロックは独自のクラス(インスタンスではない)のスコープで実行される
    • クラスはSpec::Example::ExampleGroupのサブクラス
  • itのブロックはdescribeのクラスのインスタンス
    • it毎に新しいインスタンスが作られる

ということは、describeの中でincludeとかしまくって良かったわけかな。

Tags: RSpec
[]