2010年7月30日

autofsとsshfsの組み合わせの覚え書き

たくさんのHDDを積んだファイルサーバを複数台ネットワークで接続して使っているため、autofsとsshfsを組み合わせて使用しております。
結構設定が面倒だったので、自分用に忘れない為の覚え書きとして記します。
検索エンジンとかで調べてもトラブル時の対応とか全然わかんなくて困ったし(苦笑)。
一応Debianでの事例につき、Debian及びUbuntu以外のディストリビューションについては微妙に手順や記述内容が異なるかもしれません。

sshfsをコマンドラインでの実行は
# sshfs -o fuse,allowother user@host:/dir
といった感じ。
ここまでのsshfs自体の導入の説明はしません。上述の様にすぐに接続出来る状態である事を前提にautofsでの設定方法を説明いたします。

autofsがすでにインストールされている段階であるとして
/etc/auto.master の記述は

/foo /etc/foo.sshfs --timeout 0 --ghost

/fooはローカルPCのmount先の1層上のディレクトリを記述。
このディレクトリは存在しない状態で構わない(autofsを動かすと作成され、止めると消されるため)。
foo.sshfsは適当な名前でよい。このファイルの内容についてはこの後説明する。
--ghostは実際にアクセスされるまでmountしない設定。--timeout 0は自動切断をしない。

/etc/foo.sshfs の記述(auto.masterで指定したものであればファイル名は任意でよい。ファイルは644あたりにしておくこと、755などの実行属性が付いていると正常に動作しません)

data --ftype=fuse,allow_other sshfs\#user@host:/dir

先頭のdataが実際にmountされるディレクトリになる。前述のauto.masterで指定した/fooの下層となり、実際には/foo/dataがmount対象となる。
--ftype=fuse,allow_otherはfuseを使用し、他のユーザでもアクセス可能にする意味。他にも読み込み専用であるroなどを付ける場合もある。
sshfs\#user@host:/dirの部分が接続先のホスト名、ログインユーザ名、対象となるホストのディレクトリを示す。要注意事項として、sshfs\#の様に#の前に\(バックスラッシュ)を入れないと、missing hostとなってしまい接続に失敗します。

これで、autofsを開始すれば/foo/dataへアクセスすると自動でmountしてくれるようになります。
なお、autofsでmountさせる場合は、/etc/fstabへの記述をする必要はありません。


2009年9月 2日

Marvell's 88SE6480 @Debian part4 HDD認識!

さて、前回に引き続きSUPERMICROの8ch SASカード、AOC-SASLP-MV8をDebianで使う記事です。
話を最初から振り返ると、自宅ファイルサーバを構築しようとするとどうしても大容量HDDであっても接続出来るHDDの台数の限界というものがありまして、うちの場合はオンボードで8portのSATAを使える有り難いマザーボードなのですが(現在グラフィックオンボードでSATAのポート数はおそらくこのマザーが最大数 GIGABYTE GA-G33-DS3R)、そうするとHDDを更に増設するにはSATA拡張ボードが必要になります。PCIのものであれば、玄人志向より2portと4portが安価で入手出来る価格で販売されておりますが、PCIeのものでは、2portは安価ですが4port以上になるといきなりRAID仕様の高価品になってしまいます。
そこで、見つけたのがSUPERMICROのAOC-SASLP-MV8というPCIe(X4)の8port SASカードで、RAID機能が省かれているために価格も18,000円程度と相当安く購入する事が可能です。 そこで早速飛びついて購入はしてみたわけですが、付属のドライバはRedHatやSUSE、FedoraなどのディストリビューションのみでDebianで使おうにもドキュメントにあるようなソースは付属しておらず、メーカーに問い合わせても提供していないと言われる始末。
Debianのパッケージの方で正式対応するまで待とうかとか諦めていた所に、ドライバの開発者がいることがわかり、情報を集め、ソースをコンパイルする所までが前回part3までのあらすじとなります。

今回はその続きになります。
ソースに付属のREADMEを読み進めると、ドライバのコンパイルが終わったらドライバのロードが必要との事で

# modprobe libsas
# insmod scst.ko
# insmod mvsas.ko


という感じでドライバのロードを行います。READMEではinsmod scst.koの行が抜けておりましたが、これがないとmvsas.koのロードに失敗するみたいですので追加しております。

この状態で
/sys/class/scsi_host
を参照すると、host0~host?までの複数のhost?が見えると思います。この中のおそらく一番番号が新しいものがこのカードにあたります。

# cat /sys/class/scsi_host/host16/target_mode

という風に実行して、
phy  dev sas address     attach dev type   attach sas address  target mode
0    5003048000805890                      0                   0             
1    5003048000805890                      0                   0             
2    5003048000805890                      0                   0             
3    5003048000805890                      0                   0             
4    5003048000805890                      0                   0             
5    5003048000805890                      0                   0             
6    5003048000805890                      0                   0             
7    5003048000805890                      0                   0 
の様に返ってくるデバイスがこのカードになります。ちゃんとphyが0~7までの8台分ありますね。 他のカードですと、target_modeが見つからない旨のエラーが出ると思います。
host番号を変えてみて下さい。

この状態でHDDが取り付けられていると
phy  dev sas address     attach dev type   attach sas address  target mode
0    5003048000805890                      0                   0             
1    5003048000805890                      0                   0             
2    5003048000805890                      0                   0             
3    5003048000805890                      0                   0             
4    5003048000805890                      0                   0             
5    5003048000805890                      0                   0             
6    5003048000805890                      0                   0             
7    5003048000805890    SATA END DEVICE   700000000000000     0   
この様にSATA END DEVICEとしてHDDが認識します。
あとは

# echo "enable 7" > /sys/class/scsi_host/host16/target_mode
(7の部分はphy番号が入る)
とする事で、phyをtarget_modeで動作させる事ができます。
解除は

# echo "disable 7" > /sys/class/scsi_host/host16/target_mode

となります。(今回はSASカードがhost16、HDDがphy7である事を前提に記述しております)
あとは

# echo "add 16:0:0:0:0 0" >/proc/scsi_tgt/groups/Default/devices

の様にしてやれば一通り完了となります。(16:0:0:0の部分はhost?の数字を入れてやる)
あとは、普通にHDDとしてfdiskなりで処理してやればokです。


2009年8月21日

Marvell's 88SE6480 @Debian part3 ドライバコンパイル(SUPERMICRO AOC-SASLP-MV8)

さて、しばらく経ってしまったが,Marvell's 88SE6480(SUPERMICRO AOC-SASLP-MV8)の方だけども、どうやらドライバのソースの方が出ているみたいだ。
http://thread.gmane.org/gmane.linux.scsi/49940/focus=49957を見ると
>This driver allows to use a SAS controller based on Marvell 88SE64xx or
>88SE94xx chips as a SAN storage server (target). More info you can find
>on the SCST page http://scst.sourceforge.net.

とのことである。

svnにて提供されているので、

#aptitude install svn

にて、まずはsvnのインストールから。別にsvnを入れなくても、直接https://scst.svn.sourceforge.net/svnroot/scstからファイルを根こそぎ持ってくれば一応は同じ物が手に入る。
まぁ、svnの方が楽に根こいでくれるので、svn使いましょう。

あとはkernelのソースも必要になりますね。

#aptitude search linux-source
#aptitude search linux-header

から、現在使用中のカーネルのバージョンのものを見つけてインストールします。
自分の環境では、2.6.30-1-686-bigmemなので対応するものをインストールします。

#aptitude install linux-source-2.6.30
#aptitude install linux-headers-2.6.30-1-686-bigmem

これで、/lib/modules/2.6.30-1-686-bigmemにカーネルまわりのソースがインストールされます。
あとは、svnにてダウンロードしたscstのソースのディレクトリにてmakeします。

#make scst scst_install

/usr/local/includes/scstにscst関連のインストールが行われます。
このあと、mvsas_tgtのディレクトリへ移ってmakeするわけですが、Makefileの方でscstのディレクトリの指定が違うっぽいので、編集します。


#SCST_INC_DIR := /usr/local/include/scst
#SCST_DIR := $(SCST_INC_DIR)
SCST_INC_DIR := $(SUBDIRS)/scst/include
SCST_DIR := $(shell pwd)/scst/src

このようになっておりますので、コメント行を変更します。

SCST_INC_DIR := /usr/local/include/scst
SCST_DIR := $(SCST_INC_DIR)
#SCST_INC_DIR := $(SUBDIRS)/scst/include
#SCST_DIR := $(shell pwd)/scst/src

これであとは、makeすればmvsas周りのドライバのコンパイルが行われます。

#make install

にて、mvsas.koが出来ます。
あとは/lib/modules/2.6.30-1-686-bigmem/kernel/drivers/scsiにscst.koとmvsas.koをコピーして完了かな?(?)

多分これでいいと思うけど、まだ確認してない。

あとはHDDをつないだあとに、targetモードにしなきゃならないんだっけかな。
その辺はまた次回、HDDをつないだらやってみようと思う。今回はドライバのコンパイルまでって事で。



2009年5月24日

Debian linuxからVoIPアダプタへルーティングがうまくいかない

うちのネットワークは結構ごちゃごちゃしてる。
Bフレッツ2本に、ひかりone ギガ得1本の、合わせて3本の外線が入ってきている。
そのうちギガの回線がWindowsマシンをぶらさげている状態。

Bフレッツの2本は、webサーバ機につないでおり、webサーバ専用の回線として使っている。
そのうちの1本をONUの直下でHubで分けて、ルータをつなぎVoIPアダプタをぶらさげ、IP電話を使っている感じだ。わっかりにくい図にするとこんな感じ。
---ONU-----Hub+-----router-----VoIP----telephone
                       |
                       +----server eth0
---ONU----------------server eth1
んでこのこの状態だと、3プロバイダの契約になっていて、IP電話のために1プロバイダ契約しているのが非常に勿体ない。なので、uPnPのルーティングをしてやってwebサーバの方の回線を使おうとしたのだ。こんな感じに。
---ONU----------------server eth0
---ONU----------------server eth1
                              server eth2-----VoIP-----telephone
んでまぁgoogleさんとかで調べた所、linux-igdとupnpで出来るとの事なんで、こことかこことかこことかこことか読んでやってみたのですが、思うようにうまくいきません。

現行のlinux-igd+upnpだとiptablesの方への登録も自動で行うはずなのですが、まったくスルー。なので自分で設定してやってもVoIPアダプタの方からは見えない状態。

リビングのラックの中にネットーワーク機器収納しているんで、解決するまでバラしたラックでリビングが埋まった状態...奥様に「IP電話はもう切っちゃえば?」と言われる始末。
(ひかりoneの方で、新たに加入電話を導入したので一応電話回線はあるのだが、接続する電話機が無いので誰にも番号教えてない状態なのだ。年賀状で親戚一同に変更の旨を連絡するまでIP電話の方のままにしたかったので困った状態)

誰かHelp!!状態 orz


-----
とりあえず、VoIPアダプタでpppoe出来る事を思い出したので、routerを外して直接VoIPアダプタでpppoeさせた。これでrouterは無線LANアクセスポイントとして転用できた模様。



2009年5月12日

mhddfsを導入してみた

自宅ファイルサーバのファイルシステムをLVM2からmhddfsに変更してみた。
扱うデータ量が多くなってくると、HDD1台で1つのパーテションになっている場合、データが分散して管理がとてもめんどくさい。そこで、従来まではパーテションを連結して1つに見せかける事の出来るLVM2を使用していた。LVM2に関してはうんざりするほど情報があるので詳細を割愛。
HDDの増設や取り外しにも対応しているLVM2の残念な面倒な点は、1つのパーテションとして管理するいわゆるストライピングの拡張したようなファイルシステムであるため、耐故障性が無い上に、いちいちfsckをしないとHDDの取り外しが出来なかったりという辺りにある。
そこで、実在するパーテションを擬似的に1つのパーテションに見せかけるmhddfsへ移行する事にした次第だったりする。mhddfsはそのものがファイルシステムではないため、元のパーテションに対しての直接のアクセスが可能であり、またHDDの追加や取り外しも容易である。HDDの故障があったとしても、その単体の範囲で被害を食い止める事が出来るので被害は最小限におさえる事が出来る。

幸いにもDebianではmhddfsがパッケージ化されているのでインストールはとってもお手軽。
#aptitude install mhddfs
にてインストールは完了する。

使い方はとても簡単。
あらかじめ、HDDをマウントした状態で、そのマウントポイントを指定するような感じ。
(実際にはまとめたいディレクトリを指定するので、マウントする必要があるんだけども)
/mnt/disk01
/mnt/disk02
/mnt/disk03
にマウントされているHDDをまとめたい場合は
#mhddfs /mnt/disk01/,/mnt/disk02/,/mnt/disk03/ /data
の様にすれば良い。当然ながら指定するのはディレクトリなので、/mnt/disk01/aaa/を指定する事も可能だ。
/etc/fstabに記述する場合は
mhddfs#/mnt/disk01/,/mnt/disk02/,/mnt/disk03/ /data fuse defaults,allow_other 0 0
の様にすれば良い。
実際のアクセス動作としては、先頭の方のディレクトリ(/mnt/disk01/)から順に書いていき、容量がいっぱいになると次のディレクトリ(/mnt/disk02/)に書く様な感じだ。ファイルが途中でとぎれる事は無い様になっているので、若干の容量を余しながら書いていく事になるが、空き容量内に収まるファイルの書き込みであればその隙間に埋まる様になっている。
mhddfsの動作として、先頭の方のディレクトリから順に検索をするのだが、ディレクトリのタイムスタンプについては一番最初に見つかったタイムスタンプのみ保持するので、複数のHDDにまたがって存在するディレクトリに対しては、実際に最終の更新のタイムスタンプではないのでこの辺には注意をば。ソース見た感じではそういう箇所はなかった感。fuseの仕様なんかな。

2009年4月 2日

Marvell's 88SE6480 @Debian うまくいかず part2

その後いろいろ調べてわかった事

88SE6480のVENDOR ID/DEVICE IDは、11ab:6485だった模様。
11ab:6480はMV64460/64461/64462 System Controllerという名の示す通り、Marvell製のSystem ControllerチップのIDだった。なので、6485に対応したドライバが必要となったのだ。
そりゃ、うまくいかないわけですね。

って事で調べること...

http://article.gmane.org/gmane.linux.scsi/48651/
http://article.gmane.org/gmane.linux.scsi/48648/
http://article.gmane.org/gmane.linux.scsi/48649/
http://article.gmane.org/gmane.linux.scsi/48652/
http://article.gmane.org/gmane.linux.scsi/48650/

Marvell社のKe Wei氏によるNewsgroupsへの投稿で[PATCH x/5] mvsas : redesign the mvsas driver architecture.というものが見つかった。
kernel sourceにある、mvsas.cに対して、88SE6480をはじめとする幾種類ものストレージカードに対応させるべくパッチが投稿されていた。

さっそく、パッチを当てようとするが、どうしても
# patch -p0 < mvsas.patch
patching file b/drivers/scsi/mvsas/Kconfig
patching file b/drivers/scsi/mvsas/Makefile
patching file b/drivers/scsi/mvsas/mv_init.c
#
と、mv_init.cまでしか生成しないで終わってしまう。
投稿ごとにpatchファイル作って5個にすると
# patch -p0 < mvsas.patch1
patch: **** Only garbage was found in the patch input.
と、それどころではなくなってしまう。
まぁ、新規作成されるファイルに関してはそのまま書き出してやればいいかとも思うが。
今日の所はここまでにして、明日以降やろうと思う。

2009年3月26日

Marvell's 88SE6480 @Debian うまくいかず(SUPERMICRO AOC-SASLP-MV8)

ファイルサーバの方のHDD台数が増えてきたので、安価なSASボードを使ってやろうと、SUPERMICROのAOC-SASLP-MV8という、SAS 8portのボードを購入しました。

17800円で8portなのでやしーなーという感じで、サクっと買ってしまったのですが、苦労中です。 最初簡単にwebで調べた感じでは、LSI Logicの1068が載っている様だったので、サクっと動くかなというつもりでいたのですが、実はMervellの88SE6480というチップが載っていました。

さて、Debianの方は一応対応しているようで、mvsas.koというドライバがあるのですが、まずこいつが自動でロードされない。この時点でちょこっと危険な香り。
initrd.imgには入っているドライバなので、普通に考えると問題ないはずなんですよね。 mobprobe mvsasにて一応ロードされる様で、lsmodでも
# lsmod | grep mvsas
mvsas                     20104  0
libsas                      39396  1 mvsas
scsi_transport_sas   25280  2 mvsas,libsas
scsi_mod               136428  5 sd_mod,mvsas,libsas,libata,scsi_transport_sas
こんな感じで、いちおうは問題なさそうなんですがdmesgの方では一切反応なし。
どうもデバイス登録されてない模様。

とりあえず、カーネルをアップデートしてみるかって事で、sidにしてみたのですがサッパリ変わらず。

夜も更けてきたのでここいらで頓挫して、前の環境に戻しておやすみなさい。
どなたか情報持っていたらplease!!

#付属のCDには、FCとRedHatとSUSEのバイナリだけ入ってました。ソースあればコンパイルするんですけどねぇ。
SUPERMICROで提供されているドライバリンク

どうも、ASUSのPIKE 6480と、HighPointのRocketRAID2680も同じ88SE6480を積んでいる模様。まぁこれられの方はRAID機能有りなわけですが、提供されるドライバはSUPERMICROと同じ物っぽい。残念。

2009年1月21日

munin-nodeでSSDのwrite countを記録する

暮れにSSDを2台購入し、サーバとWinマシンのそれぞれに取り付けて使っておりましたが、MLCですので寿命が心配。Winの方には幸いにもJSMonitorなるsmart値のMaxWriteCountとAverageWriteCountから寿命を逆算するソフトがあるので非常に便利なのですが、Linux用のものは用意されている訳でもないので(VS2005用のソースは付属)munin-nodeで記録できるように作成してみました。

こんな感じです。まぁ変化の具合が一目でわかるので便利ですね。

とりあえず、ヘナチョでっちあげですが、以下にソースを。

続きを読む "munin-nodeでSSDのwrite countを記録する"