はじめに
こんにちは初めまして、Harukaと申します。
HarukaのおうちファイルサーバはハードウェアRAIDを用いて、RAID5で構成しています。
この構成でも不自由はないのですが、従来のストレージが300GBx3の600GBしかなかったこともあり、ディスクの入れ替えに合わせて近年話題のソフトウェアレベルによるRAIDを構築してみることにしました。
openSUSEを用いたZFS on Linuxも検討したのですが、自分の環境だと上手くプールが構築できなかったこともありこの際ZFSをネイティブサポートしているSolarisを触ろう!となった次第です。
幸運なことに、2018年の8月末に5年ぶりにメジャーバージョンアップが行われ、Solaris 11.4 がリリースされています。 まだまだSolaris11.4の情報が少ないようですので、今回はZFSを触ってみるついでにSolarisにも触れてみます。
今回の試験環境について簡単に紹介。ファイルサーバ用途での検証なので、あえてベアメタルで動かしています。
Core i5 2500K
RAM 6GB
ASUS P8H77M
3.5 inch 1TB x3(/tank に割り当て) 2.5inch 160GB x1 (OS用)
今更Sandyか!と笑われそうですが 家に余っていたのがこれしかない Solaris 11.4 のi915グラフィックドライバがHaswellまでしか対応しておらず、Broadwell以降はVESAドライバでの認識 (!)になってしまうことから、GUIを触ってみたかったのであえてレガシーかつコンシューマ向けな構成にしています。
ここでも
OracleのSolarisに対する投げやり加減
がうかがえますね…
-米オラクルがSolaris関連の従業員をほぼ全員レイオフしたとの報道
前書きはこのくらいにしておいて、作業を開始します。
Solaris textインストールからのGUI化
Solaris は現在、周辺ソフトウェアの開発や教育目的の使用においてSolarisの利用を無償化しています。
OlacleのHPから
Download → IT Infrastructure → Solaris 11
からダウンロード可能です。
www.oracle.com/technetwork/server-storage/solaris11/downloads/install-2245079.html
日本Oracleのサイト (https://www.oracle.com/jp/index.html) からダウンロードしようとすると11.3までしかダウンロードできません。11.4をダウンロードする場合は oracle.com からダウンロードしてください!
Solaris 11.4 に従来まで存在したLiveイメージは存在しません。よってインストールはテキストモードにて行うことになります。ただ、F2キーでacceptしていく、いたって単純なインストーラなので迷うことはないでしょう。
インストール完了後に GUIパッケージを追加します。 Solarisのパッケージ管理システムは「pkg」です。またデフォルトで sudo を用いてスーパーユーザに昇格出来るので楽ですね。
sudo pkg update した後に sudo pkg install solaris-desktop してあげましょう。
haruka@Solaris-P8H77M:~$ sudo pkg install solaris-desktop Packages to install: 357 Mediators to change: 1 Services to change: 17 Create boot environment: No Create backup boot environment: No DOWNLOAD PKGS FILES XFER (MB) SPEED driver/graphics/nvidia 44/357 16532/61930 240.0/958.4 934k/s library/desktop/webkitgtk4 143/357 46697/61930 519.9/958.4 1.1M/s library/python/pyatspi2-34 213/357 52712/61930 627.1/958.4 272k/s Completed 357/357 61930/61930 958.4/958.4 539k/s PHASE ITEMS Installing new actions 76265/76265 Updating package state database Done Updating package cache 0/0 Updating image state Done Creating fast lookup database Done Updating package cache 1/1 haruka@Solaris-P8H77M:~$
インストールが終わったら sudo reboot するとGUI画面が立ち上がります。
ショートカットも何もないシンプルなデスクトップ画面が立ち上がるはずです。 ちなみにSolarisのGUIは11.4から Gnome Shell に変更になっています。
今回の構成では無事起動時にi915なXorgのドライバが自動的に当たり、1920x1080 での表示となっています。やったね!
ZFSでRAID-Zのストレージプールを作成
SolarisではZFSがネイティブサポートされているため、ZFSプールを作成するのはとても容易です。
Zpoolの作成には、
sudo zpool create tank raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0
のように、ディスク名を用いて指定します。
上記の例では、zpoolを計5つのディスクを使用して/tankをマウントポイントとしてRAID-Z(1)で構築、という意味になります。
Solarisの場合、ディスク名は sudo format で確認できます
haruka@Solaris-P8H77M:~$ sudo format Password: Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c2t0d0 <Hitachi-HTS545016B9A300-PBBO-149.05GB> /pci@0,0/pci1043,84ca@1f,2/disk@0,0 1. c2t1d0 <Hitachi-HTS545016B9A300-PBBO-149.05GB> /pci@0,0/pci1043,84ca@1f,2/disk@1,0 2. c2t2d0 <ATA-ST31000340NS-SN06-931.51GB> /pci@0,0/pci1043,84ca@1f,2/disk@2,0 3. c2t3d0 <Hitachi-HDS721010CLA332-JP4O-931.51GB> /pci@0,0/pci1043,84ca@1f,2/disk@3,0 4. c2t4d0 <SAMSUNG-HD103SI-1AG0-931.51GB> /pci@0,0/pci1043,84ca@1f,2/disk@4,0 Specify disk (enter its number): ^C haruka@Solaris-P8H77M:~$
今回は1TBのHDDを3台束ねたいので、
c2t2d0 , c2t3d0 , c2t4d0
を指定します。
sudo zpool create tank raidz c2t2d0 c2t3d0 c2t4d0
正常に構築できた場合、コンソールには出力されません。 よって zpool status から状態を確認します。
haruka@Solaris-P8H77M:~$ zpool status -v tank プール: tank 状態: オンライン スキャン: 何も要求されませんでした 構成: NAME STATE READ WRITE CKSUM tank オンライン 0 0 0 raidz1-0 オンライン 0 0 0 c2t2d0 オンライン 0 0 0 c2t3d0 オンライン 0 0 0 c2t4d0 オンライン 0 0 0 エラー: 既知のデータエラーはありません haruka@Solaris-P8H77M:~$ zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 148G 11.2G 137G 7% 1.00x オンライン - tank 2.72T 178K 2.72T 0% 1.00x オンライン - haruka@Solaris-P8H77M:~$
これでRAID-Zのプールが/tank にマウントされているはずです。
RAID-Zプール上でSamba共有の有効化
今回の目的でもあるファイルサーバ機能を先ほど作成したRAID-Z上に設定します。
まず、/tank内にSamdaに割り当てるプールを作成します。
haruka@Solaris-P8H77M:~$ sudo zfs create tank/samba
Solarisには標準でSambaサーバ機能がありませんので、追加します。
haruka@Solaris-P8H77M:~$ sudo pkg install samba
Sambaの設定は人それぞれだと思うので割愛します。 Sambaを触ったことがない人は ArchWikiのSamba あたりを参照すると詳しい解説があるはず。
SolarisでのSambaサーバの構築時に注意すべきポイントを挙げるならば、
・/etc/samba/ に 置くべき smb.conf がデフォルトでは存在しない
・Linuxではないので sudo systemctl enable ~ が効かない
といったところでしょうか。
前者に関して自分はデフォルトで置いてある smb.conf.default を samba.conf にcpしてから作業を行いました。
後者に関しては、Solaris では
haruka@Solaris-P8H77M:~$ sudo sudo svcadm enable svc:/network/samba:default haruka@Solaris-P8H77M:~$ sudo sudo svcs svc:/network/samba:default
とすることでサービスを立ち上げることができます。
WindowsマシンからIPを叩いてSolaris上のディレクトリへアクセスできれば完了です。
1TB x3 のRAID-Z構成なので、1.78TB と認識されているはずです。
ストレージの評価
みなさんお待ちかねの計測を行っていきます。
今回はZFSの機能である圧縮機能「LZ4」を有効にします。
haruka@Solaris-P8H77M:~$ sudo zfs set compress=lz4 tank/samba haruka@Solaris-P8H77M:~$
まず、Windows上からISOファイルを1ファイル送ってみます
転送するファイルは Winsows10 の 1803 x64 なISOイメージ です。
Windows側からはこんな感じで、2.82GBのファイルとして認識されています。
これをSolaris側に転送します。
うん…?なんか引っかかる…
Solaris側CPU(2500K)に負荷が掛かり、書き込み速度が低下しています。
そもそも、RAID-Z は設計上ディスクをいくつ束ねたところでスループットは向上しません。
詳細はこちらのサイトのブログエントリが詳しいのですが、大雑把にまとめると
RAID-5が複数のブロックへのアクセスを複数のディスクで同時に行えるのに対して、RAID-Zは1ブロック読み込む時に、パリティを除くすべてのディスクを読み込む必要がある、とのことです
解決するためにメモリをキャッシュとして使用するARCやSSDを使用するL2ARCなどの機能があるのですが、根本的な解決になっていないのは皆さん理解いただけると思います。
閑話休題、先ほど転送したISOイメージについて、Solaris側からファイルを確認してみます。
haruka@Solaris-P8H77M:/tank/samba$ ls -lha total 5872743 drwxrwxrwx 2 root root 5 Dec 6 06:46 . drwxr-xr-x 3 root root 3 Dec 1 22:32 .. -rwxr--r-- 1 haruka staff 2.8G Sep 24 22:23 Win10_1803_Japanese_x64.iso -rwxr--r-- 1 haruka staff 20 Dec 2 23:45 WinTEST.txt -rw-r--r-- 1 root root 0 Dec 2 09:00 test.txt haruka@Solaris-P8H77M:/tank/samba$ zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 148G 11.2G 137G 7% 1.00x オンライン - tank 2.72T 4.20G 2.71T 0% 1.00x オンライン - haruka@Solaris-P8H77M:/tank/samba$ rm /tank/samba/Win10_1803_Japanese_x64.iso haruka@Solaris-P8H77M:/tank/samba$ zpool list rpool 148G 11.2G 137G 7% 1.00x オンライン - tank 2.72T 242K 2.72T 0% 1.00x オンライン - haruka@Solaris-P8H77M:/tank/samba$
何故か2.8GBのファイルを置いただけで4.2GB消費されていますね…
ここで、ZFSの特徴の一つである重複排除機能(dedup)を有効にしてみます。
これまではdedup 無効でした
haruka@Solaris-P8H77M:~/txt$ sudo zfs get dedup tank Password: 名前 プロパティー 値 ソース tank dedup off デフォルト haruka@Solaris-P8H77M:~/txt$
/tank において dedupを有効にしてみます
haruka@Solaris-P8H77M:~$ sudo zfs set dedup=on tank Password: haruka@Solaris-P8H77M:~$ sudo zfs get dedup tank 名前 プロパティー 値 ソース tank dedup on ローカル haruka@Solaris-P8H77M:~$ sudo zfs get dedup tank/samba 名前 プロパティー 値 ソース tank/samba dedup on tank から継承しました haruka@Solaris-P8H77M:~$
次に、重複排除効果を期待して、Winsows10 の 1803 1607 1511 それぞれ x64 ISOファイルを計3つ転送します。
そしてSolaris側から確認してみます。
haruka@Solaris-P8H77M:/tank/samba$ ls haruka@Solaris-P8H77M:/tank/samba$ zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 148G 11.2G 137G 7% 1.00x オンライン - tank 2.72T 244K 2.72T 0% 1.00x オンライン - haruka@Solaris-P8H77M:/tank/samba$ ls Win10_1803_Japanese_x64.iso haruka@Solaris-P8H77M:/tank/samba$ zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 148G 11.2G 137G 7% 1.00x オンライン - tank 2.72T 4.22G 2.71T 0% 1.00x オンライン - haruka@Solaris-P8H77M:/tank/samba$ ls Win10_1607_Japanese_x64.iso Win10_Japanese_x64.iso Win10_1803_Japanese_x64.iso haruka@Solaris-P8H77M:/tank/samba$ zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 148G 11.2G 137G 7% 1.00x オンライン - tank 2.72T 14.7G 2.70T 0% 1.00x オンライン - haruka@Solaris-P8H77M:/tank/samba$
dedup 有効にしたところ、Win10_1803のファイルだけで4.2GB → 4.22GB と容量が増えてしまいました (?)
3ファイルの合計は14.7GBを示しており、ここでも重複排除効果どころかLZ4 の圧縮効果さえ微塵も感じられません。
圧縮や重複排除についてはテキストファイルなどに効果を発揮するのでしょうか、少なくても同一でないISOイメージに関しては効果を感じることは出来ませんでした(個人的感想)。
全くの同一なISOイメージでもテストしてみます
haruka@Solaris-P8H77M:/tank/samba$ zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 148G 11.2G 137G 7% 1.00x オンライン - tank 2.72T 14.7G 2.70T 0% 1.00x オンライン - haruka@Solaris-P8H77M:/tank/samba$ ls Win10_1607_Japanese_x64.iso Win10_Japanese_x64.iso Win10_1803_Japanese_x64.iso haruka@Solaris-P8H77M:/tank/samba$
ここでファイルをコピー
haruka@Solaris-P8H77M:/tank/samba$ zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 148G 11.2G 137G 7% 1.00x オンライン - tank 2.72T 14.7G 2.70T 0% 2.00x オンライン - haruka@Solaris-P8H77M:/tank/samba$ ls Win10_1607_Japanese_x64 - コピー.iso Win10_1803_Japanese_x64.iso Win10_1607_Japanese_x64.iso Win10_Japanese_x64 - コピー.iso Win10_1803_Japanese_x64 - コピー.iso Win10_Japanese_x64.iso haruka@Solaris-P8H77M:/tank/samba$
流石に同一ファイル同士の場合、dedupは機能していました
まとめ / おわりに
この記事ではSolaris 11.4 のインストールからGUI化・ZFS上でのSambaの構築を行いました。 RAID-Zによるプールのスループットはシーケンシャルライトで100Mbpsを割り込むことが多々発生し、結果としてディスク単体のスループットよりも大幅に悪化しました。
おうちLANは1GbEしか引いていないので、ネットワーク越しのスループットは理論値125MB/s
ちなみにディスク単体のスループットは150MB/s程度 、ディスク単体にデータ転送すると100MB/s程度は安定して出続けるものを使用しています。
原因をして考えられることはCPUのパワー不足であり、2500Kでは力不足、よりコアクロックの高いものを使用する必要がありそうな気がします。
Ryzen5 2600X や Core i3 7300 あたりで誰か検証してほしい
もっとこれが知りたいなどがあれば、Twitterに
リプでも飛ばしてください。まあ身内向けの記事なので、直接聞いてくれた方が助かります(笑)
最後まで読んでいただき、ありがとうございました。
参考文献
・Oralce.com - RAID-Z ストレージプールを作成する
https://docs.oracle.com/cd/E19253-01/819-6260/gcvjg/index.html
・ftp-adminの憂鬱 - RAID-Zは遅いよ
ftp-admin.blogspot.com
・fujitsu.com - Solaris フリーソフトウェア導入手順書-Samba編-
http://www.fujitsu.com/jp/documents/products/computing/servers/unix/sparc-enterprise/technical/documents/samba.pdf
追伸
結局使い勝手がよろしくなかったので、HDDを全部PRIMERGYに載せ替えてRAID5で組んだ
おしまい