| Home | 次のページ »    [FreeBSD ]

2012.03.13

FreeBSDをUSBメモリーからインストール

FreeBSDのISO-IMAGEのダウンロードのディレクトリーには、CDRやDVDに書きこんで使うisoファイルとともに、USBメモリーに書きこんで使う、xxxxxx-memstock.imgがある。
minisd3.jpg
習慣的にCDRを作成してインストールを行なっていたが、FreeBSD 9.0でUSBからの起動を行なってみた。
使用したのは、左の写真のようにmicroSDメモリーと小さなUSBアダプターである。もちろん、USBメモリーとして造られたのを用いても何ら問題はないし、より一般的なことであろう。
まず、既に立ち上がっているFreeBSDのマシンのUSBポートに接続して、da0として認識されることを確認した。次に、FreeBSD-9.0-RELEASE-i386-memstick.imgをダウンロードして、収納したディレクトリーで下記のようにしてインストル用メモリーを作成した。

# dd if=FreeBSD-9.0-RELEASE-i386-memstick.img of=/dev/da0 bs=1m

ここで、bs=1mとして、ブロックサイズを1MBとしたが、約1分30秒ほどで作成が完了した。
bs=10240として、ブロックサイズを1KB程度とすると、5分以上かかってしまった。bs=10mとしても、1mの場合とほとんど変わらなかったので、bs=1mぐらいが適していると思える。
ともかく、簡単に作成できる。出来上がったUSBメモリーで、起動してみたがCDRなどより、立ち上がりが迅速でとても感じがよい。DVDドライブのトレーの開け閉めの煩わしさもなく、もっと早くからUSBにすればよかったと思うこととなった。
なお、Windowsでも作成ツールとしてddの機能を実行するdd for Windowsというフリーソフトと、Image Writer for Windowsがあるが、Image Writer for Windowsの方が作成時間も早くお勧めのようである。

2012.03.04

GPTでミラー化したHDDの初期化と再組み込み

以前に「FreeBSD 9.0のGPTでのミラー構築」を書いたが、HDDの故障に際しての交換作業を行なうことを試みた。現在、ミラーはドライブada0とada1で構成されているが、ada1が故障したとの前提で行うこととした。現実的には、ada1を外して新しいHDDを取り付けることとなるが、新しいHDDの代わりにada1として使っていたHDDを初期化して、再度使うこととし、GPTでミラー化されたHDDを初期化することも合わせて試みることとした。

以下説明のためミラー構成でada0となっていたドライブをdv#0 、ada1となっていたドライブをdv#1と呼ぶこととする。

1. HDDの初期化

dv#1を初期化するため、dv#0のケーブルを抜き、dv#1のみ実装した状態で、FreeBSD 9.0のインストールCDで立ち上げ、Live CDを選択してrootでログインする。
プロンプトが現れたら、HDDの状態を調べる。

# gpart show
=>         34      312581741 ada0   GPT    (149G)
              34                  128     1   freebsd-boot  (64k)
            162      136314880     2   freebsd-ufs     (65G)
136315042        19986412     3   freebsd-swap   (9.5G)
156301454      156280321          - free -   (74G)

このことから、

  • bootレコードは、34セクター目から161セクターまで
  • データー領域は、162 – 136315041
  • スワップ領域は、136315042 – 156301453

となっていることが分かる。最後の156301454以降312581775までが空きである。最後のセクターが表示の1行目の312581741と僅かに異なるが、理由は分からない。
そして、ミラーのメタデーターはそれぞれの領域の最終セクターに書かれているので、境界を跨ぐようにddで消去する。以下のように行った。

# dd if=/dev/zero of=/dev/ada0 bs=512 count=2000
# dd if=/dev/zero of=/dev/ada0 seek=136314000 bs=512 count=2000
# dd if=/dev/zero of=/dev/ada0 seek=156301000 bs=512 count=2000
# dd if=/dev/zero of=/dev/ada0 seek=312581000 bs=512 count=2000

最後の行の空き領域の最後にzeroを書き込む必要はないと思われるが、以前にもHDD全体でgmirrorで使用した痕跡が残っているかも知れず、念のため消去を行った。
なお、bs=100mとして全領域消去したら約42分かかった。150GBの小容量のHDDでも42分だから、大容量HDDだと丸1日かかるかも知れない。

2. ミラーの再構築の事前確認

Shutdownして、dv#0, dv#1とも接続して普通に立ち上げる。
gpartで確認すると、dv#0の情報のみ表示される。

# gpart show
=>         34      156301421 ada0   GPT    (74G)
              34                  128     1   freebsd-boot   (64k)
            162      136314880     2   freebsd-ufs      (65G)
136315042        19986412     3   freebsd-swap   (9.5G)
156301454                      1          - free -   (512B)

gmirrorのステータスを見ると、

# gmirror status
mirror/p1 DEGRADED ada0p1  (ACTIVE)
mirror/p2 DEGRADED ada0p2  (ACTIVE)
mirror/p3 DEGRADED ada0p3  (ACTIVE)

となっていて、すべてDegradeした状態で動いている。

3. ミラーの再構築

ここで、ada1をada0と同じ分割となるように作る。

# gpart backup ada0 > ada0.gpt
# gpart restore -F ada01 < ada0.gpt

再度、gpart showで情報を見ると、ada0とada1が同じ構成で現れる。ただしdv#1の方が容量が大きいので、最後に付いている空き領域が74Gにもなっている。

# gpart show
=>         34      156301421   ada0   GPT    (74G)
              34                  128     1   freebsd-boot  (64k)
            162      136314880     2   freebsd-ufs     (65G)
136315042        19986412     3   freebsd-swap   (9.5G)
156301454                      1          - free -   (512B)

=>         34      312581741 ada1   GPT    (149G)
              34                  128     1   freebsd-boot  (64k)
            162      136314880     2   freebsd-ufs     (65G)
136315042        19986412     3   freebsd-swap   (9.5G)
156301454      156280321          - free -   (74G)

ここで、ada1にbootレコードを書き込む。
boot領域をミラー化してもbootコードだけは、gmirrorの対象外であるため、マニュアルで書いておく必要がある。最初これが分からず、起動しなくて散々悩むこととなった。

# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada1

gmirrorの構成情報をリセットして状態を確認する。

# gmirror forget p1
# gmirror forget p2
# gmirror forget p3
# gmirror status
mirror/p1 COMPLETE ada0p1  (ACTIVE)
mirror/p2 COMPLETE ada0p2  (ACTIVE)
mirror/p3 COMPLETE ada0p3  (ACTIVE)

構成情報がリセットされたので、それぞれの領域のミラーを構築する。

# gmirror insert p1 /dev/ada1p1
# gmirror insert p2 /dev/ada1p2
# gmirror insert p3 /dev/ada1p3
# gmirror status
Name         status     Components
mirror/p1    COMPLETE   ada0p1 (ACTIVE)
                        ada1p1 (ACTIVE)
mirror/p2    DEGRADED   ada0p2 (ACTIVE)
                        ada1p2 (SYNCRONIZING 1%)
mirror/p3    COMPLETE   ada0p3
                        ada1p3 (SYNCRONIZING 20%)

p1はboot領域で64kBしかないので、同期化は一瞬で終わる。
次にswap領域が、比較的小容量なので短時間で完了する。swap領域の同期化が完了すれば、サーバーは使用可能になる。コマンドの入力に対して通常と思える応答を示す。
本当に、HDDが壊れて新しいHDDを接続したときは、3.項のミラーの再構築のみなので、作業は簡単である。

2012.01.29

FreeBSD 9.0のGPTでのミラー構築

FreeBSD 9.0では、GUIDパーティション(GPT)がサポートされたが、そこでミラー構成がMLの助けも借りて成功したので、記述しておくことにした。
既に、GUIDEDでFreeBSD 9.0がインストールされているものとする。
なお、画面キャプチャーなどで便利なので、VMWareで構成したが、もちろんこの方法で実環境でも問題なく構成でき、サーバーを立ち上げた。

1. HDDの追加

ミラーにするHDDを追加して、普通に起動し、ログインしてrootで下記の操作を行う
最初にFreeBSDをインストールしたドライブ名と追加したドライブ名を確認する。

# camcontrol devlist
<VMware Virtual IDE Hard Drive 00000001> at scbus0 target 0 lun 0 (pass0,ada0)
<VMware Virtual IDE Hard Drive 00000001> at scbus0 target 1 lun 0 (pass1,ada1)

次にada1をada0と同じパーティションとなるように合わせる。

# gpart backup ada0 > ada0.gpt
# gpart restore -F ada1 < ada0.gpt

内容の確認をする。

# gpart show
=>       34  20971487  ada0  GPT  (10G)
        34            128     1  freebsd-boot  (64k)
          1 62  19920768     2  freebsd-ufs   (9.5G)
  19920930   1048576     3  freebsd-swap  (512M)
  20969506         1981        - free -  (990k)

=>         34  25165791  ada0  GPT  (12G)
              34            128     1  freebsd-boot  (64k)
            162  19920768     2  freebsd-ufs   (9.5G)
   19920930   1048576     3  freebsd-swap  (512M)
   20969506   4196285        - free - (2.0G)

ada1にbootレコードを書き込む。

# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada1

2. ミラーの構築

ここで、shutdownして、インストールCDで起動して、Live CDを選択する。loginのpromptが出たらrootでログインする。パスワードは不要である。(クリックで画像拡大)

mirror01.jpgmirror02.jpg

geom_mirrorをロードし、各スライス毎にround robinで構築する。

# kldload geom_mirror
# gmirror label -vb round-robin p1 /dev/ada0p1
# gmirror label -vb round-robin p2 /dev/ada0p2
# gmirror label -vb round-robin p3 /dev/ada0p3

内容を確認する。

# gmirror status
Name         status     Components
mirror/p1    COMPLETE    ada0p1 (ACTIVE)
mirror/p2    COMPLETE   ada0p2 (ACTIVE)
mirror/p3    COMPLETE    ada0p3 (ACTIVE)

ada1の各スライスをinsertする。

# gmirror insert p1 /dev/ada1p1
# gmirror insert p2 /dev/ada1p2
# gmirror insert p3 /dev/ada1p3

gmirrorのステータスを確認する。

# gmirror status
Name         status     Components
mirror/p1    COMPLETE   ada0p1 (ACTIVE)
                        ada1p1 (ACTIVE)
mirror/p2    DEGRADED   ada0p2 (ACTIVE)
                        ada1p2 (SYNCRONIZING 91%)
mirror/p3    COMPLETE   ada0p3
                        ada1p3 (ACTIVE)

p1とp3が同期化完了で、p2のみ進行中を示している。
全てCOMPLETEになるのを待ち、fstabとloader.confを編集する。

# mount /dev/mirror/p2 /mnt
# cd /mnt/etc
# vi fstab
# Device                 Mountpoint       FStype    Option   Dump   Pass#
/dev/ada0p2          /                       ufs           rw          1           1
/dev/ada0p3         none                  swap       sw          0           0

下記になるように修正する。

/dev/mirror/p2          /                       ufs           rw          1           1
/dev/mirror/p3         none                  swap       sw          0           0

次にloader.confにgeom_mirrorの読み込みを追加。

# cd /mnt/boot
# vi loader.conf
ここで、
geom_mirror_load="YES" を追加

これで終了である。rebootしてHDDから起動して使用する。
Swapも確認しておく。

# pstat -sh  または swapinfo -h
Device                     1K-blocks  Used    Avail Capacity
/dev/mirror/p3         418812   0B  418MB

2012.01.26

FreeBSD 9.0のインストール(GUIDパーティション)

FreeBSD 9.0がリリースされた。今回のFreeBSD 9.0では、GUIDパーティション(GPT)がサポートされ、それに伴いインストーラーも従来のsysinstallに変えてbsdinstallになった。
GPTがサポートされた理由は、従来のMBRパーティション方式ではHDDの使用最大容量は2TB(テラバイト)なので、一気に8ZB(ゼタバイト、正確にはZiBでゼビバイト:2**70)まで広げようとするもので、インテルが提唱していた。テラ→ペタ→エクサ→ゼタなので、とてつもない値である。
ともかく、bsdinstallでインストールの様相がsysinstallと違うので、VMware下にインストールしてその方法を記述して置くことにした。
ネットからFreeBSD-9.0-RELEASE-i386-disc1.isoをダウンロードし、CDRに焼き、DVDドライブのトレーに入れて起動させた。すぐに起動画面が現れた。右側にデーモン君が描かれている。その後、起動時のメッセージが画面を流れた後に[Install]、[Shell]、[Live CD]の選択画面になるので、[Install]を選ぶ。
bsd9_01.jpgbsd9_02.jpg

次にキーボードの選択を行うか否かの画面になるので[Yes]を選んで[Japanese 106]を選択する。

bsd9_03.jpgbsd9_04.jpg

次にhostnameの入力画面になるので、ホスト名を入れる。特に指定するホスト名がなければtestとでも入れておけばよい。その次にインストールする内容物を選ぶ。今回はDefaulltのままとした。

bsd9_05.jpgbsd9_06.jpg

いよいよパーティションの選択である。Defaultの[Guided]を選んで[Entire Disk]を選んだ。

bsd9_07.jpgbsd9_08.jpg

ada0p1(boot)、ada0p2(utf)、ada0p3(swap)が表れるので、変更の必要がなければ[Finish]を選ぶと確認画面が現れるので[Commit]する。

bsd9_09.jpgbsd9_10.jpg

インストールが始まる。しばらく時間がかかるが、終わると管理者(root)のパスワードの入力となる。

bsd9_11.jpgbsd9_12.jpg

LANドライバーの選択画面になるので、選んでこのホストのIPアドレス、マスク、接続ルーターのIPアドレスを入れる。

bsd9_13.jpgbsd9_14.jpg

DNSの入力画面も現れるので、少なくとも一つは入れて置く。
次は、時刻合わせである。UTCにするかと聞いてくるので[No]を選び、後はAsia→Japanと選択する。

bsd9_15.jpgbsd9_16.jpg

サービスの追加の画面になるので、ntpdをマークした。
crash dumpを有効にするかどうかの画面が出てきたが、crash dumpの使い方を知らないし、disk spaceもたくさん取られるとのことなので[No]を選んだ。

bsd9_17.jpgbsd9_18.jpg

ユーザー追加画面になるので、自分をユーザーとして追加した。現れる画面は、従来から使っていたadduserコマンドと同じである。

bsd9_19.jpgbsd9_20.jpg

インストールが終わり、いよいよbsdinstallから抜ける画面が現れる。Exitを選ぶと、抜ける前にShellを起動して何か修正したくはないかと問う画面が現れるが、修正は普通にログインして行うことにして[No]を選んだ。

bsd9_21.jpgbsd9_22.jpg

bsd9_23.jpg

やっと[Reboot]の画面となった。これでインストールは終わりである。
インストールを終えて、少し戸惑ったことは、Remoteからtelnetできないことであった。
そう言えば、inetd.confの設定がなかったと思い、ローカルでログインし、inetd.confを開いてtelnetを有効にして再起動したが、やはりtelnetができない。
調べたら、何のことはない、inetdが起動していない。rc.confにinetd_enable=”YES”を追加して再起動し、ようやくtelnetができた。
Pckageの追加は、従来通りsysinstalも使えるので、普通に自分の環境を構築していける。
しかし、現在運用しているサーバーは、gmirrorでHDDをミラー構成にして使っているが、gptでミラー化はややこしそうなので、運用サーバへの適用は当面見合わせることになりそうである。FreeBSD 8.2で困っていないことでもある。

2011.09.15

Wakeup on Lan

最近のPCやサーバーのオンボードのLANポートには、Wakeup on Lanの機能が付いている。そこで、FreeBSDでこの機能を利用して、普段は予備機として電源を入れずに置いてあるサーバーに夜中にPower Onして主サーバーのデーターを送り込むことを考えた。
まず、Wakeup on Lanを受けるマシンにマジックパケットを送出するwolをインストールする。

# cd /usr/ports/net/wol
# make install clean

使い方は簡単である。
 # wol -i [ブロードキャストアドレス] [MACアドレス] とする。
サーバーのIPが 192.168.1.xxのときは、下記となる。

# wol -i 192.168.1.255 ab:13:48:78:93:b6 ← MACアドレスは、Power ONしたいサーバーのをセット。

crontabに登録してPower onし、主サーバからrsyncでデータを転送して、Shutdownするようにして目的を果たす。サーバーは、物置部屋と化しているところに置いてあるので、デスクトップから席を立ってPower Onに出向く必要がないのも便利だ。
ルーターのWR8700NにもLAN接続されているPC等をリモートでPower Onする機能があり、外出先からもPCのPowe Onができるというが、少し危なっかしい気がする。

Next »