いままでWindows7のファイル共有の仕組みを使っていましたが、2016/11/19にOSをFreeBSDベースのFreeNASにチェンジしました。理由はZFSのRAID-Zが使いたいから。
ZFSとは?
よく「最強のファイルシステム」と言われたり言われなかったりしています。Windowsで使用されているNTFS等と比べて、以下のメリットがあります。
・不意のシャットダウンでもファイルシステムが壊れない(コピーオンライトという仕組みのおかげ)
・ソフトウェアRAIDの構築かんたん
・スナップショットが一瞬で取れ、差分のみ保存する形なのでデータサイズも小さい
・破損データの自己修復が出来る
・RAID-5やRAID-6の最大の欠陥である「書き込みホール問題」がZFSでは理論的に発生しない。
・圧縮できる
と、なんか良さそうです。私は技術者ではないので専門的なことはわかりませんが、約2年実際に使用してきて、安定性は実感しています。
自作NASのOSとしてFreeNASを使用する
PCのハードウェアを用意したら、次はOSです。
名前からしてNAS用のOSであるFreeNASを使います。ベースのOSはFreeBSDのようです。
FreeNASは、PCでNAS(ネットワークアタッチトストレージ)を構築することに特化したUNIXシステム(FreeBSDディストリビューション)である。BSDライセンス下で配布されている。
とWikipediaでも言われています。非常に高機能で、
iSCSI対応(iSCSIターゲット/iSCSIイニシエータ)
ソフトウェアRAID (0/1/5 とその組み合わせ) 対応、JBOD (Just a Bunch Of Disks) 対応
rsync、Unison対応
ファイルシステム:ZFS、UFS、ext2/ext3、NTFS、FAT32サポート
ハードディスク(HDD)タイプ:パラレルATA、シリアルATA、SCSI、iSCSI、USB、IEEE 1394サポート
ディスクの暗号化:geli (GEOM eli) により動作
DDNSクライアント機能
S.M.A.R.T.対応
syslogサーバへの転送機能
SNMPモニタリング機能
ユーザ認証機能/グループユーザ管理(ローカルユーザ認証,MSドメイン認証)
電子メールログと通知レポート機能
ATAoE対応
iTunesサーバ機能
DAAPサーバ機能
UPS (Uninterruptible power supply) サポート
と、サーバー用途としては十二分の機能を備え、これらの設定は殆どがWebのGUIによってできます。コマンドを弄る必要もほとんどなしです。
FreeNASのインストール
(2017/04/04)
すでにNASは構築していたのですが、今回新たにHDDを買い足し、6TB x 6の環境にしましたので、心機一転、OSも入れ直してみます。
私が購入したHDDは、WesternDigital社のWD RED 6TBです。
「消費電力を抑え、NAS動作時の温度範囲を低温に保ちます。システムを低温に保つことで、より信頼性の高いNASソリューションを構築できます。」
「NASwareテクノロジーを搭載するWD Redドライブは、NASやRAID環境でパフォーマンスと信頼性のバランスを最適化する設計になっています。」
「デスクトップ向けハードディスクドライブは通常、NAS環境向けにテスト・設計されていません。WD Redは、NAS互換性、高い信頼性などの特徴を備えています。」
とメーカーサイトに謳われていて、今回の計画に見事にぴったりです。まさにNASのために生み出されたハードディスクですね。
ITmediaさんによると、WD Redの振動対策は他のモデルに比べてしっかりしているとのことですし、Impress Watchさんによると、ヘッドの急速な速度変化を抑える方向でファームウェアがチューニングされているそうです。やっぱりNASにはNAS向けのHDDを選ぶのが無難ですね。
今回入れるFreeNASのバージョンは、FreeNAS-9.10.1-U4です。少々古いですが、特に新しい機能もいらないし、すでにこのバージョンは僕の環境で半年動かした実績があるため、安定を求めて、同じバージョンにしました。OSのダウンロードは、https://archive.freenas.org/9.10/STABLE/9.10.2-U6/x64/FreeNAS-9.10.2-U6.isoから出来ます(直リンク)。なお、今は新しいバージョンが出ているので、そちらでもいいかと思います。公式WEBサイトはこちら。http://www.freenas.org/
ちなみに、過去バージョンのFreeNASは、https://archive.freenas.org/に格納されているようです。
上記ダウンロード先がリンク切れになっています。後日新しいリンク先を見つけ次第差し替えます。
2019/07/07追記
新しいリンク先に差し替えました。
ちなみに、2017年3月に、FreeNASバージョン10がリリースされました。バージョン10は、「FreeNAS Corral」という別の名称として大きく進化を遂げてリリースされました。
と思ったのですが、様々な不具合や不安定性などで、「Corralはやっぱやめ」となったようで、バージョン9を引き継いだバージョン11が現在の最新バージョンとしてリリースされています。
インストール手順
最初に、HDDは繋がずに、インストールするUSBメモリだけを繋いで行います。
一応、私が操作した流れを画像に収めましたので参考程度に御覧ください。
BIOS画面で、FreeNASが入ったDVDディスクをブートドライブにします。私はバッファローの外付けドライブを使ったので、それをブートドライブにして起動します。
GRUBという画面が出ます。エンターを押すか15秒くらい何もしないと、次に進みます。
しばらく、文字が流れます。
インストールメニューにやってきました。1番を選択しているので、エンターです。
どこにFreeNASをインストールしたらいいのか聞かれます。この際に、他のHDDなり何なりが接続されていると、この画面に出ます。間違えて変なところにインストールしてしまうのを避けるためにも、インストール用のUSBメモリ以外は接続しないようにしましょう。この画像の場合、da0がお目当てのUSBメモリなので、スペースキーを押して、チェックを付けます。
エンターを押します。
私の場合、すでにFreeNASがインストールされているUSBメモリに、もう一回新しくインストールしようとしているため、上の画像のようなことが聞かれます。おそらく、新品のものを指している人はこの画面は出ないんじゃないかなと思います。「Fresh Install」を選択します。
選んだUSBメモリの内容は、全部リセットされますよという警告が出ます。Yesを選択しましょう
rootユーザー(すべての権限をもった、一番偉いユーザー)のパスワードを決めます。
こんな風に*でパスワードが隠されますが、しっかりと同じパスワードを2かい入力してください。このパスワードはかなり重要なので、絶対に忘れないようにしてください。OKを選択します。
また文字が流れ出します。結構時間がかかります。3分位?
終わったらこんな画面になるので、エンターを押します。
さっきのメニューに戻ってくるので、下キーを3回押して、「Shutdown System」を選択します。OKを選択します。
これで、一旦電源が切れます。
はじめての起動
もう一度、電源をつけましょう。
初回起動は時間がかかります。
途中、点々がいっぱい表示される時もありますが、気にせず待ちましょう。
起動が正常に完了すると、モニターにはコンソール画面が表示されます
1と入力して、Configure Network Interfacesを選択します。
ここで、固定IPアドレスにすべく設定を行います。
大体次のように設定します。人それぞれのネットワーク環境があると思うので、参考程度にしてください。
設定部分のメモ。実際に打ち込む内容は赤太字で示します。
Enter an option from 1-14: 1
1) em0
Select an interface (q to quit): 1←もしネットワークインターフェースが複数あれば、その番号
Reset network configration? (y/n) n
Configure interface for DHCP? (y/n) n
Configure IPv4? (y/n) y
Interface name:em0←もしネットワークインターフェースが複数あれば、その名前
~~略~~
IPv4 Address:192.168.0.100←これがFreeNASのIPアドレスになる。サブネット番号を0にしているが、ここは個人の環境による。
IPv4 Netmask:255.255.255.0←環境によって違うが、だいたいこれでOK
IPを固定できたら、あとはWebGUIから設定を進めます。
今回ボクが使う機能は、SSH,DDNS,SMBです。
・SSHは、ターミナルで遠隔からコマンドを実行できる機能です。
・DDNSは、外出先から、FreeNASにアクセスする際に、アドレスをわかりやすくする機能です。
・SMBは、FreeNAS内のストレージを、Windowsからアクセスするために必要な機能です。
WebGUIでの設定
FreeNASを付けたまま、他のPCから、自分で固定したIPへブラウザからアクセスします。
インストール時に指定したRootパスワードでログインし、設定画面に入ります。
最初にInitial Wizardが開きますが、Exitしましょう。
ここからは、パネルごとの設定をメモしていきます。
System -> Information
Hostname:確認します(初期値:freenas.local)
特に弄る必要はありませんが、FreeNAS機を複数所有しているときは変更した方がいいですね。
System -> General
Language: EnglishのままがわかりやすくていいですがJapaneseにも出来ます。お好みです。私はEnglishのままです。
Console Keyboard Map:Japanese 106
Timezone: Asia/Tokyo
Network -> Global Configuration
IPv4 Defalt Gateway : 192.068.0.1(例。自分のルーターのIPを記入。サブネット番号を0にしているが、ここは個人の環境による。)
Nameserver 1: 192.168.0.1(これも例。自分のルーターのものを)
System -> Updates
ここから、Check Nowをクリックして、OSのアップデートをインストールすることができます。最初にやっておくと、最新に出来ていいかもしれません。私はあまりアップデートが好きではないのでしてません。
Account -> Users
rootユーザーを選択し、Modify Userをクリック
パスワードを変更するならここで
E-mail: 普段使いのメールアドレスを記入。ここにいろんな連絡メールが行く。
System -> Email
ここでは、なんかあったときにお知らせしてくれるメールアドレスを指定できる。Gmailとかでそれ用のアカウントを作っておくといいと思います。私はそうしています。以下の例はGmailを想定
From email: xxxxx@gmail.com
Gmailの送信元アドレスを記入
Outgoing mail server: smtp.gmail.com
SMTPサーバを指定します。Gmailならこれ。
Port to connect to: 465
あまり詳しくないのでわかりませんが、Gmailならこれ。
TLS/SSL: SSL
Use SMTP Authentication: Check
Username: xxxxx@gmail.com
GoogleのログインIDですね
Password:xxxxx
Password confirmation:xxxxx
Saveして、Send Test Mailを押してみて、メールが来るかチェックしましょう
Services -> SMBのスパナアイコン
NetBIOS name:お好み(例:nas これが、Windowsから見た、このサーバーの名前になります)
Workgroup:WORKGROUP(ふつうのWindows機なら、ワークグループ名はWORKGROUPになっているので、それに合わせます。)
DOS charset:CP932(日本語環境ではこれじゃないとだめらしい。とりあえず絶対これで。あまり詳しくはわかりません。)
UNIX charset:UTF-8(これも、無難な設定。今の所問題ありません。)
これでOKを押した後、SMBの欄のトグルスイッチをONにする
Services -> SSHのスパナアイコン
Advanced Modeを押す
Extra options:に、お好みに合わせ、以下を記入
PermitEmptyPasswords no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
AllowUsers xxxx
PermitEmptyPasswords noは、空白のパスワードを許可しない、という設定です。セキュリティ的に、空白のパスワードでログインできる状態にしてしまうと危険ということでこの設定を使います。
RSAAuthentication yesは、RSA暗号を使った認証のことです。
PubkeyAuthentication yesは、公開鍵認証(暗号が書かれた鍵ファイルを使ってログインする方法。パスワードより安全。詳しくは「公開鍵認証」で検索を)
AuthorizedKeysFile .ssh/authorized_keysこれが秘密鍵ファイルの場所です。
AllowUsers xxxxは、xxxxという名前以外のユーザーにはログインできなくなるため、変な海外からのアタックに対する堅牢さは上がるんじゃないでしょうか
Services -> Dynamic DNSのスパナアイコン
Provider:ここに、DDNSサービス名があれば、その設定はできます。意味がわからない人は必要ないかも。ここではhttp://freedns.afraid.org/を想定します。
FreeDNSページの管理画面から、DynamicDNSの更新URLを入手します。(例:http://freedns.afraid.org/dynamic/update.php?*****(長い文字列)*******
そこから文字列をコピーし、
Domain name:の欄に、[ドメイン]#文字列
のように入力します。
Username:にはFreeDNSに登録したIDを入力します。
Update period:3600(秒)
Forced update period:86400
ユーザーの作成
次に、ユーザーを作ります。
Account -> Users
Add User
Username:storage 正直なんでもいいですが、ストレージ用のユーザーなのでこうしました。
Create a new primary group for the user:Check
Full Name:storage
Password:xxxxx
Password confirmation:xxxxx
Permit Sudo:Check
このあたりを設定したら、一旦電源を落とし、HDDをセットして再起動します。
HDDの構成
Storage -> Volumes -> Volume Mananger
Manual Setupにて設定します
Volume name:tank
Member DiskをCtrl押しながら選択した後、
Group typeを選択します(Raid-Z2)
ここで、Deduplicationは絶対にONにしないこと。Deduplicationは、ファイルデータの重複部分を圧縮する機能らしいですが、メモリを異様に消費するらしいので、普通はオンにしません。
Add Volumeを押してしばらく待ちます。
しばらくして出て来なければ、更新してみてください
出来上がったVolumeの、下の方のVolumeをクリックして、画面下部の「Create Dataset」をクリック。
Dataset Name: storage(例)
Add Datasetをクリック。
できたDatasetをクリックし、画面下部の「Change Permission」をクリック。
Owner (user):自分の作ったユーザー
Owner (group):自分の作ったユーザーのグループ
Mode:に全部チェックを入れます。
定期スナップショットの設定
スナップショットはZFSの特徴的な機能で、変更点が少なければ素早く撮れ、容量も浪費しないので、定期的に撮っておいて損はありません。
Storage -> Periodic Snapshot Tasks -> Add Periodic Snapshot
Volume/Dataset:スナップショットしたいところ。一番上の階層を選ぶと間違いない
Recursive:チェックする
Snapshot Lifetime:スナップショットをいつまで保持するか。初期値の2周間でいいじゃないでしょうか。
Begin:ここで指定した以前の時間には撮らない。
End:ここで指定した以降の時間には撮らない。
Interval:スナップショット取得間隔
Weekday:いつやるか
このあたりは完全に人によります。僕の場合は
Begin:11:00
End:23:00
Interval:6hour
Weekday:全部
にしました
これを設定しておくと、Windowsの「以前のバージョン」機能でファイルを復元できるようになるが、あまり頻繁に取得していると、目的のバージョンを探し当てるのが大変になるデメリットもあります。でも、バックアップは取っておくに越したことはないのではないでしょうか。ただしストレージも圧迫します。
ちなみに、スナップショットは任意のタイミングで削除できます。方法はこちらにまとめています。
定期SMARTテストの設定
HDDの異常を監視するSMARTチェックをセットします
Tasks -> S.M.A.R.T. Tests -> Add S.M.A.R.T. Test
Disks:コントロールキーを押しながら全部選択
Type:Short Self-Test
Hour:Each selected hourで、4時とか、寝てるような時間を選ぶのがいいかと
Day of month:Every N day of monthで、1に指定
Month:全チェック
Day of week:全チェック
これで、1日に1回、午前4時にテストが実行されます。
続いてSMARTのレポートをメールする設定をします
Services -> S.M.A.R.Tのスパナアイコン
Email to report:自分のメールアドレス
定期Scrubs設定
スクラブは、ZFSファイルシステムの整合性をチェックして修復する機能です。ZFSはデータにアクセスがあった際に整合性チェックして不整合があれば修復する機能が実装されていますが、それはアクセスがあったデータに限られます。全データに整合性チェックを行う機能がスクラブです。あくまでデータに対して整合性チェックをするので、使用領域しかチェックできません。空き領域部分にエラーがあっても検出はできないので注意です。
ただ、スクラブの設定はデフォルトでされているので、変更したいときは以下のように変更できます。
Storage -> Scrubs
ここで、Add Scrubを押せば、スクラブのスケジュールを追加できます。すでにひとつスケジュールが入っているので、それを編集する方法もあります。デフォルトでは35日に1回されるようになってます。日数は基本的に同じ曜日に実行する事が推奨されているらしいので7の倍数がいいそうです。
データの共有
ここからが本当のNASの役割を果たす設定です。
Sharing -> Windows(SMB)
Add Windows (SMB) Shareをクリック
Advanced modeで進めます
Path:に先程作ったデータセットを指定
Name:に、共有の名前
Apply Default Permissions:はチェックを外す(オンのままだと権限設定がリセットされてしまう)
Allow Guest Access:チェック外す
追加設定(SMB)
Windows と親和性が高いファイルのアクセス制御の設定
NTFS の ACL を Samba のファイルサーバに格納するための vfs_acl_xattr というVFS モジュールがあるそうです。
LinuxのPOSIX ACLを、Windows ACLと完全に合わせる方法です。Samba4 では、Windows ACLの情報を Linuxファイルシステムの拡張属性に保存できます。これによって、Windowsとのアクセス権限設定の親和性が向上します。
Auxiliary Parameters:に、以下の文言を追加します。
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
ファイル属性に関するパラメーターの利用
Windowsのファイルには、「読み取り専用」「隠しファイル」「アーカイブ」「システムファイル」の4つのファイル属性があります。Sambaで、この属性を利用するために、以下の文言を追加します。
store dos attributes = yes
ea support = yes
「ea support」とはOS/2で利用されていたExtended Attributesの略で、ファイル属性の拡張をサポートするかどうかを判定します。
拡張属性にファイル属性を保持する設定
これを加えることで、本来は無関係であるはずの実行権ビットとファイル属性が関連してしまうことによる運用上の不都合を解消できるそうなんですが、あんまり良くわかりません。Windows上で作ったり上書きしたファイルをLinux・FreeBSD上から見ると実行権限がついてしまったりするやつの回避法だと思いますが、僕は加えてるので紹介します
store dos attributes = yes
map archive = no
map hidden = no
map system = no
map readonly = no
オプションコマンドまとめ
上で紹介したオプションをまとめると、以下になります。これをAuxiliary Parameters:に入力してください。
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
ea support = yes
map archive = no
map hidden = no
map system = no
map readonly = no
Windowsからアクセス
ついにWindowsからアクセスします。この際に自分はハマってしまったポイントとしては、以前にこういったNASにログインした事があると、前の資格情報のキャッシュが残ってしまい、アクセスが拒否されてしまうことがあるので、そのときは、コマンドプロンプトで、
net use * /DELETE
と入力して、資格情報のリセットをしてみてください。
無事アクセスできれば、一通り読み書きが出来るか確かめて、想定通りの挙動をすれば成功です。
ブートデバイスのミラーリング
FreeNASをインストールしているUSBメモリのミラーリングです。USBメモリがもう一つ必要になりますが、これでもしFreeNASを入れたUSBが死んでも、システムが破壊されません。べつにやらなくてもいいです。
System -> Boot -> Status
freenas-bootを選択し、Attachを押す
プルダウンからUSBメモリを選択し、Attach Diskボタンを選択します。
SSH公開鍵認証を使う
僕の場合、外からSSHで繋いでファイル転送とかを行ったりするので、NASをネットワークに公開しています。ただ、それすなわち、全世界から攻撃を受けることを意味するので、セキュリティはしっかりしないといけません。ということで、パスワード認証のままだといつか突破されてしまうかもしれないので、RSA暗号を使った鍵のみでログインできるようにします。
自分が作ったユーザーのホームディレクトリは、/noexistent になっていて、鍵を置くことができません。なので、ホームディレクトリを作成します。この作業はTeratermなどのターミナルで行います。一応、WebGUIの、左ペインにある、「Shell」を使ってもいいです。使いにくいですけどね。
ちなみに、下のコマンドの「#」は、ルートユーザーでのコマンドを意味します。
# cd /mnt/DATA
# mkdir home
# cd /home
# mkdir xxx
# chown xxx /mnt/DATA/home/xxx
# chgrp xxx /var/home/xxx
# exit
Account -> Users -> 自分が作ったユーザー
Modify Userをクリックし、設定画面へ
Home Directory:これを先程設定したホームディレクトリに変更
SSH Public Key:に、生成した公開鍵を入れます。ssh-rsa XXXXXといった記号の羅列のテキストです。
Permit Sudoにもチェックを入れておきます。ここからしかrootになれないようにするためです。
これで鍵認証が出来ました。次にパスワード認証を禁止します
Services -> SSHのスパナアイコン
Allow Password Authentication: のチェックを外す
さらに、Extra optionsに
AllowUsers xxxx
と書き足して、そのユーザー以外はログインできず、指定したユーザーも鍵がないと入れない用になるので、セキュリティはOKです
まとめ
これで、6TB x 6 のRAIDZ2(パリティドライブ2台)で、
実使用可能容量20TiB超のストレージが完成しました。
RAIDZ2なので、HDD2台までは破損してもデータが飛びません。安心ですね。ただし、間違ってデータを消してしまったり、ウイルスに上書きされてしまったら対処できないので(スナップショット機能である程度はなんとかなりますが)、外部バックアップはしっかりとしましょう。
参考にしたサイト
この記事を書くのに参考にしたページです。
http://000dandelion000.blog.fc2.com/blog-entry-69.html
http://kirishima.it/mt/2015/03/freenas_93_manualconf.html
http://kirishima.it/mt/2015/08/freenas_cifs.html
http://sylve.hatenablog.jp/entry/2015/02/18/223223
http://niragoma.ses-blog.net/archives/server/643.html
http://www.hara96.com/freenas/service/cifs-smb
http://damedame.monyo.com/?date=200902
http://www.nslabs.jp/samba-windows-acl.rhtml
https://blog.konata.net/server/508
https://books.google.co.jp/books?id=meQeBAAAQBAJ&pg=PA188&lpg=PA188&dq=vfs+objects+%3D+acl_xattr&source=bl&ots=6VzL50CQVE&sig=qtR09AVnenHhRYIFNSQt9Epx6XA&hl=ja&sa=X&sqi=2&ved=0ahUKEwil5N-R_InTAhXHx7wKHTQZBbwQ6AEISTAI#v=onepage&q=vfs%20objects%20%3D%20acl_xattr&f=false
https://thinkit.co.jp/article/766/1?page=0%2C1
http://bibo-log.blog.so-net.ne.jp/2010-03-01-2
http://bibo-log.blog.so-net.ne.jp/2010-04-02
https://lists.samba.org/archive/samba/2012-October/169366.html
https://books.google.co.jp/books?id=meQeBAAAQBAJ&pg=PA210&lpg=PA210&dq=map+hidden+%3D+no+map+system+%3D+no+map+read+only+%3D+no&source=bl&ots=6VzL50DSVA&sig=TOUzpUTk2bBDHz4Qvr-ddt8uV-U&hl=ja&sa=X&ved=0ahUKEwjc3NHLgIrTAhXIVLwKHRxND6sQ6AEIHTAA#v=onepage&q=map%20hidden%20%3D%20no%20map%20system%20%3D%20no%20map%20read%20only%20%3D%20no&f=false
http://ogawa.s18.xrea.com/tdiary/20100429p01.html
http://d.hatena.ne.jp/iww/20110711/1310367065
https://books.google.co.jp/books?id=t9c-CQAAQBAJ&pg=PA579&lpg=PA579&dq=map+hidden+%3D+no+map+system+%3D+no+map+read+only+%3D+no&source=bl&ots=Qb-btMShgc&sig=u_cSfmp7LyMAn8UZTSNo_bVcQ5g&hl=ja&sa=X&ved=0ahUKEwjc3NHLgIrTAhXIVLwKHRxND6sQ6AEIIDAB#v=onepage&q=map%20hidden%20%3D%20no%20map%20system%20%3D%20no%20map%20read%20only%20%3D%20no&f=false
https://blog.konata.net/server/508
http://oichinote.com/plus/2016/01/current-status-of-netatalk-and-samba-collaboration.html
https://www.slideshare.net/takahashimotonobu/samba420150809-osc-2015-kansaikyoto
http://000dandelion000.blog.fc2.com/blog-entry-90.html
http://000dandelion000.blog.fc2.com/blog-entry-92.html
http://000dandelion000.blog.fc2.com/blog-entry-82.html
http://tomono.eleho.net/2012/12/25/3753/
http://blog.pdns.jp/ssh%E3%81%AE%E9%8D%B5%E8%AA%8D%E8%A8%BC%E3%81%A7freebsd%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B%E3%80%82/
http://000dandelion000.blog.fc2.com/blog-entry-71.html
http://tydk27.hatenadiary.com/entry/20120127/1327637734
コメント