2012年11月30日金曜日

dateコマンドで現在時刻をミリ秒まで出力(UnixTimeで)

環境はLinuxで。
今どきのdateコマンドは%Nでナノ秒まで出るっぽい。
なのでそれを割ってやる。
$ echo $(printf '%ld' $(expr `date +%s%N` / 1000000))
$ 1354169981849
追記
--dateつけると任意の日時を出力できるよ。
$ echo $(printf '%ld' $(expr `date +%s%N --date "2000-11-11 12:00"` / 1000000))

2012年11月16日金曜日

【EffectiveJava輪講】5.ジェネリックス

※社内の輪講用メモ。まだ途中。

翻訳が、「ジェネリクス」ではなく、「ジェネリックス」なので、表記を合わせています。

p.n表記は、EffectiveJavaのページ番号です。

前史(ジェネリックス以前)


コレクションから読みだしたすべてのオブジェクトをキャストしていた。(挿入する型を間違えるとキャスト失敗)

現在(ジェネリックス時代)


個々のコレクションに許される型をコンパイラに伝え、コンパイラは自動的にキャストを挿入。誤った型を挿入しようとすると、コンパイル時に判明。

ジェネリックスを理解するために。変性の話。


(この辺参考URLから)























変位意味Javaでの例
共変広い型から狭い型へA<P>はA<C>のスーパータイプ
反変狭い型から広い型へ A<P>はA<C>のサブタイプ
非変型を変換できないことA<P>とA<C>の型に関係はない

Javaではすべてのジェネリック型は非変(ジェネリック型変数の変位指定はできない)。

不変であるということは、List<Object>のパラメータに、List<String>を渡すことができない。

 

No. 23 新たなコードで原型を使用しない


Javaのジェネリック対応は、過去バージョンとの互換性の維持が前提となっているため、犠牲にしている部分がある。

  • 原型(Raw Type)が使用できること

  • 変位指定ができない


要素型が不明な場合、原型を使用すると下記のように書いてしまうのはよくない(p.110)

[java]
static int numElementsInCommon(Set s1, Set s2) {
int result = 0;
for (Object o1 : s1)
if (s2.contains(o1))
result++;
return result;
}
[/java]

非境界ワイルドカード型で書きなおすと(p.111)

[java]
static int numElementsInCommon(Set s1, Set s2) {
int result = 0;
for (Object o1 : s1)
if (s2.contains(o1))
result++;
return result;
}
[/java]

  • 非境界とは?


    • 上限や下限がないこと。



原型を使用しない、の例外2つ

クラスリテラルでは原型を使用しないといけない(非境界ワイルドカード型だったらOK)

instanceofつかうとき
[java]
if ( o instanceof Set ) {
Set m = (Set) o; //Setでキャストする必要がある
}
[/java]

No. 24 無検査警告を取り除く


省略

No. 25 配列よりリストを選ぶ


なぜ配列よりリストを選ぶべきなのか?
配列は実行時の型安全は提供するが、コンパイル時の型安全は提供しない


  • 配列の特徴


    • 共変である

    • 具象化されている




配列よりリストを選ぶ例(p.119)
[java]
import java.net.InterfaceAddress;
import java.util.ArrayList;
import java.util.List;


public class sample01 {

//元のコード
static E reduce(List list, Function f, E initVal) {
E[] snapshot = (E[]) list.toArray(); //警告
E result = initVal;
for(E e : snapshot)
result = f.apply(result, e);
return result;
}

//安全にする
static E reduce2(List list, Function f, E initVal) {
List snapshot;
synchronized(list) {
snapshot = new ArrayList(list);
}
E result = initVal;
for (E e : snapshot)
result = f.apply(result, e);
return result;
}

interface Function {
T apply (T arg1, T arg2);
}

}
[/java]

以下次回に持ち越し

No. 26 ジェネリック型を使用する


No. 27 ジェネリックメソッドを使用する


No. 28 APIの柔軟性向上のために、境界ワイルドカードを使用する


No. 29 型安全な異種コンテナを使用する






参考資料


2012年10月24日水曜日

memcached-toolが無いときに

memcachedを使うときに、

$ telnet hoge-host 11211
stats
...

quit
とかして、確認することはポピュラーだと思います。

シェルスクリプトとかで操作したい時は、memcached-toolが入っていると楽ですね。
ただ、memcachedがinstallされていない鯖だと、memcached-toolも入っていないことが多いので、そういうときに使えるワンライナー
$ echo -e 'stats\nquit' | curl -s -T - telnet://hoge-hos:11211
curlかわいいよ、curl

2012年9月20日木曜日

eclipse新規設定備忘録

環境は、MacOSX Lion,Eclipse 3.7 Java EE

plugin


  • vrapper

  • Maven Integration for WTP(m2e)

  • Eclipse Color Theme

  • Properties Editor

  • FreeMarker Editor

    • ref. http://ameblo.jp/kochablo/entry-11059888121.html

prefarence


  • 文字コード(UTF-8に)
    • Preferences -> General -> Workspace
    • Text file encoding -> utf-8

  • 行番号の表示させる
    • Preference -> General -> Editors -> Text Editors
    • "Show line numbers" にチェック

  • コードフォーマッタの適用
    • Preferences -> Java -> Code Style -> Formatter
    • importしてapplyしてOK

  • カーソル位置の変数のハイライトがうまくいってなかったら
    • Preferences -> Java -> Editor -> Mark Occurences
      • Mark occurrences of the selected element in the current fileにチェックしてapplyしてOK

2012年9月14日金曜日

sqlite3のコマンド少々

個人的なメモでござる。
オフィシャルなコマンドリファレンスはココ
http://www.sqlite.org/sqlite.html

環境



  • Mac OS X Lion


MySQLでいうところの¥Gしたいとき


垂直表示をしたい時は
[bash]
sqlite> .mode line
[/bash]

MySQLでいうところの、show tables


[bash]
sqlite> select * from sqlite_master where type='table';
[/bash]

MySQLでいうところの、show create tableてきな


[bash]
sqlite> select sql from sqlite_master where type='table' and name='調べたいtable名';
[/bash]

ま、FireFoxのcookieが見たかっただけなんですが...(いつからか、Firefoxのcookieはsqlite3に格納されるようになっています)。

2012年8月18日土曜日

Mac OS X Lionでのhostsの変更を即時反映する

T/O

どうでもいいけど、Macってこんなんなのね。
[bash]
$ ls -la /etc
lrwxr-xr-x@ 1 root wheel 11 4 13 19:58 /etc -> private/etc
[/bash]

実際の変更はこんな感じ
[bash]
$ sudo vim /etc/hosts
$
$ sudo killall -HUP mDNSResponder
[/bash]
こうすればリゾルバキャッシュがフラッシュされるらしいよー。

2012年7月7日土曜日

5分で立てるweb proxy

恒久的に使うのであればきちんとセキュリティを考慮しましょう。。。

とエクスキューズしつつ、5分で立てるsquidによるhttp proxyです。

目的はとりあえずhttpが通らない環境から通したいってだけです。当たり前だけど、ホストAとホストB間はルーティングされているものとします。

環境

  • OS
    • CentOS 6.2

  • HOST
    • A:インターネットに出れる子:192.168.0.1
    • B:インターネッツに出れない子:192.168.100.x

流れ

squid入れる
$sudo yum install squid

/etc/squid/squid.conf を以下の用に

#使うポートの設定と、許可するネットワークの設定を環境に合わせる。
http_port 8888
acl hogenet src 192.168.100.0/255.255.255.0
http_access allow hogenet
http_access deny all
(他省略。あとは、環境に応じてキャッシュだったり、セキュリティの設定だったり。)

すきっど起動
/etc/init.d/squid start


んで、クライアント側に串を通して、確認。
$ export http_proxy="http://192.168.1.0:8888"
$ wget www.example.com

おしまい。(∩´∀`)∩ワーイ

2012年6月27日水曜日

python2.6でUnicodeEncodeErrorが発生した

環境



  • CentOS 5.4

  • python2.6(野良パッケージ)


現象


手元の環境で、tomahawk 0.5.2を使おうと思ったら、下記のようなエラーが
UnicodeEncodeError: 'ascii' codec can't encode characters in position 20-22: ordinal not in range(128)

対応


pythonのディレクトリに、site-packagesというディレクトリがあるかと思うので、その直下に、sitecustomize.py ってのをつくり以下の様な記述をします。
[python]
import sys
sys.setdefaultencoding('utf-8')
[/python]

これでOK。(∩´∀`)∩ワーイ

参考にさせていただきました



おまけ


tomahawk動かすのに、下記のパッケージをぼくの環境では追加導入が必要でした。(直接インターネットに出れない環境だったので大変だった。。。)

  • argparse-1.2.1

  • pexpect-u-2.5.1

  • setuptools-0.6c11

2012年6月19日火曜日

rsyncの備忘録

よく使うところを中心に。

 

素敵なオプションたち


よくある使い方


rsync -avz srcDIR/ dstDIR


  • -a


    • 元の属性を維持(できる範囲で)


  • -v


    • 詳細表示


  • -z


    • 転送を圧縮(CPUを割りと食うので注意)



ちょっと便利な使い方



  • --bwlimit


    • 帯域制限。例えば、--bwlimit=10240 とかで10Mbps制限


  • --progress


    • 転送中の情報を表示する。-vと組み合わせて使おう


  • --partial


    • 通常では転送が中断したら、部分的に転送されたファイルを削除する。--partial オプションを使うと、後の転送時にファイルの残り分を転送して高速化するように、部分的なファイルを保存してくれる。


  • -P


    • progress + partial


  • --append


    • 通信が切れた時に途中から再開してくれる。便利。




使用例


[bash]
        rsync -av --progress --partial --append --bwlimit=10240 ${IP_ADDRESS}:/hoge/fuga/ /hoge/fuga >> /tmp/hoge.log 2>&1
[/bash]

その他



  • 時間がかかるときは、--daemon してもいいですが、個人的にはscreenとかnohupとか使うのが癖になってます。


参考にしました


2012年6月13日水曜日

atime備忘録(古い情報)

ふわっとしてたので備忘録です。最近のディストリで検証とかできたらいいなぁ(遠い目)

ファイルに関する時刻






UNIX/Linuxではファイルに関して3つの時刻を記録しています。

  • atime


    • 最終アクセス時刻


  • ctime


    • 最終変更時刻


  • mtime


    • 最終更新時刻(i-node管理)



2008年にネットで話題になってた話







その他参考情報


RAID組むとき考えたこと(1)

The new RAID
autor:boboroshi

LSI MegaRAID SAS 9280-8e というイイRAIDカードを使ったので備忘録がてらのメモです。

ぼくはこれまで、ちゃんとしたRAIDカードを多用する感じで仕事してないので、こちらが参考になりました(やっ太郎ブログ

さて、今回の構成です。

今回の構成







  • 某社の1Uサーバ

  • LSI MegaRAID SAS 9280-8e

  • 某社のSAS接続ディスクエンクロージャ(SATA 2TB X 16で、RAID6)

  • CentOS 5.4

  • いわゆるDAS構成

  • 用途は巨大なファイルサーバです。NFSマウントして使用します。


考えたこと


HDDの話



  • a.(平均)シーク待ち時間

  • b.(平均)回転待ち時間(サーチ時間)

  • c.転送時間


大雑把に言うと、a + b + c = 応答時間(アクセス時間) となります。
a + b = 待ち時間 ですね。
1 / 応答時間 = IOPS

となります。
下記は、基本情報技術者試験みたいな話ですが...

a.(平均)ヘッドのシーク待ち時間


読み書きのためにヘッドが移動(シーク)するのにかかる時間のことです。通常外周と内周では速度が変わるため、平均値が使われます。

b.(平均)回転待ち時間(サーチ時間)


データが磁気ヘッドの下に来るまでの平均時間なので、最小0、最大1、なので1/2してます。
サーチ時間=1/2 * 1回転の時間
1回転の時間(ミリ秒)=60秒*10^3 / 1分間の回転数

c.転送時間


転送時間=データのバイト数 / 転送速度
転送速度=1トラックのバイト数 / 1回転の時間

つまり


当然ですが、回転数が早いほうが応答時間としては短くなります。
例えば一般的な、SATA HDDの場合、5,400rpmより、7,200rpmのほうが早いということになります。

コントローラの設定の話


write policy


今回のRAIDカードのようにバッテリーバックアップ付ライトキャッシュ(BBWC)が搭載されている場合、ライトキャッシュを有効にしたほうがよいケースが多いと思います。

当然、ライトキャッシュがあっても、書き込みデータはそこからあふれるわけですが、コントローラ側の実装により、隣接領域を連続して書き込んでくれるなど、キャッシュなしの場合に比べパフォーマンスが向上することが期待されます。

キャッシュ有効化し、キャッシュに書き込みを完了した時点で完了通知を出すのをライトバック。キャッシュを使用しない(無効化している)書き込みをライトスルーといいます。

今回はライトバックの設定としました。

read policy


書き込み同様、読み取りのポリシーもいくつかあります。

Adaptive
シーケンシャルリードと想定されれば先読みする。いわゆる混合系。

Read ahead
常に先読み

No .read ahead
先読みしない

とありますが、今回はファイルサーバなので、シーケンシャルリード主体と判断してRead aheadとしました。
DBであれば、ランダムアクセス主体なので、No .read aheadか、Adaptiveのほうがよいかもしれません。

ディスクキャッシュ


ディスクにも通常キャッシュが搭載されていますが、バッテリーバックアップが無い為、マシンのクラッシュ時には消えてしまう可能性があります。そのため、エンタープライズ系のHDDはよくデフォルトでディスクキャッシュが無効化されているのですが、されていない場合は明示的に無効化する必要があります。

Cache Policy


これいまいちよくわからなかったのですが、マニュアルを見る限り、読み取り処理を行ったあと、データをリードキャッシュに格納するかの設定っぽいです。

LSIならでは?なのかな??

Direct
キャッシュされない。ただし、Read aheadで読み込んだブロックはリードキャッシュに残る(っぽい)
Cached
すべての読み取りがキャッシュされる。

とりあえず、chachedにしてみました。が、いろいろ海外のブログとか漁った感じだと、Direct I/Oでいいのかもしれません。このへん参照。

実際の設定


[bash]
#バッテリキャッシュの強制(常時ライトバック)
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -CachedBadBBU -Immediate -LALL -aAll

#ライトバック設定
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -WB -Immediate -LALL -aAll

#read ahead設定
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -RA -Immediate -LALL -aAll

#ディスクキャッシュの無効化
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -DisDskCache -Immediate -LALL -aAll

#I/O Poclicyを設定(cached にしたけど、directのほうがよさげ)
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -Cached -Immediate -LALL -aAll
[/bash]

結果こんな感じ
[bash]
/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aAll

Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3
Size : xxx TB
State : Optimal
Stripe Size : 512 KB
Number Of Drives : 16
Span Depth : 1
Default Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Access Policy : Read/Write
Disk Cache Policy : Disabled
Encryption Type : None
[/bash]




MegaCli64のコマンド自体は、ネット上にコマンドリファレンスが転がっているので、それを参考にするのがよいかと思います。

区切りがいいので今回はこのへんで。
書ききれなかった「RAIDレベル」「フルストライプ書き込み」等については、次に触れたいと思います。

なお、当たり前ですが上記の記述は環境によって正しい場合と正しくない場合があります。

参考


これすばらしい本です

2012年6月1日金曜日

非対話型でパーティションを切る話

今どきのLinuxだと、fdiskというより、partedでいいですよね。
partedはいろいろ良い所がありますが、「--script(-s表記も同じ)」をつけると、非対話型モードとしてバッチ処理できるのがとても便利です。

下記の例はCentOS 5系での動作になります。
使用例
[bash]
#sdbのパーティションを表示
/sbin/parted --script /dev/sdb 'print'

#ディスクラベルの設定。2TB以上とかだと「mklabel gpt」とかにすればよいですね。
/sbin/parted --script /dev/sdb 'mklabel msdos'

#パーティションを作成します
/sbin/parted --script /dev/sdb 'mkpart primary 0 -0'

#適当なファイルシステムでフォーマットする
/sbin/mkfs.ext3 /dev/sdb1
[/bash]

実行例
[bash]
# /sbin/parted --script /dev/sdb 'mklabel msdos'
# /sbin/parted --script /dev/sdb 'mkpart primary 0 -0'
# /sbin/mkfs.ext3 /dev/sdb1
# /sbin/parted --script /dev/sdb 'print'

Model: xxx (scsi)
Disk /dev/sdb: 300GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 0.51kB 300GB 300GB primary ext3

[/bash]

2012年5月29日火曜日

DELLの純正USB-Ethernetアダプタのドライバ探した話

Title Onlyなんですが。。。

共用で、DELLのXPS 13っていうノートPCを会社で買ったんですが、イーサネットのポートがなく(今時のうるとらPCってやつですね)。

別売りの、USB LANアダプタ(製造元番号 : W5R0T | パーツ番号 : 750-31067)を買ったみたいだったので、いざWindows 7から認識させようと思ったけど、認識してくれない。

デバイスマネージャからは、「DAD」ヤル気のないデバイス名が表示され「?」が付いている。。。

あんまり情報無かったのでちょっと苦労したんですが、最終的に、ASIX AX88772Aってチップを使ってるっぽかったので、チップ屋のサイトからドライバ落としてきてロードしたらちゃんと使えました。

DELLのサイトちょろーっと探したけど、それっぽいの見つけられなかったなー。

ドライバ探すの地味に大変だったので、ブログってみたよ( ー`дー´)キリッ

2012年5月1日火曜日

CentOS 6.2 + e1000eでうまくいかなかった話

環境

  • OS
    • CentOS 6.2
    • Kernel:2.6.32-220.4.2.el6.x86_64

  • H/W
    • Ethernet controller: Intel Corporation 82574L
    • 某社の鯖(特に秘す)

現象


しばらく放置してると(通信した状態で)、/var/logに、こんなんでるねん。


kernel: e1000e 0000:01:00.0: eth0: Error reading PHY register


そして通信できなくなってしまう。

CentOSのbugzillaにも似たようなのがあった。
0005614: Networking: Intel NIC locks machine after a while, requiring cold reboot
http://bugs.centos.org/view.php?id=5614


どうしたか

とりあえず、CentOS6.2のe1000eは1.4.4だったので、Intelのサイトから1.9.5(当時の最新)を拾ってきて適用。

結果

だめorz

上記のbugzillaに

pcie_aspm=off

したらいいぜHAHAHAみたいなコメントがあったのでやってみる。

OK(^^)

というわけで、某環境では、grub.confに上記の起動パラメータを追加してちゃんと動いてます(今のトコ)。

2012年4月9日月曜日

最近読んだ本と、富士通のはなし

Fujitsu Grid Girls
author:scenicaviator

ぼくは富士通のインサイダーではないので、公開情報しか知らないんだけど。

結構前にプロジェクトXでもやっていたので、割と有名かもしれませんが、富士通のコンピュータ事業ってのは、池田敏雄さんというキーマンがいました。

詳細は適当にぐぐって貰えばよいですが、書籍だと



に、弟子の山本卓眞さんのインタビューが載っていて、いわゆる池田敏雄伝説みたいなのがでてきます。この「計算機や〜」も残念ながら品切れなんですが、サマリ版の新書が今はでてるっぽいです。



さて、池田さんは働きすぎて壮絶な「戦死」をとげられるわけですが、その後富士通のコンピュータビジネスは大きな問題に直面します。IBM互換の問題です。

これもぐぐってもらえばいくらでも情報がでてきますが、かいつまむと、池田さんの時代にIBM互換でないコンピュータを作ったら、ユーザがそれまでIBMのコンピュータ向けに作ったプログラムが(当然)動かず、富士通のコンピュータがあまり売れませんでした。

すでにIBMのコンピュータは世界で売れていたので、世界で富士通のコンピュータを売るためには、IBMのコンピュータと互換性のある(IBM向けにつくったプログラムの動く)コンピュータをつくって売ろうと考えたのです。それがいわゆる互換機路線。

で、こっからが本題なんですが、当然IBMが起こって、富士通側にクレームを入れてくるわけです。その交渉の内容を当事者が小説仕立てにしたのが、この2冊の本です。





著者はすでにいろんな人がネタバレしていますが、鳴戸道郎さん。2009年に亡くなっています。(富士通元副会長の鳴戸道郎氏が逝去 )

病床で書かれたと言われているのが、この2冊の小説です。
最初の「雲を掴め」のほうは、IBMと富士通の直接交渉を小説風に再現したものです。後者の「雲の果てに」は第三者機関での仲裁の舞台裏となっています。

小説としてはちょっと微妙なんですが、ルイスガースナーの「巨像は踊る」風にリアルなドキュメンタリーとして見ると、とても面白いです。アメリカ人相手の交渉や、弁護士とのやりとりは、「あーこういうの日本人苦手なんだろうなー」と思いながらも、いわゆる根性で乗り切る鳴門さんに、悲しい日本人の性を感じます。。。

ただ、この事件は、コンニチ的な意義を見出すのが難しく、「雲の果てに」の後半でも出てきますが、業界としてはメインフレームからダウンサイジングの時代となり、和解締結のあたりになると、完全にPC主導のマーケットになっているんですよね。

両者の法務部門ががんばっている間に時代が変わってしまった、というのが数少ない教訓かもしれません。

2012年3月25日日曜日

ビジネスの基本を学ぶ場所

Business Card Recycling
credit:systemonegang

大学生の時に、就職活動をしていたときだったと思うのだけれど、企業が雇いたいと思う人材の要素の一つとして、「実家が事業をやっている」というのがあると聞いたことがあった。

理由としては、身近なところで仕事のイロハを(自然に)学んでいる、という話だったが、サラリーマン家庭で育った自分としては、いまいちピンとこなかった。そのあとぐらいに、とある職場でバイトしたときに、なるほどな、と思ったことがあって、最近またふと思い出したので書いてみる。

その職場は、とある小売店だった。ターゲットとしては、地元の年配の女性向けの雑貨や衣類を扱っている店で、経営者の娘がインターネットで通販をはじめるにあたって、マークアップ的なところをやってくれるバイトを募集していたのでなんとなくjoinしたのがおいらだった。

その小売店には年配の女性のパートタイムの従業員ばかりで、当時のおいらのような金髪大学生は異質な存在だった。まぁ、それはどうでもいい。

事務所は1フロア(そう広くない)しかなく、社長と社長の娘と事務を担当している従業員とパカパカキーボードを叩くバイトのおいらが同じ部屋にいるという、結構今考えるとユニークな職場だったが、そう悪い仕事ではなかった。

応接室とかなかったので、社長宛に訪ねてくる来客も、背中の来客コーナーで話をしているので、中小企業の社長さんってのはこんな人達を相手にしてるんだなーと、関心した覚えがある。

当時社長のもとによくきてたのは


  • 税理士

  • 証券会社の営業

  • 地元の経済団体の人

  • 取引先の営業

  • 社長仲間


などなど

そこで交わされる話題は、ミクロな話ではあるんだけど、生きた経済の話だった。
たしかに、子供の頃からそういう親をみて育つと、会社を経営したり、事業をまわりたり、というのはそーゆーことなのか、とイメージは付きやすいと思う。

さて、翻ってみてたとえば自分だと、サラリーマン家庭に育って、分業が進んでいる大きな企業に就職したりしたので、法律的な部分だったり、経理的な部分だったり、契約的な部分だったり、自分で関わっていない部分が多いので、商売の基本みたいなものはぜんぜんわかってないなーと思ったりするのだ。

2012年2月7日火曜日

ソフトウェアRAID(MD)とgrubの備忘録

要するに、ソフトウェアRAID(RAID1構成)で、ディスクが1本死んだ時の対応のハナシ


珍しく、mdとか使ったので備忘録。
環境はCentOS 6.2。SATA接続のsdaとsdbというDISKが刺さっています。

ま、ミラクル・リナックスさんの「ブートディスクをソフトウェア RAID 1 (ミラーリング) に構成する場合、2本目のディスクに GRUB を手動でインストールしなければなりません。
インストールしない状態でもしも1本目のディスクが壊れた場合、2本目のディスクには GRUB が入っていないため、システムが起動しません。
」って話です。リンク先見てしまえば、下記はおまけみたいなものです。。。

まず、Kickstartで下記のようなスライスを切りました。

clearpart --all --initlabel

part raid.1 --size 100 --ondrive=sda
part raid.2 --size 100 --ondrive=sdb
part raid.3 --size 2048 --ondrive=sda
part raid.4 --size 2048 --ondrive=sdb
part raid.5 --size 30720 --ondrive=sda
part raid.6 --size 30720 --ondrive=sdb

raid /boot --fstype ext4 --level 1 --device md0 raid.1 raid.2
raid swap --fstype swap --level 1 --device md1 raid.3 raid.4
raid / --fstype ext4 --level 1 --device md2 raid.5 raid.6

これだと、sdbにgrubがなくて、sdaが死んだ時に、再起動してもあがってこないというちょっとだけ困ったことになるので、Kickstartに以下の記述を追加しました。

cat </grub/raid1.grub
root (hd1,0)
setup (hd1)
quit
EOF

grub --batch < raid1.grub


grubコマンドでsdbにもインストールしてあげればよいわけですな。めでたしめでたし。
試しに、sdaを抜いてテストしたところちゃんとsdbにて、bootしてきました。

あと、DISKを抜き差ししたときに、


mdadm --manage /dev/md2 --add /dev/sdb1


とかしようとしたら、「mdadm --zero-superblock /dev/ほげほげ しなされ」みたいに怒られたので


mdadm --zero-superblock /dev/sdb1

とかちゃんとしてあげないといかんらしいです。

ちなみに、新品のDISKの場合は、ちゃんとスライス切ってあげないといけないのは言うまでもありませんねー。

2012年1月10日火曜日

WEBサービス各社のノウハウ本

これ、ただのぼくの書棚の備忘録です。
なので、世の中すべては網羅してません。
当たり前ですけど、扱ってる分野はバラバラです。
Google本は溢れているので抜いてあります。

サイバーエージェント


MySQLによるタフなサイトの作り方




はてな/Klab


[24時間365日] サーバ/インフラを支える技術




[Web開発者のための]大規模サービス技術入門




Flickr


スケーラブルWebサイト




キャパシティプランニング




livedoor


4Gbpsを超えるWebサービス構築術




mixiプラットフォーム上の運用ノウハウ集(カヤック等)


mixiアプリ開発&運用コンプリートブック




米ヤフー


ハイパフォーマンスWebサイト




続・ハイパフォーマンスWebサイト ―ウェブ高速化のベストプラクティス