新しいサーバの整備(1日目)


先週、新しくマシンが納品されました。
しかし、ラックは未組立、ストレージやボード類もバラ買いだったので、先週の金曜日は組み立て+組み込みに費やしました。予算の枠内で物事をしようとすると、余計な時間がかかりますね。でも追加予算を交渉するのも、同じくらい時間はかかるから、結局一緒か。
ともあれ、今日から設定作業です。

<システム構成>
マザー: X7DCLi(システムは1T×2をハードウェアRAID1 済み)
エンクロージャ用のRAIDカード:RocketRAID 2522
エンクロージャ: MaxServeの8台入るやつ。
外付け用のディスク:1T×8台
OS: SuSE 11.1

RocketRAID 2522 ドライバ設定

このHighPointのボードは、ブート時に独自のBIOS画面が立ち上がり、そこでディスクの認識等を行う。
(1)ボードのBIOSのバージョンは1.1で、ホームページで公開されている最新版だった。ので、何もせず。
(2)取説に従って、ボードのBIOS画面でinitialize, creating を行う。ストレージは、RAID5で7Tの1つのディスクとして運用します。
(3)SuSE用のドライバをインストールする。幸い、11.1用のドライバがコンパイル済みでホームページから公開されていた。ありがたく頂戴してスクリプトを実行。

sh install.sh

install.shで、/lib/modules/{uname -r}/kernel/drivers/scsi/rr2522.ko が、インストールされます。次にモジュールのインストール。

modprobe sd_mod
insmod rr2522.ko (ここは実際はフルパスで指定)

この手順で行うと、insmodで「すでに動いているモジュールがあるが、置き換えるか?」と聞かれる。ということはinsmodはやらなくてもいいのか?それともrmmodしてからinsmodすべきなのか?疑問が残るが…。気持ちが悪いが、疑問は横に置いておき、デバイスとして認識できたか、確認をする。fdisk か dmesg あたりがいいかな。

# fdisk -l
Disk /dev/sdb: 7000.8 GB, 7000863801344 bytes
255 heads, 63 sectors/track, 851139 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

ディスク /dev/sdb は正常な領域テーブルを含んでいません

ということで、無事にsdbとして存在している。あとは、ext3でフォーマットかけて、適当な場所にマウントし、それがreboot時にも自動認識するように設定しよう(と、この時は考えていた…)。

fdisk /dev/sdb ←次項目で述べますが、2TB超えではfdiskは使っちゃいかんです。
mkfs -t ext3 /dev/sdb1
mkdir /work
mount /dev/sdb1 /work
vi /etc/fstab
reboot

上記の設定でサクッと行くと思っていたら、問題発生。fdisk -lでは、ちゃんと7TBのボリュームとして見えているのに、デバイスを指定してfdiskにてパーティションを切ろうとすると、終端が見えてない。どういうこと?

2TBの壁

状況を纏めておきますと…。
・kernel2.4系では2TBの壁があるらしい。でも、SuSE11.1は2.6系だから関係なし。
・SCSI2では、SCSI上のバスアドレッシングが32ビットのため2TBの壁があるらしい。SCSI3では大丈夫。
(参考)http://d.hatena.ne.jp/tsucchi1022/20081027/1225114033
ファイルシステムごとの容量の壁について。
 ext3:論理ボリュームで8TB(16TB、32TBとの記述をしている記事もあるのだがどっちだろう)。一ファイルは4TB。なお、数GBクラスの大容量ファイルを扱う場合、ファイルアクセス時にCPU利用率が上がりハングアップしてしまうなどの問題が発生する場合がある。
 ext4:1EB。一ファイルは16TB。2008年12月の2.6.28カーネルでは安定版になったとのこと。ext3との後方互換性と前方互換性がある。タイムスタンプがナノ秒単位になった。
 xfs:16EB。一ファイルは16TB。ext3に比べ、“Read-Write”の性能が15%〜30%近く優れる。
 
結局、今回の問題はこれらではなく、fdiskを使っていたことが敗因だった。
【結論】2TB超えのディスクフォーマットでは、fdiskは使えない。⇒partedを使いましょう。
(参考)http://d.hatena.ne.jp/t0m0_tomo/
(参考)http://www.miraclelinux.com/technet/faq/data/00152.html
恥ずかしながら、partedというコマンドを今まで知りませんでした。初めて使ってみます。
 (parted使用法の参考)http://nobumasa-web.hp.infoseek.co.jp/partition/parted/index.html

# parted /dev/sdb
(parted) print
モデル: HPT DISK_7_0 (scsi)
ディスク /dev/sdb: 7001GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 32.3kB 2199GB 2199GB primary ext3 , , , , , , , , , type=83, ,

このように、先ほどfdiskで作った2.2TBの領域が残っているので、消す。

# fdisk /dev/sdb ← fdiskにて、ext3で切ったsdb1を削除する。
# parted /dev/sdb ← partedで見てみる。
(parted) print
モデル: HPT DISK_7_0 (scsi)
ディスク /dev/sdb: 7001GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号 開始 終了 サイズ タイプ ファイルシステム フラグ

消せている。
パーティションテーブルがmsdosになっているため、2^32-1までしか認識できないので、gptへ変更する。ディスクラベルは、sun、bsdmac、loop、pc98、msdos、gptが指定できる。(ディスクラベルについては事項にメモあり。)
続けて、全体を1パーティションとして設定する。終端は-0で指定できる。

(parted) mklabel gpt
(parted) mkpart primary 0 -0
(parted) print
モデル: HPT DISK_7_0 (scsi)
ディスク /dev/sdb: 7001GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt

番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 17.4kB 7001GB 7001GB primary , , , , , , , , , , ,
(parted) quit

ディスクがどのようになっているか、fdiskで確認。

# fdisk /dev/sdb
バイス Boot Start End Blocks Id System
/dev/sdb1 1 267350 2147483647+ 83 Linux
/dev/sdb4 1 1 0+ ee GPT

なぜか、sdb1とsdb4がある。フォーマット時には/dev/sdb1を指定するとうまくいく。

メモ:ディスクラベル/パーティションテーブルについて

GPT(GUID Partition Table):以下、Wikiから抜粋。ハードディスクドライブ上のパーティションテーブルの配置に関する標準規格である。GPTはBIOSの使用しているマスターブートレコード(MBR)の置き換えを意図している。
LOOP: RAID/LVMを使える、直接的なディスク・アクセス(rawディスク)用。これは偽のディスク・ラベルで、Parted に仮想デバイスを単一のファイル・システムとして扱うように教えます。

つまりは、MBRを使わない時代が来る、ということなのか。時代の流れについていけてないなぁ。

ext3でフォーマット

本来なら、ext4を試したいところであるが、それば自分の作業マシンでやることにしよう。ということで、この共用マシンの外付けはext3で作る。なぜなら、今回入れたSuSEは2.6.27系につき、/proc/filesystems を見たところext4はサポートされていないから。

# mkfs -t ext3 /dev/sdb1
# mkdir /work
# mount /dev/sdb1 /work
# vi /etc/fstab
# reboot
# df
/dev/sda* 省略
/dev/sdb1 6729502012 185436 6387477528 1% /work

完了。