[an error occurred while processing this directive]
USBからサーバを起動してみましたよー♪大変だ、こりゃ・・・▲('A`)

第198日目:USBからサーバを起動してみましたよー♪大変だ、こりゃ・・・▲('A`)

どうも、▲('A`)です。
札幌は急に暑さが去って、秋モードに突入していますが、皆さんがお住まいの処は
如何ですか?
もうね、朝晩は場所によって15℃近くまで下がるので、お腹出して寝てると風邪を
ひいたりします。北海道に旅行とかでいらした時には気をつけて下さいね。

えーと、前回の日記でかもめが大破した件を書きましたが、PIEからHDDを空輸する
作戦はまだ続いています。▲('A`)もまだ詳細が確認できていないのですが、どうも
税関のところで止まっているそうです。
個人的には「時期が悪いよ」と思いましたね。
だってね、9月11日前後といえば、米国では同時多発テロが記憶に残っていますので、
自然と警戒レベルが上がるものです。なので、この時期に荷物を送ろうというのは、
大変だと思いますよ。
ちなみに、11月半ばから12月にかけては、クリスマス+バーゲンの時期にあたるので、
米国の物流は混雑します。
(物流だけではなく、人々もバーゲンに繰り出して、お休みしたりします。今はどうか
判りませんが・・・不景気の前の時代の話なので、現状と違うかも、です。)

HDDが到着次第、色々調べる事になっています。
しー先生も首を長くして待っています。


さて、開発室の過去ログにはいっちゃいましたが、マルチブートできるサーバを
作ってっと先週末にroot兄(・∀・)から泣きつかれまして・・・▲('A`)も初めての
事なのでちょっとドタバタしました。そういう時にお客様のサーバが壊れたりする
もんです、ハア。。。
まあ、UBSからブートできるものは社内サーバでできました。
でも、こいつでいいのかなあ、と。
(ちょっと自信がないので、root兄弟(・∀・)(´・ω・`)とかに検証してもらっています。
ありゃりゃ、兄弟そろって健康診断にいっちゃった・・・トホホ)

作り方をちょっと書きますね。意外と簡単だったりしますが、ハマると大変です。

事前に準備するところでポイントは以下の通り。

・BIOSでUSBからブートできる様に設定する。
 これが設定されていないと、徒労に終わってしまいます。
 ▲('A`)が使っている社内サーバのマザーボードはIntel製(DQ965GF)ですが、
 BIOS画面を立ち上げると上のメニューバーのところに「Boot」と書かれた
 個所があるので、まずはそこに移動すると、色々項目が書かれています。
 通常だとブートの順番をみなさんはいじると思いますが、「USB Boot」と
 そのものズバリで書かれています。そこが「Disable」だったら「Enable」に
 変更して下さい。
・用意するUBSはできれば2GBか4GBにして下さい。
 もしかするとフォーマットが必要になるかもしれないので。
 FreeBSDのディスクイメージでは大抵4GBもあれば入ります。
 システムだけを入れるなら2GBで十分です。
・FreeBSDがインストールされているサーバを1台用意する。

で、googleさんを使ってUBSブートの紹介ページとかを色々調べたのですが、
まあ、今回は自己流でやってみました。

1. USBメモリをFreeBSDで使える(操作できる)様にする為にラベル情報とかを書きます。

社内サーバのUSBポートにUBSメモリを差し込みます。
今回はBUFFALO社のUF-C2GS-BL/U2(2GB)を使いました。
で、コンソールをみると、こんなメッセージが表示されます。
umass0: <BUFFALO USB Flash Disk, class 0/0, rev 2.00/1.00, addr 2> on usbus2 umass0: SCSI over Bulk-Only; quirks = 0x0000 umass0:0:0:-1: Attached to scbus0 da0 at umass-sim0 bus 0 scbus0 target 0 lun 0 da0: <BUFFALO USB Flash Disk 3.10> Removable Direct Access SCSI-0 device da0: 40.000MB/s transfers da0: 1912MB (3915776 512 byte sectors: 255H 63S/T 243C)

で、これでUBSメモリは装置記号名 /dev/da0 で認識されている状態です。
で、ここからfdiskコマンドを使ってUSBメモリにMBR(マスターブートレコード)を
書きこみます。

fdisk -BIv /dev/da0

次にUSBメモリ上にFreeBSDで使う領域を確保します。
今回の場合にはda0s1と名前を付けます。

bsdlabel -w -B /dev/da0s1

最後にパーティションを作り、データ操作できるようにします。

newfs /dev/da0s1a

今回はda0s1aという名前を付けました。

2. USBメモリをFreeBSDのサーバにマウントする。
ここまでできたら、まずはUSBメモリを操作できる様にマウントしましょう。
FreeBSDでは/mntというマウントポイントがありますので、以下の様にmount
コマンドを実行します。

mount /dev/da0s1a /mnt

3. 必要なFreeBSDのシステムをUBSメモリにコピーします。

さて、起動の為に必要なFreeBSDのシステムをUSBメモリ上にコピーします。
(以下ではUSBメモリのディレクトリは/mntで表しています。)
ディレクトリ毎まとめてコピーすると良いです。
今回は対象として以下のディレクトリを丸ごとコピーしました。
(いつもながら”力技”です。すんません・・・)
/bin、/boot、/dev、/etc、/lib、/libexec、/sbin
丸ごとコピーのコマンドはこちらです。

cp -Rpv /bin /mnt
cp -Rpv /boot /mnt
cp -Rpv /dev /mnt
cp -Rpv /etc /mnt
cp -Rpv /lib /mnt
cp -Rpv /libexec /mnt
cp -Rpv /sbin /mnt
cp -Rpv /usr /mnt
cp -Rpv /var /mnt

で、今回は/usrの中にsrcとportsが入っていたので、そいつらは除外して
コピーしました。
で、次に空のディレクトリを作ります。

mkdir /mnt/cdrom
mkdir /mnt/dist
mkdir /mnt/home
mkdir /mnt/mnt
mkdir /mnt/proc
mkdir /mnt/root
mkdir /mnt/tmp

えーと、なんで/devとか/usrとか入れてるの?というと、それらの
下に入っているディレクトリとかファイルが無いと、ちゃんと起動
しなかったのです・・・
(それが判るまで、何度かUBSメモリのフォーマットとコピーを繰り返し
ました。)
参考までに失敗した時にこんなメッセージが色々な装置タイプで出てました。

init : can't exec getty /usr/libexec/getty for port /dev/ttyv3

4. fstabの修正&/boot/loader.confへのおまじない

まず、fstabはそのままではダメです。以下の様に修正しました。
/etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/da0s1a / ufs rw 1 1
#/dev/ad10s1b none swap sw 0 0
#/dev/ad10s1a / ufs rw 1 1
#/dev/ad10s1e /backup ufs rw 2 2
/dev/ad12s1e /home ufs rw 2 2
#/dev/ad10s1d /usr ufs rw 2 2
/dev/ad12s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0

今回はSATAが壊れて、SSDが大丈夫というのを想定して組んでみました。
まあ、極端な話、/homeも、/varもコメントにして良いのですけどね。
(その状態でも起動できましたから。)
もしかすると、サーバにログインした際に、こんなメッセージが表示されるかも
しれませんが、ちゃんとログインできますから、安心して下さい。

Could not chdir to home directory /home/service: No such file or directory

で、次に/boot/loader.confで以下の記述を入れます。
どうも、USBメモリから起動する時にサーバのハードウェアによってはOSが
起動する際にda0がうまく認識できない事があります。
最初それに気がつかなくて、「何でかなあ?何でかなあ?」と不思議に
思ってました。
で、色々googleさんで調べたら、こちらのサイトを見つけたので、
ちょっと真似をしてみました。 /boot/loader.confに以下の行を追加します。
(サイトの方、ありがとうございました。助かりましたです、ハイ。)

kern.cam.boot_delay="10000"

で、後で書きますが、おそらくAHCIモードで構築されたサーバだと、ここで、
ahci_load="YES"を入れてやると認識するんじゃないかな、と。
(実は、これから社内サーバを使って確かめる処です。

5. UBSメモリを一度アンマウントします。

umount /mnt

これ、結構大事な事でした。
コピーや設定ファイルの修正が終わって「じゃあ試しに起動してみよう」と
リセットボタンや電源をブチッと切っちゃうと、ファイルシステムの方で
USBメモリ上のパーティションがちゃんとクローズされないので、ゴミの情報が
残っちゃう様です。
(CTRL+ALT+DELETEでも同じ事が起きました。なので、その後の処理を考えると
面倒でもやっておいた方が良いです。)
USBからの起動時に「こいつは/mntでマウントされていた。なので / で
マウントできないよー 必要ならfsckしてよ。」と言われます。

もし誤ってブチッとやっちまったら、FreeBSDのマシンに繋いで、
/mntでマウントしてからfsckを実行して下さい。
(各人の状況によっては必要な対処が異なるかもしれませんが、▲('A`)は
これで乗り切りました。)

mount /dev/da0s1a /mnt
fsck -y /mnt
umount /mnt

えーと、以上です。
まあ、最初に作る時に実機を操作できる環境で何度も訓練した方がいいです。
その時々で発生する事象によって、今までうまく行っていた方法がきかない、
という事に出くわすからです。
▲('A`)みたいな力技しかできない人間は何度も実行して「体で覚える」と
いうのが必要なのです。
孔子様も言っています。「学びて時にこれを習う」って。
要は「千本ノック」ですよ、ハイ。

さて、今回の方法では、ネットワークの設定もちゃんと動きました。
(つまり、外部からSSHでログインできた訳です。これはうれしかったです。)
今回ははっきりとした期限は切られていませんでしたが、「できるだけ早く」とは
言われていたので、成功例ができたのでちょっと▲('A`)ホッとしています。
root兄(・∀・)からは他にも「SATAからじゃなくて、SSDからも起動できないか?」
と言われていますので、ちょっとこれから挑戦してみます。

えーと、▲('A`)今週は病院ウィークになっておりまして・・・・ゴメンなさい。
明日は会社の健康診断、明後日はいつも通院している内科(糖尿治療)で検査とか
色々入ってしまうので、留守にします。
さて、HDDは届くんだろうか?
みなさんも、お祈りよろしくです。

あ、そうだ。あのお方から
     .,/i/i
    ミ 、|
    ./\;! 色々なサーバ作ってちょ!
   ,.イ., /
 <;と_)_)
と、お願いされまして・・・・
どうもね、言いたいらしいのですよ。「ザクとは違うのだよザクとは!
個人的▲('A`)の場合には、グフもそうですが、ギャンとかビクザムとか、
ジオングも好きですね。(あ、違うか?・・・)
そういえば、今では忘れ去られたサーバ達はどうしているのだろう?
(A-Tigerの筐体を使ったSASの試作機とかありました。あれはOSがまだ十分に
カードを対応していなかったので、うまくいかなかったです。あとはRAID10
サーバとかあったなあ・・・・)

まあ、色々手がけて何かが生まれると。
そういう意味ではハイブリッドサーバは試行錯誤から生み出されて成功した
サーバ達です。はい。

今日は会社の新人君(といっても入社して3ヶ月以上経ちますが)が
あぶらみくん( `э´)の熱血指導のもと、サーバ作りを行なっています。
まずは、もう旧式となってしまったBananaサーバをセットアップしています。
まあ、基本の作業とか、基礎知識とかを身につける上で良い題材です。
次はT-Bananaかな?

それでは、また。▲('A`)/

【追記 2010/09/14 17:30】
どうも、どうも▲('A`)です。
えーと、AHCIモードで作られたサーバについても、同じ方法でUBSメモリから
起動できるようになりました。
ちょっと違う処は、USBメモリ上の/boot/loader.confで以下の記述を追加
しておく事です。

ahci_load="YES"
で、試しに社内サーバでSATA HDD側のデータケーブルを引っこ抜いて、
SSD側はそのままで、USBメモリで起動させるとdmesg上こうなりました。
ugen2.2: <BUFFALO> at usbus2
umass0: <BUFFALO USB Flash Disk, class 0/0, rev 2.00/1.00, addr 2> on usbus2
umass0:  SCSI over Bulk-Only; quirks = 0x0000
umass0:6:0:-1: Attached to scbus6
ada0 at ahcich1 bus 0 scbus1 target 0 lun 0
ada0: <INTEL SSDSA2M080G2GC 2CV102HD> ATA-7 SATA 2.x device
ada0: 300.000MB/s transfersda0 at umass-sim0 bus 0 scbus6 target 0 lun 0
da0: <BUFFALO USB Flash Disk 3.10> Removable Direct Access SCSI-0 device 
da0: 40.000MB/s transfers
da0: 1912MB (3915776 512 byte sectors: 255H 63S/T 243C)
 (SATA 2.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 76319MB (156301488 512 byte sectors: 16H 63S/T 16383C)

で、今回USBメモリ側に仕込んだfstabをちょっとご覧頂きます。
コメントアウトになっていますが、/dev/ada0s1なんちゃらと書かれているパーティションが
SATA HDD側です。で、/dev/ada1s1なんちゃらと書かれているパーティションがSSD側です。
これを見ると判ると思いますが、認識された側のHDDがada0を名乗る事になります。
%cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/da0s1a             /               ufs     rw              1       1
#/dev/ada0s1b           none            swap    sw              0       0
#/dev/ada0s1a           /               ufs     rw              1       1
#/dev/ada0s1e           /backup         ufs     rw              2       2
#/dev/ada1s1e           /home           ufs     rw              2       2
#/dev/ada0s1d           /usr            ufs     rw              2       2
#/dev/ada1s1d           /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0

で、/devの処を見てみましょう。ada0ではパーティションが2つあります。
(ada0s1dとada0s1eです。)
%ls -l /dev
total 3
crw-r-----  1 root  operator    0,  94 Sep 14 08:22 acd0
crw-r--r--  1 root  wheel       0,  34 Sep 14 08:22 acpi

crw-r-----  1 root  operator    0, 103 Sep 14 08:22 ada0
crw-r-----  1 root  operator    0, 105 Sep 14 08:22 ada0s1
crw-r-----  1 root  operator    0, 107 Sep 14 08:22 ada0s1d
crw-r-----  1 root  operator    0, 108 Sep 14 08:22 ada0s1e

crw-r-----  1 root  operator    0, 101 Sep 14 08:22 da0
crw-r-----  1 root  operator    0, 102 Sep 14 08:22 da0s1
crw-r-----  1 root  operator    0, 104 Sep 14 08:22 da0s1a

それぞれをマウントしてみます。

mount /dev/ada0s1d /var
mount /dev/ada0s1e /home

んで、dfで見てみます。
えーと、ハイブリッド系サーバでは/varを8GB、/homeを残り全部(だいたい64GB)で
設定しています。
皆さんのサーバとは違うと思います。
%df
Filesystem   1K-blocks    Used    Avail Capacity  Mounted on
/dev/da0s1a    1886656 1309774   425950    75%    /
devfs                1       1        0   100%    /dev
/dev/ada0s1e  67565698      22 62160422     0%    /home
/dev/ada0s1d   8122126     430  7471926     0%    /var
%
これじゃあ判らないよ、という人はオプションに-hを付けてもう一度コマンドを
実行して下さい。
%df -h
Filesystem      Size    Used   Avail Capacity  Mounted on
/dev/da0s1a     1.8G    1.2G    416M    75%    /
devfs           1.0K    1.0K      0B   100%    /dev
/dev/ada0s1e     64G     22K     59G     0%    /home
/dev/ada0s1d    7.7G    430K    7.1G     0%    /var
%
これで、だいたいの容量が同じと判るので、元のパーティションの名前で
操作できるようになりました。

さて、今回はわざわざSATA HDDのケーブルを抜いて、HDDが認識できない状況を
作りましたが、繋がっている状態でもUSBメモリから起動できます。
参考までにdmesgの情報を載せておきます。
umass0: <BUFFALO USB Flash Disk, class 0/0, rev 2.00/1.00, addr 2> on usbus2
umass0:  SCSI over Bulk-Only; quirks = 0x0000
umass0:6:0:-1: Attached to scbus6
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <ST3250620AS 3.AAD> ATA-7 SATA 2.x device
ada0: 300.000MB/s transfersda0 at umass-sim0 bus 0 scbus6 target 0 lun 0
da0: <BUFFALO USB Flash Disk 3.10> Removable Direct Access SCSI-0 device 
da0: 40.000MB/s transfers
da0: 1912MB (3915776 512 byte sectors: 255H 63S/T 243C)
 (SATA 2.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 238475MB (488397168 512 byte sectors: 16H 63S/T 16383C)
ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
ada1: <INTEL SSDSA2M080G2GC 2CV102HD> ATA-7 SATA 2.x device
ada1: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada1: Command Queueing enabled
ada1: 76319MB (156301488 512 byte sectors: 16H 63S/T 16383C)

それでも、USBメモリ側のfstabで/しか設定していないので、dfで見ると
/だけしかありません。
%df
Filesystem  1K-blocks    Used  Avail Capacity  Mounted on
/dev/da0s1a   1886656 1309842 425882    75%    /
devfs               1       1      0   100%    /dev
%

こうなるので、必要に応じて各HDDのパーティションをマウントして
データを取り出す、ということになります。

さてと、次はSATA側(メインのブートディスク)以外でのブートが
できるか、に挑戦です。
ちょっと時間がかかるかもしれませんが、気長に待って下さい。
よろしくです。
それでは、また。▲('A`)/

197日目に戻る。   199日目に続く。

目次に戻る
1日目 2日目 3日目 4日目 5日目 6日目 7日目
8日目 9日目 10日目 11日目 12日目 13日目 14日目
15日目 16日目 17日目 18日目 19日目 20日目 21日目
22日目 23日目 24日目 25日目 26日目 27日目 28日目
29日目 30日目 31日目 32日目 33日目 34日目 35日目
36日目 37日目 38日目 39日目 40日目 41日目 42日目
43日目 44日目 45日目 46日目 47日目 48日目 49日目
50日目 51日目 52日目 53日目 54日目 55日目 56日目
57日目 58日目 59日目 60日目 61日目 62日目 63日目
64日目 65日目 66日目 67日目 68日目 69日目 70日目
71日目 72日目 73日目 74日目 75日目 76日目 77日目
78日目 79日目 80日目 81日目 82日目 83日目 84日目
85日目 86日目 87日目 88日目 89日目 90日目 91日目
92日目 93日目 94日目 95日目 96日目 97日目 98日目
99日目 100日目 101日目 102日目 103日目 104日目 105日目
106日目 107日目 108日目 109日目 110日目 111日目 112日目
113日目 114日目 115日目 116日目 117日目 118日目 119日目
120日目 121日目 122日目 123日目 124日目 125日目 126日目
127日目 128日目 129日目 130日目 131日目 132日目 133日目
134日目 135日目 136日目 137日目 138日目 139日目 140日目
141日目 142日目 143日目 144日目 145日目 146日目 147日目
148日目 149日目 150日目 151日目 152日目 153日目 154日目
155日目 156日目 157日目 158日目 159日目 160日目 161日目
162日目 163日目 164日目 165日目 166日目 167日目 168日目
169日目 170日目 171日目 172日目 173日目 174日目 175日目
176日目 177日目 178日目 179日目 180日目 181日目 182日目
183日目 184日目 185日目 186日目 187日目 188日目 189日目
190日目 191日目 192日目 193日目 194日目 195日目 196日目
197日目 198日目 199日目 200日目 201日目 202日目 203日目
204日目 205日目 206日目 207日目 208日目 209日目 210日目
211日目 212日目 213日目 214日目 215日目 216日目 217日目
218日目 219日目 220日目 221日目 222日目 223日目 224日目
225日目 226日目 227日目 228日目 229日目 230日目 231日目
232日目 233日目 234日目 235日目 236日目 237日目 238日目
239日目 240日目 241日目 242日目 243日目 244日目 245日目
246日目 247日目 248日目 249日目 250日目 251日目 252日目
253日目 254日目 255日目 256日目 257日目 258日目 259日目
260日目 261日目 262日目 263日目 264日目 265日目 266日目
267日目 268日目 269日目 270日目 271日目 272日目 273日目
274日目 275日目 276日目 277日目 278日目 279日目 280日目
281日目 282日目 283日目 284日目 285日目 286日目 287日目
288日目 289日目 290日目 291日目 292日目 293日目 294日目
295日目 296日目 297日目 298日目 299日目 300日目 301日目
302日目 303日目 304日目 305日目 306日目 307日目 308日目
309日目 310日目 311日目 312日目 313日目 314日目 315日目
316日目 317日目 318日目 319日目 320日目 321日目 322日目
323日目 324日目 325日目 326日目 327日目 328日目 329日目
330日目 331日目 332日目 333日目 334日目 335日目 336日目
337日目 338日目 339日目 340日目 341日目 342日目 343日目
344日目 345日目 346日目 347日目 348日目 349日目 350日目
351日目 352日目 353日目 354日目 355日目 356日目 357日目
358日目 359日目 360日目 361日目 362日目 363日目 364日目

いま一番お得なページ! 解析
[an error occurred while processing this directive]