Nexenta (OpenSolaris) で ZFS を (1)
一瞬でのバックアップを実現するSolaris ZFS (1/4):OpenSolarisで始めるブログサーバ構築(4) - @IT を読んで ZFS を試したくなったので Nexenta Core という OpenSolaris カーネルベースの distribution でいじってみました。
ZFS って?
詳しくは前掲の記事や ZFS - Wikipedia を参照してください。
- Logical Volume Management
- Journaling File System
- RAID
- Snapshot
が All in One な file system です。
さいしょ,それ LVM でできるよと思ったのですが,http://www.unixconsult.org/zfs_vs_lvm.html を読んだところ Linux LVM に比べいくつか抜きん出たところがあります。
ZFS を利用するには
ZFS は OpenSolaris の一部としてオープンソースになっています。なので他の OS (FreeBSD 7 など) に導入されたりしてます。
Linux ではどうかというと,ライセンス上の問題からカーネルに組み込むわけにいかず FUSE としての実装になってます。このため,また,こなれていないこともあってかパフォーマンスや安定性はよくないようです(⇒ zfs-fuseを調べる - 夜更かし日記 (2008-01-03))。
ということで安定した ZFS を使いたいのであれば,
- Solaris 10
- OpenSolaris ベースの OS
- FreeBSD 7.x
が選択肢になります*1。
Solaris 10 はいまや無料で入手・運用できるのでこれを使ってもよかったのですが,今回は Nexenta Core を利用してみました。
Nexenta (Core) って?
OpenSolaris はソースコードの公開自体が目的であり,OS の名称ではありません。実際には(先にあげたように)それを元にした数種類のディストリビューションがあります。
Nexenta はそのような普通の OpenSolaris リリースとは異なり,ユーザランドのプログラム・環境として Debian GNU/Linux*2を利用しています。なので apt も使えます。
つまり
- OpenSolaris ベースの kernel
- OpenSolaris ベースの user land programs(おもに OS の根幹に関わるもの)
- Ubuntu ベースの user land programs (GNU softwares 等)
を組み合わせたものが Nexenta なのです。おもしろそうですね。
Nexenta Core は,この Nexenta の minimum な core 部分です。といってもサーバとして動かすのに必要なものは apt も含めあらかた入っているので,デスクトップ環境として使うのならこれをベースに apt-get install
でいろいろインストールしていけばよいのでしょう(試してないですが)。今回は ZFS を使いたいのでこの Core System だけで遊んでみます。
Nexenta のインストール
Nexenta のページ から Nexenta Core の ISO イメージをダウンロードしてインストールするだけです。Debian-installer とも anaconda とも違う独特のインタフェースです。ま,根幹部分だけなのでインストールの際に設定しなければいけない項目もそう多くありません。
ただし。
どうもインストーラがおかしいのか,/
(Root) と Swap 以外のスライス*3を設定しても再起動時にうまく mount してくれません。なので,ZFS で遊ぶ用の容量を差し引いて Root 用のスライスのサイズを設定し,残りはインストーラでは放置しておきました。
ZFS 用スライスの準備
無事インストールして再起動できたら,ディスクの空き領域を ZFS 用に確保します。
Solaris でディスクのスライス等をいじるには format
コマンドを利用します。
dayflower@myhost:~$ sudo format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c0d0 <DEFAULT cyl 4092 alt 2 hd 128 sec 32> /pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0 Specify disk (enter its number): 0 selecting c0d0 Controller working list found [disk formatted, defect list found] /dev/dsk/c0d0s0 is part of active ZFS pool syspool. Please see zpool(1M). /dev/dsk/c0d0s7 is currently used by swap. Please see swap(1M). FORMAT MENU: ...... snip snip snip ...... format> verify Primary label contents: Volume name = < > ascii name = <DEFAULT cyl 4092 alt 2 hd 128 sec 32> pcyl = 4094 ncyl = 4092 acyl = 2 bcyl = 0 nhead = 128 nsect = 32 Part Tag Flag Cylinders Size Blocks 0 root wm 3 - 2045 3.99GB (2043/0/0) 8368128 1 unassigned wm 0 0 (0/0/0) 0 2 backup wu 0 - 4091 7.99GB (4092/0/0) 16760832 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 2047 - 2300 508.00MB (254/0/0) 1040384 8 boot wu 0 - 0 2.00MB (1/0/0) 4096 9 alternates wm 1 - 2 4.00MB (2/0/0) 8192
verify
で現在のパーティション情報を表示させます。Partition#2 はディスク全体を示すものであり 8GB 近くあることがわかります。ざっと眺めると,先頭に Root,その次に Swap が確保されており,シリンダ番号 2301 以降が使われていないようです。
partition
で Partition#3 として ZFS 用のスライスを確保します。
format> partition PARTITION MENU: 0 - change `0' partition 1 - change `1' partition 2 - change `2' partition ...... snip snip snip ...... partition> 3 Part Tag Flag Cylinders Size Blocks 3 unassigned wm 0 0 (0/0/0) 0 Enter partition id tag[unassigned]: Enter partition permission flags[wm]: Enter new starting cyl[0]: 2301 Enter partition size[0b, 0c, 2301e, 0.00mb, 0.00gb]: 1gb
partition id tag
というのはある限られた id tag しか設定できないので,今回のような汎用な用途であれば unassigned
のままにしておきます。先頭シリンダとして 2301 を指定し,サイズとして 1GB を指定しました(例示されているように,ブロック数やシリンダ数,終了シリンダ番号等でも指定できます)。
新しいパーティション情報を print
で確認します。
partition> print Current partition table (unnamed): Total disk cylinders available: 4092 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 3 - 2045 3.99GB (2043/0/0) 8368128 1 unassigned wm 0 0 (0/0/0) 0 2 backup wu 0 - 4091 7.99GB (4092/0/0) 16760832 3 unassigned wm 2301 - 2812 1024.00MB (512/0/0) 2097152 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 2047 - 2300 508.00MB (254/0/0) 1040384 8 boot wu 0 - 0 2.00MB (1/0/0) 4096 9 alternates wm 1 - 2 4.00MB (2/0/0) 8192
オーバーラップもなく 1GB の領域が確保されそうです。
まだディスクに書き込んでいないので label
でこのパーティション情報を書き込みます。
partition> label Ready to label disk, continue? y partition> quit ...... snip snip snip ...... format> quit
これで c0d0s3 として 1GB のスライスを確保しました。
ここまででずいぶん長くなったので続きます。