やっぱり Sun がスキ! : Weblog やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20080729 2008年 7月 29日 火曜日

ZFS boot と ZFS root がやってくる

ついにきました。

次世代ファイルシステム ZFS が、ついに / (ルート) 領域で利用することができるようになりました。
当然、インストール時に ZFS を / ファイルシステムとして(ZFS Root)指定することが可能となり、起動についても GRUB を拡張し、直接 ZFS を扱えるようになっています。(ZFS Boot)
ZFS Boot および ZFS Root は、ZFS Boot project として下記のサイトにてプロジェクトページが公開されています。

ZFS Boot project
http://www.opensolaris.org/os/community/zfs/boot/

現段階では、Solaris Express Community Edition b90 (Nevada b90) 以降のリリース、および、OpenSolaris 2008.05 において、下記のような条件の下で ZFS を / ファイルシステムとして利用することが可能となっています。

・Solaris Express Community Edition b90 以降(最新 b94, 以下 SXCE)
http://www.opensolaris.org/os/downloads/

- CUI インストラー利用時のみ UFS または ZFS を選択可能
GUI インストーラでは、UFS のみ。JumStart でも指定可能
- ディスクが複数ある場合は、ミラー構成可能。もちろん、起動できます!
- / パーティションの RAID-Z または RAID-Z2 構成は、未サポート
- x86/SPARC 版で利用可能

・OpenSolaris 2008.05
http://opensolaris.com

- / に利用できるのは、ZFS のみ
- インストール時のミラー構成は不可
- x86 のみ提供(SPARC 版は、OpenSolaris 2008.11 として提供予定)

・Solaris 10 では利用できない

・ZFS Root を利用する際、disk label は、EFI label にならない。
 従来通り、SMC label を採用しています。


また、UFS からの移行については、インストールメディアを利用したアップグレードインストールは行うことができず、LiveUpgrade を用いた方法を利用しなければなりません。
(ZFS Root から、 UFS への移行はできません)

いろいろ面倒だなぁと思うかもしれませんが、ZFS だからと言って注意する部分は、ZFS Root Dataset Name などは、インストーラの初期設定にまかせれば、難しいところはないかと思います。
OpenSolaris 2008.05 の場合は、インストーラが簡易化されているため、さらに簡単にインストールすることが可能となっています。

下記の screenshot は、SXCE のインストーラとなります。
インストール先のファイルシステムとして UFS または、ZFS を選択できるようになっています。





割り当てられたディスク(または、スライス)は、rpool という名前がつけられますが、SXCE では、任意の名前に変更することが可能です。(OpenSolaris は固定となります)
従来の / ディレクトリは、rpool/ROOT 配下に作成され、インストール時に設定した ZFS Root Dataset Name が割り当てられます。

UFS ファイルシステムの場合と比べると、下記のように変更されています。

UFS   ZFS Root
/   →  rpool/ROOT/snv_94
/boot/grub →  rpool/boot/grub
swap   →  /dev/zvol/dsk/rpool/swap (zvol emulated volume)
dump device →  /dev/zvol/dsk/rpool/dump (zvol emulated volume)

しかし、実際には、指定されたディレクトリに ZFS filesystem をマウントする zfs set mountpoint プロパティが設定され、rpool/ROOT/snv_94 は、/ (ルート)ディレクトリに mount されるため、利用に支障を来すことはありません。
今まで通りの感覚で利用することができるようになっています。

試しに、初期構成はどのような状態になっているかみてみると・・・
ZFS Root Dataset Name を snv_94 とした例が下記となります。

$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 29.0G 8.96G 117K /rpool
rpool/ROOT 14.1G 8.96G 18K legacy
rpool/ROOT/snv_94 71.8M 8.96G 7.74G /
rpool/dump 1.48G 8.96G 1.48G -
rpool/export 21.9G 8.96G 19K /export
rpool/export/home 21.9G 8.96G 21.9G /export/home
rpool/swap 1.48G 10.4G 1.24M -

mount コマンドの出力
--
$ mount -p
rpool/ROOT/snv_94 - / zfs - no
/devices - /devices devfs - no
/dev - /dev dev - no
ctfs - /system/contract ctfs - no
proc - /proc proc - no
mnttab - /etc/mnttab mntfs - no
swap - /etc/svc/volatile tmpfs - no xattr
objfs - /system/object objfs - no
sharefs - /etc/dfs/sharetab sharefs - no
/usr/lib/libc/libc_hwcap1.so.1 - /lib/libc.so.1 lofs - no
fd - /dev/fd fd - no rw
swap - /tmp tmpfs - no xattr
swap - /var/run tmpfs - no xattr
rpool/export - /export zfs - no rw,devices,setuid,nonbmand,exec,xattr,atime
rpool/export/home - /export/home zfs - no rw,devices,setuid,nonbmand,exec,xattr,atime
rpool - /rpool zfs - no rw,devices,setuid,nonbmand,exec,xattr,atime
--

上記のように ZFS Root だからといって、特にディレクトリツリーなどが劇的に変わるようなことはありません。
ZFS が提供するファイルシステムとしての基本機能は、POSIX 準拠となるため、ファイル操作を行うアプリケーションなども特に ZFS を意識する必要はほとんどありませんが、まだまだ、クリアしなければならない課題が多いのも事実です。
しかし、今後に期待できる一品に仕上がっているかと思います。

ZFS コミュニティや ZFS Boot、ZFS Root などについては、下記サイトを参考にして頂ければと思います。
さぁ、みんなで ZFS Boot!

OpenSolaris Community: ZFS
http://www.opensolaris.org/os/community/zfs/

ZFS Boot FAQ
http://opensolaris.org/os/community/zfs/boot/zfsbootFAQ

ZFS Admin Guide
http://opensolaris.org/os/community/zfs/docs/


ちなみに・・・Liveupgrade を応用すると、こんなこともできたりします・・・
--
$ env LANG=C zfs get all rpool/ROOT/snv_94
NAME PROPERTY VALUE SOURCE
rpool/ROOT/snv_94 type filesystem -
rpool/ROOT/snv_94 creation Thu Jul 17 19:20 2008 -
rpool/ROOT/snv_94 used 71.8M -
rpool/ROOT/snv_94 available 9.21G -
rpool/ROOT/snv_94 referenced 7.74G -
rpool/ROOT/snv_94 compressratio 1.11x -
rpool/ROOT/snv_94 mounted no -
rpool/ROOT/snv_94 origin rpool/ROOT/snv_94@snv_94 -
:
rpool/ROOT/snv_94 compression on local
:
--
# / が圧縮されています・・・♪