FreeNASで作る最強のファイルサーバー(ソフト編)

前回のハードウェア構成の上、FreeNAS 0.7を使用してZFSでファイルサーバーを構成してみます。

ハードディスクにFreeNASのインストールが終わったら設定を始めます。
(FreeNAS上で設定したことは一括でバックアップがとれるので、システムHDDは1台と割り切っています。障害が出れば再セットアップの上、バックアップから設定を復元するだけです。)

SSH接続方法
サーバーラックに取り付けた場合を考えて、遠隔地から操作出来るようにします。

・ユーザーの追加
「アクセス」→「ユーザーとグループ」からユーザーを追加します。
このとき、Shellに「tcsh」、プライマリグループに「wheel」を選びます。

SSHの有効化
「サービス」→「SSH」からSSHの設定画面を開きます。
有効にチェックを入れて保存するだけで大丈夫です。

MacからのSSH接続
ターミナルを起動し、「シェル」→「新規リモート接続」の順にクリックします。
ウィンドウが出てくるので、サーバーを選び、先ほど作成したユーザー名を入力し、接続をクリック。
コンソールが開き、パスワードを聞かれるので入力。これで接続が完了。
「su」と入力後、またパスワードを問われるので入力。これで管理者権限となり、ZFS関連のzpoolコマンドも使えるようになります。

WindowsからのSSH接続
puttyなどを使えば簡単に出来るかと思います。
まだ未確認。


ZFSの設定
Web画面からすべて行えます。
少し調べれば設定方法にたどり着けると思うので、ここではかきません。

ただし、後々ディスクを追加することはコンソールからコマンドで操作しないと無理みたいです。
zpool status、zpool listで確認しながらzpool addやzpool attach,dettachなどをうまく使ってくださいw

自分はミラー構成でストレージプールに接続をかけています。
http://img.ly/eKa

FreeNASで作る最強のファイルサーバー(ハード編)

HDDを大量に接続できるハードウェア構成として以下のようなものが考えられます。
ポートマルチプライヤPMP
SATAインターフェースカードを大量に使う

ポートマルチプライヤとは1本のSATAコネクタに5台のHDDを取り付けられるよう、分岐する装置です。
その分、転送速度は遅くなりますが取り回しが楽になります。
後者の方法はその名の通り、HDD1本に対して、SATAコネクタ1本を割り当てるというものです。
今回はこの方法を使ってみたいと思います。

なぜポートマルチプライヤを使わないか?というと。
実は今までのファイルサーバー構築には使用していました。
実際に使ってみてわかることは、
・値段が高い(PMP1台につき1万円弱)
・対応しているOSが少ない
ということです。

自分が試したところ、一番安定しているのはWindowsでの使用で、Linuxでは使えることには使えましたが、実際の運用に耐えうる安定性は得られていません。
その上、Windowsでは2TBの壁があり、PMPが満足に使える環境はサーバー系OS。
最低限WindowsServer2003がないと使用することが出来ません。

以上のことからSATAインターフェースを大量に増やす方向で、大容量ストレージのハードウェア構成を決めたいと思います。
この構成ならば、Linux,Unixで使用することも容易です。

マザーボード
SATAインターフェースカードを大量に使うということから、PCIなどのバスが多く使えるマザーボードが必要になります。
今回はGIGABYTE社の「GA-P43-ES3G」(購入先:Arkネット通販 ¥9,980)を使用しました。
PCIスロットが5本、PCIExが2本ついています。
PCIスロットはすべてインターフェースカードに、PCIExpressソケットはNICとグラフィックボードに割り当てることにします。

■CPU
ZFSを導入するということからある程度のスペックが必要です。
64bitに対応していると面倒がないです。
今回は手元にあったCeleron(2.66GHz)を使うことにしました。

■メモリ
ZFSを使う上で最低512MB程度のメモリが必要です。
手持ちの2GBを2枚使用し、4GBのメモリを用意しました。

■グラフィックボード
PCIExpressタイプの適当なグラフィックボードを用意します。
安定稼働を考えると、ファンレスタイプは導入できません。
表示確認にしか使わないので、ファンがついていることを条件に一番安いものを選びました。
玄人志向の安いファン付きのモデルでいいでしょう。

NIC
PCIExpressスロットに刺さる安定しているNICということでIntelの物を使用します。
インテル PRO/1000 PT サーバ・アダプタ EXPI9400PT」
(購入先:Amazon ¥10,850)

■インターフェースカード
PCIスロット5本を使い、SATAを増設します。
RAID機能はソフトウェアで使用するので単なるインターフェースカードで結構です。
今回は玄人志向の「SATA2I4-LPPCI」を5枚用いることで、SATAコネクタを20個増設することが出来ました。
マザーボードと合わせて26個のSATAバイスが使用出来ることになります。

■HDDエンクロージャ
サーバーラックに取り付ける都合上、使用したPCケースはラックマウントケースになります。
PC本体になるラックマウントケースは、フリージアで販売されている「SKYTEC」の「SKI-4800」を使用。
http://www.freesia-net.co.jp/server/case4u.htm

HDDをマウントするエンクロージャとして「センチュリー」の「5代目 技あり!楽ラック!(CWRS5-BK)」を4個使用。
合計20台のHDDマウントに対応しました。
http://www.century.co.jp/products/pc/hdd-kit/cwrs5-bk.html

PC本体にエンクロージャが1つしか入らないため、残りの3つ(HDD 15台)は外付けする必要があります。

5インチベイが大量についているラックマウントケースとして、「IBM NetBAY 0034B0X」を使用しました。
これはDDSテープドライブを複数設置するためのテープエンクロージャで、ヤフーオークションにて入手しました。
新しく制作される方は、5インチベイが9個ある、ラックマウントケースを探し出す必要があるでしょう。


ちなみにSATAのケーブル類は、秋葉原千石電商にて格安で入手することが出来ました。
例を挙げると、一般には1000円以上するSATA延長ケーブルが200円などです。

以上、大容量NASを制作されるかたの参考になればと思います。

子ディレクトリにテキストファイル書き込み

アプリケーションを実行しているカレントディレクトリの子ディレクトリにアプリの設定などを保存したい場合の処理。


//tmpは書き込みたい内容
Dim cr as String
cr=EndOfLine.Windows //crにWindowsの改行コード(CR+LF)を代入
Dim tmp as string //tmpは書き込み内容
tmp="test"+cr+"test"
tmp=ReplaceLineEndings(tmp, EndOfLine.Unix) //tmpの改行コードをUnix(LF)に変換
//上記でWindowsを指定した意味がなくなるが、メモとしてあえて。
tmp=ConvertEncoding(tmp, Encodings.UTF8) //tmpの文字コードをUTF8に変換

Dim f As FolderItem
Dim t as TextOutputStream
f = GetFolderItem("settings") //settingsフォルダを指定
if not f.Exists then //もし存在しなければフォルダ作成
f.CreateAsFolder
end if
f = GetFolderItem("").Child("settings").Child("test.txt")
//現在のディレクトリからsettings子フォルダ→test.txtファイルを指定
t = f.CreateTextFile
t.Write tmp
//テキストファイルとしてtmpの内容を書き込み
t.Close


以上のコードが実行されると、アプリケーションがあるフォルダの下に
/settings/text.txtという具合にフォルダとファイルができあがります。


追記。
改行コードは直接
Chr(13)+Chr(10) //CR+LF (Windows)
Chr(13) //CR (Mac)
Chr(10) //LF (Unix)
と、書いてもいいのね。
ちなみに、Chr(9)とChr(8)はタブとバックスペース。

MacPortsを使う

BSDPortsのようなものをMacでも使えるようにしたものです。
X11Xcodeがインストールされていることを前提とします。

1,MacPortsのインストール
http://www.macports.org/

2,環境変数の確認
ターミナルで「echo $PATH」
/opt/local/binが先頭にきていれば大丈夫です。
きていない場合はVimなどで.bashrcと.bash_profileを作成してください。

3,MacPortsのアップデート
ターミナルで以下コマンドを実行
sudo port -d selfupdate
sudo port -d sync

4,SLコマンドを入れてみる(笑)
sudo port search sl
→SLコマンドがあることを確認
sudo port install sl
「sl」と入力してSLが走ることを確認(笑。

5,pTeXを入れる
sudo port search ptex
ptexがあることを確認
sudo port variants ptex
→インストールオプションの確認
sudo port install ptex +utf8 +no_x11

適当にTeX打って、platex ***.texでdviファイル作成、dvipdfmx **でPDFに変換できることを確認。

あとはwgetとかffmpegとかImageMagickとかgimpとかw3m?w


参考:
http://macwiki.sourceforge.jp/wiki/index.php/MacPorts
http://d.hatena.ne.jp/hakobe932/20061208/1165646618
http://d.hatena.ne.jp/akezora/20090822/1250960754

Python3を計算用途に活用する

■ 四則演算の方法

「+」 足し算
「-」 引き算
「*」 かけ算
「/」 割り算
「//」 割り算(小数点以下切り捨て)
「%」 割り算のあまり
「**」 累乗

ちなみに()でくくると優先して計算されます。

■ mathモジュールを使った高度な計算法
まず、mathモジュールを読み込むためにインポート。
import math

math.pi 円周率を返す
math.e ネピア数を返す
math.pow(x,y) xをyで累乗。つまりx**y
math.sqrt(x) xの平方根
math.sin(x) 三角関数サイン(正弦)
math.cos(x) 三角関数コサイン(余弦
math.tan(x) 三角関数タンジェント正接
math.radians(x) 角度からラジアンに変換
math.degrees(x) ラジアンから角度に変換
math.exp(x) 数学定数eのx乗
math.log(x[,底]) 自然対数。オプションで底を指定可能
math.log10(x) 10を底とした対数

■ 変数の利用と計算
a=0
などと書くと「a」という変数に「0」が代入されます。
一度変数が宣言されると、計算に使えるようになります。
a=2
b=3
a*b
(結果:6)
また、変数へ加算する表記方法としては
a=a+1
ではなく
a+=1
と表記できます。
四則演算に使用した、+, -, *, /, //, %, **など、すべて使用可能です。
しかし、a=0などと変数を宣言してからでないと使用できません。
右辺にaの変数があり、宣言されていないのに参照しようとするからです。

■ 2進数、16進数などの相互変換

リテラルによる表記方法
頭に記号をつけて表記します。
2進数の場合「0b」
8進数の場合「0o」
16進数の場合「0x」
16進数の「ff」ならば「0xff」のように。

その他、x進数から数値に変換する方法
int("11111111",2) 2進数「11111111」を数値に変換
int("12",8) 8進数「12」を数値に変換
int("ff",16) 16進数「ff」を数値に変換

数値から、2進数、8進数、16進数へ変換。
bin(x) xの数値を2進数で表記(0bXXXX)
oct(x) xの数値を8進数で表記(0oXXXX)
hex(x) xの数値を16進数で表記(0xXXXX)

このような感じに数値計算が行えます。

WindowsXPにPython3.1を入れる

Python3.1をインストールし、パスを通してみます。

http://www.python.org/download/
こちらより「Python 3.1 Windows installer」をダウンロード。
指示に従ってインストール。
この状態のままではパスが通っていません。
コマンドプロンプトを起動して「python」と入力しても何も表示されません。

システムのプロパティから詳細設定、環境変数とたどっていきます。
システム環境変数のPathに「;C:\Python31;C:\Python31\Tools\Scripts」を追記。

これでパスが通りました。

念のためデフォルトエンコードを確認。
python」と入力し、Pythonを対話モードで起動。
以下のコマンドを入力。

import sys

sys.getdefaultencoding()

utf-8ならば問題ないです。

asciiなどになっていたら以下の内容のファイルを作成。

import sys

sys.setdefaultencoding("utf-8")

C:\Python31\Lib\site-packagesに「sitecustomize.py」という名前で保存してください。


Windows用のPython統合開発環境は「PyScripter」が最強かと。
http://code.google.com/p/pyscripter/

これをインストールするとPythonの開発が楽に行えます。
標準でPython3.1対応、日本語対応。インストールするだけです。