HalNiの雑記

備忘録を兼ねて。サーバマシンとかネットワークとか

Solaris 11.4 のGUIインストール ・ RAID-Z1 な ZFS で Samba構築

はじめに

んにちは初めまして、Harukaと申します。
HarukaのおうちファイルサーバはハードウェアRAIDを用いて、RAID5で構成しています。

f:id:v_7zrgu0:20181206112949j:plain
旧ファイルサーバ。MegaRAIDでデータ用に300GB SASを3枚束ねて運用していました。
Nehalemマシンとしては一番直近まで動いてくれていました

この構成でも不自由はないのですが、従来のストレージが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用)

Solaris 11.4
ZFS Version 6
Zpool Version 44

今更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 からダウンロードしてください!

f:id:v_7zrgu0:20181205225111p:plain

Solaris 11.4 に従来まで存在したLiveイメージは存在しません。よってインストールはテキストモードにて行うことになります。ただ、F2キーでacceptしていく、いたって単純なインストーラなので迷うことはないでしょう。

f:id:v_7zrgu0:20181213132146j:plain
最初にキーボード配列を指定する
f:id:v_7zrgu0:20181213132307j:plain
インストーラの画面はこんな感じ

インストール完了後に 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 11.4 desktop wallpaper

ショートカットも何もないシンプルなデスクトップ画面が立ち上がるはずです。 ちなみにSolarisGUIは11.4から Gnome Shell に変更になっています。

solaris 11.4 i915 sandybridge

今回の構成では無事起動時にi915なXorgのドライバが自動的に当たり、1920x1080 での表示となっています。やったね!

ZFSRAID-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イメージ です。

f:id:v_7zrgu0:20181205233331p:plain

Windows側からはこんな感じで、2.82GBのファイルとして認識されています。
これをSolaris側に転送します。

f:id:v_7zrgu0:20181206005255j:plain

うん…?なんか引っかかる… Solaris側CPU(2500K)に負荷が掛かり、書き込み速度が低下しています。

f:id:v_7zrgu0:20181208140018p:plain
CPUの負荷が上がるとスループットが低下している

そもそも、RAID-Z は設計上ディスクをいくつ束ねたところでスループットは向上しません。
詳細はこちらのサイトのブログエントリが詳しいのですが、大雑把にまとめると
RAID-5が複数のブロックへのアクセスを複数のディスクで同時に行えるのに対して、RAID-Zは1ブロック読み込む時に、パリティを除くすべてのディスクを読み込む必要がある、とのことです

ftp-adminの憂鬱 : RAID-Zは遅いよ」 より

解決するためにメモリをキャッシュとして使用する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つ転送します。

f:id:v_7zrgu0:20181205233354p:plain
Windows側からはこんな感じ

そして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で組んだ

f:id:v_7zrgu0:20181206132218j:plain
MegaRAIDに1TB HDDを3台束ねさせた、極めて安定である
おしまい