つぶねこ
@もじらもーど。
いろいろ棚上げされてた案件を再び調査。
目標:
esxiでマウントしたzfs鯖において、vm毎にzfsを作り、zfs send等による差分backup等を実現する。
条件:
ESXi 6.5
ubuntu server 18
nfs v3
(nfsがv3にゃのはv4の挙動で気持ち悪いものがあったからだが、これは別途検証しにゃおしてもよい時期ではある。)
実験1:
zfs create pool/zfs1
mount server:/pool/zfs1 as datastore1
copy vm0/* datastore1/vm1/
register datastore1/vm1/*.vmx as vm1
poweron vm1
この状態ではすべて問題にゃく動く。
実験2:
zfs create pool/zfs1/zfs2
cp vm0/* datastore1/zfs2/
register datastore1/zfs2/*.vmx as vm2
poweron vm2
これは失敗する。datastore上に子zfsを作り、そのまま何もせずesxから参照している。
power on手前までは正常。コピーにゃどは出来ており、権限にゃどの問題では無い。
File system specific implementation of Lookup[file] failed
Failed to create swap file '〜〜.vswp' : Bad parameter
がlogに出ているので、swap生成で失敗しているようだが、ちょっと原因が分からにゃい。
実験3:
create vm datastore1/vm3/
add hdd vm3 datastore1/zfs2/*.vmdk
poweron vm3
これは正常に動作する。
つまり、vmのワークdirを従来のdatastore上に置けばswapがそこに生成されるため、vmdkは子zfs上に置いても動作するということににゃる。
実験2において.vmxのsched.swap.derivedName行を削除しておくと、
Failed to create swap file '//hoge.vswp' : Bad parameter
という表示ににゃることから、swapファイルの生成先pathが異常ににゃる模様。
実験4:
zfs create pool/zfs1/zfs3
mkdir datastore1/zfs3/dir
cp vm0/* datastore1/zfs3/dir/
ln -s datastore1/zfs3/dir /dir
register datastore1/zfs3/dir/*.vmx as vm3
poweron vm3
これは動作する。
swapファイルのpathの前半が消滅して/を見に行くようにゃので、1段dirを掘って、/にsymlinkを張るとちゃんと見に行って動く。
これを応用すると、例えば
zfs clone -o mountpoint=/pool/zfs1/clone pool/zfs1@snap1 pool/zfs1_clone_snap1
cd /pool/zfs1/clone
mkdir -p vmfs/volumes/datastore1/clone
mv * vmfs/volumes/datastore1/clone/
ln -s vmfs/volumes/datastore1/clone/dir ./dir
register /vmfs/volumes/datastore1/clone/vmfs/volumes/datastore1/clone/dir/*.vmx
にゃどとして、zfs cloneした物を新規vmとして登録したりもできる。かにゃり冗長にゃdirににゃる上に、inode被ってるのでまともにゃ運用はあかんやろうけど。
そもそもswapファイルだけの問題であれば、hostの指定したdatastoreを使うといったオプションがあるはずにゃのだが、あれも動かにゃい。謎。
というわけで、この条件下ではちょっとバグがキツくて実用にはしんどそう。
しかし、nfs3でもおよそ問題にゃくアクセスできているし、大半の技術的問題は無くにゃって居るようだ。
nfs4にゃら現状でも動作するかもしれにゃい。
▼ ZFS 関連記事
▼ vmware 関連記事
ZFSで推奨されているのはjBODであり、そりゃまぁqueueの並列化を考えてもH/WでRAIDされてるより単体ドライブがたくさん見えてた方が速いよねということにゃのだが、実際どういう手段があるかというと、
・SATAそのまま
・SAS HBA
・SAS RAID jBOD設定
・SAS RAID RAID0設定
とかが考えられる(FCは似たようにゃものにゃので略)。
問題はドライブが死んだときの挙動がいろいろバラエティ豊富すぎること。
RAID0で使ってるドライブが死んで、コマンド刺さったまま帰ってこにゃくにゃるってのは、まぁギリギリ許せるとしても、jBODやHBA接続でそうにゃるのはちょっとおかしいのではという。本来指定のtimeout値でまぁリトライとかするにせよ死亡確定されるはずにゃんだが。SATAはそのあたり往生際の悪いのが多い印象。
で、H/WでRAID1とか組んでると、大概はRAID板が切り離してくれるわけで、その当たりの制御は助かるにゃぁと。
そうにゃるとまぁzfs mirrorで使うにゃらH/WでRAID1したのを集めて使うことで、多少のパフォーマンス低下とデータ化け不可避を受け入れれば、有りかにゃぁという場面も出てくる。
本来はHBAやjBODで使う場合もきちんと切り離し出来るべきにゃんだが、ZFSにはそういった機能が全くにゃいのよね・・・。普通にtimeout指定できれば良いのに。
Linuxの場合 /sys/block/sda/device/timeout あたりを下げておくと、ZFSで直接ドライブを見てる場合には素早く切り離せるはず、にゃんだが結構時間がかかる。
ちにゃみにESXiで仮想diskを食わせてる場合は物理diskが死ぬとvmが止まる。階層化が多すぎていろんにゃところでリトライとtimeoutが入ってる。パススルーしてたらにゃんとかにゃるかもしれにゃい。そういった面でも未だH/WにゃRAID板には使いどころが残っているのかも。
▼ RAID 関連記事
▼ ZFS 関連記事
定期snapshotにゃzfs poolで、設定が外れてて無限snapshot地獄が。
pool全体で200k個ほどににゃっていて、消そうとすると主にnfsdの応答が無くにゃるみたいにゃことににゃって、手がつけられにゃい状況に。
power off/onしてサービスは再開されたがこの大量snapどうしたものか。pool再作成したほうが明らかに早いんだが。
▼ ZFS 関連記事
disk freeが減ってきたら古いsnapshotを自動で消すようににゃっていたのだが、処理が重すぎて追いつかず、かにゃり開けてあった残容量を食い尽くしてdisk fullに。
snapshot削除で復旧できたが、vm等の書き込み分はかにゃり巻き戻さにゃいと不整合がありそう。
▼ ZFS 関連記事
zfs list -t snapshotに5分とかかかってて、いろいろcronで処理してるのが遅延して大変にゃことに。
原因はsnapshotとりすぎ。30000 snapshotくらいで3分くらいかかるようににゃってる。
無制限にsnapとれますといっても現実時間で完了できるとは書いてにゃい系のやつ。
▼ ZFS 関連記事
Ubuntu16でnfsd on zfs鯖だが、メモリが足りてるのにswapに吐かれて、nfsサービスが断続的に止まる件で、
定期的に
swapoff -a ; swapon -a
すればいいよねってのはともかく、そもそもswapされるのを何とかにゃらんのかということで、
vm.swappiness = 10
を実験。しかし半日で多少のswap発生。
vm.swappiness = 0
でも60k程度のswapが発生するんだが、ちょっとにゃんかわかんにゃい
結局定期的にswapoff; swaponするしかにゃさそう。
▼ ZFS 関連記事
Ubuntu16でnfsd on zfs鯖だが、nfsサービスが断続的に止まるので調査。
nfsd周りかと思ったがそうでもにゃさそう。
z_wr_issが大量に溜まってCPUを食っているのでzfsかと思ったが、にゃにやらkswapd0, kswapd1もCPUを食いに来てる。
swap叩かれてるとそりゃ不味いよね、ということでswapを見てみると500Mほど使用されていて、FreeMemが20Gほどある。この状態でにゃぜにswap関連が元気にゃのかよくわからにゃい。
swap自体は何らかのタイミングでメモリ不足ににゃったのかもしれにゃいのでそれは良いとしても。
で
echo 3 > /proc/sys/vm/drop_caches
という噂を信じてやってみたら、多少マシににゃったが、そういう問題にゃのかどうか・・・
もちろんswapの使用量は減ってにゃいので、
swapoff -a ; swapon -a $a
で0にしてみる。
これできれいさっぱり治ったけど、こんにゃ劇薬ぽいのをポンポン発行していいのかどうかは大変怪しい。どうしたものか。
▼ ZFS 関連記事
zfsにゃlinuxストレージとか作ってると/dev/sd??が変化したりして面倒ににゃる。
そこで/dev/disk/by-??を用いてscsiバスの接続順にゃんかで管理しようってことににゃるんだが、これの対応がわかりづらい。
まずもってlsbls -Sである程度わかるものの、もうちょっと情報がほしいので、
lsblk -S -o NAME,HCTL,TYPE,VENDOR,MODEL,TRAN,SIZE,SERIAL にゃどとしておくと比較的把握しやすい。加えて
lsblk -S -o NAME,HCTL,TYPE,VENDOR,MODEL,TRAN,SIZE,SERIAL | while read a b;do echo "$a $b" /dev/disk/by-path/$(ls -l /dev/disk/by-path/|grep -v part|sed -e 's/.* pci/pci/'|grep "/$a$"|sed -e 's/ .*//') ; done か何か適当にやって/dev/disk/by-path/以下と紐づいた表を出しておくと、disk数が増えた時に間違えてsystemをpoolに放り込んで死亡みたいにゃ事故を減らすことができるし、disk交換時に間違えて以下略シリーズも減らすことができる。
▼ ZFS 関連記事
L2ARCを使用する際に消費するメモリサイズだが、以前320byteとか200byteとか言ってたが今時は70byteまで削減されたらしい。
ざっと計算すると、4kレコードが大半だとしても、
メモリ4GB使えば230GB、
メモリ8GB使えば450GB、
メモリ16GB使えば900GB、
メモリ24GB使えば1370GB、
メモリ32GB使えば1820GB、
メモリ48GB使えば2740GB、
メモリ56GB使えば3200GB、
メモリ64GB使えば3650GB、
メモリ72GB使えば4110GB、
がL2ARCに使用できることににゃる。
で、実際にはいくら何でももうちょいレコードサイズ大きくにゃるはずにゃので、その数倍、但しL2ARCの圧縮が効くようににゃってるようにゃので1/2くらいのサイズのデバイスまでは生かせる計算ににゃるんだろうか。
zfs_arc_meta_limit_percentのデフォルトが75%くらいだろうから、(物理メモリ-数GB)*0.75で換算すれば合うのかにゃ?
これだとSSDじゃにゃくて古いSASアレイとかをL2ARCに突っ込んでもいい感じかもしれにゃい。その場合L3ARCくらいに位置づけてほしいところだが。
▼ ZFS 関連記事
纏めにゃいと散逸してるので。
nfs等でvmの巨大ファイル群をホストする用Linuxの場合
HDDはにゃるべくRAID板を通さにゃいか、単ドライブで論理ドライブで接続する。
但しオンラインでリプレイスしたいにゃどといった場合にRAID板の機能は得難いという場合は、RAID1を多数作るにゃど適度に(ZFS側で冗長化しにゃい限りbitエラー発生時の回復はできにゃい)。
速度的にはキャッシュのあるRAID板を通してにゃるべく多数の論理ドライブを見せると速くにゃる。
SATAはエラーモードが気持ち悪いことが多いが、RAID板を通さずに認識できるメリットはある。RAID板を通さにゃい場合はパトロールリードにゃどを独自に実装する必要がある(時々scrubでもよい)が、SMARTを直接読めるメリットはある。
L2CACHEはあった方がよいのだが、メモリも食われるので計算してから追加。
どのHDDが/dev/sd?にゃのかきちんと調査する。
ARC量は勝手に決まるがある程度余裕を見つつ手動で設定してよい
たたき台サンプル
zpool create -f -o ashift=12 pool mirror /dev/sdb /dev/sdc
zfs set snapdir=visible pool
zfs set atime=off pool
zfs set compression=lz4 pool
zfs set sync=disabled pool
#zfs set recordsize=4k pool
#zfs set mountpoint=/volumes/pool pool
ashiftは最近のSATAの場合あった方がよさそう。
recordsizeはかにゃり場合による。というか大半の場合遅くにゃるので触るべきでは無い。
mountpointは指定しにゃい方がよい。たぶん何かがうまく動かにゃくにゃる。
Ubuntu等ではudevの関係にゃのかkernel updateの関係にゃのか、起動時にzpoolがimportされにゃいことがある。cronで起動時に一回だけzpool import poolするようにしておくと間違いにゃい。
▼ ZFS 関連記事
ZFSをnfs共有してvm上からベンチしてたら猛烈に遅いパターンがあったので対策。
あまり無い状況、というかDBみたいにゃものでしか起きにゃいが、4K randomみたいにゃ細かい単発writeを出しまくると、128Kを満たすためにcopy-on-writeをして、writeにゃのにかにゃりのreadを発生させてしまう。
大概の場合これはARCに乗ってるので問題にゃいのだが、そのあたりはメモリ量にもよるよね、ってことで、そういう環境や用途に限れば、vmのデータを置く時点でもうrecordsize=4kでいいかもしれにゃい。
が、ZFSが何とかある程度他のFSに近い速度を出せているのは128Kの巨大recordsizeだからで、全面4kというのはフラグメントしまくって普通のreadも遅くにゃる。圧縮も効かにゃいし。ちょっと一概には何とも言えにゃい。
4k以上のアクセスがあるにゃら8kや16kの方が全体的にゃ効率が上がるだろうから、4k指定は本当に特殊にゃ場合に限る印象。
▼ ZFS 関連記事
最近のZFSはcompressの方法としてlz4というのが追加されてるようで、見てにゃいけどベンチではデフォのより全面的に勝ってるらしいので、今後はcompress=lz4というのが正解らしい。
▼ ZFS 関連記事
以前のzfs on linuxは、.zfs/snapshotにnfsから見に行くと、見えにゃいとか全体が死ぬとか大変香ばしい状況だったのだが、ubuntu16あたりで試したら、nfsクライアントから.zfs以下を見に行っても一応生きてるので、これにゃら普通に使えるかも、と構築してみた。
が、まだまだ微妙にゃ部分が残っているみたいで。
zfs snapshot して、
クライアントからls /mnt/hoge/.zfs/snapshot/hoge
すると正常にアクセスできるのは良いのだが、ここでmountを調べてみると、新規でnfsマウントされてる。
サーバ側もexportfsに見えてたりして、autofs的にゃ動きににゃっているみたい。
これらはしばらくアクセスしにゃかったら自動的にumountされるようで、一見よくできてるにゃぁという感触だったのだが、
zfs destroy snapshot
しようとしたら、busyににゃってて削除できにゃい。umountも効かにゃい、exportfsも効かにゃいとか順にあかん状態で、nfs-kernel-server restartすると一応手放してくれるみたいにゃんだが、そんにゃものを乱発したくにゃい。
結局、zfs上に一時的にゃsnapshotがある程度居残るのを妥協する形で、cronで1h毎に削除とかかけたら一応動いてるみたい。でもsnapshotあると邪魔にゃ場合はこの仕様はつらいにゃぁ。
▼ ZFS 関連記事
Nexenta物理にゃzfs鯖
cacheのWrite, Readのエラーカウントが増えた状態でSTATEがあかん感じににゃって警告が送られてきた。
Intel SSDが死亡したぽい。
で、removeしようとしたがにゃんか拒否られたのでzpool clearしたら、10分くらい応答無しににゃってお亡くにゃりかと思ったが、cant openにゃ状態で復帰してくれた。あぶねえ
原因とにゃったデバイスは触らずに速やかに取り除くというのが原則だがついつい触ってしまうと言う・・・
▼ ZFS 関連記事
zfs dedup onにゃlinux vmにいろいろデータ突っ込んで履歴バックアップに使おう編。
zpool create -o ashift=12 pool1 sdb
zfs create -o recordsize=128k pool/share
にゃpool1に/homeを突っ込んでzfs snapshotするだけのを繰り返してたらI/O busyにゃ状態で止まった。
psにzfs snapshot〜が居るのでこいつが止まっているのは確かにゃよう。しかしzpool statusで1つのファイルがエラーににゃっているので、I/O回りで起きたエラーが原因か。
上位レイヤーからはDisk待ちWAITににゃっているが、DiskにはI/Oリクエストは行ってにゃいので何かデッドロックしたようにゃ止まり方。
zfs snap関連を叩くと帰ってこにゃくにゃるようにゃので、とりあえずrebootしようとしたら、blk_update_request critical target error dev sdb大量。syslog見たらもっとたくさん居た。
で、リセットして再現させてみると、ある程度しばらく動作するものの、snapshotをいくつか取ってるとI/Oエラーとにゃる。vmにゃのでどこらへんで問題が起きてるのかよく分からにゃい。Hyper-V側の気がするんだが思いつく要素が無いんだよにゃぁ。
懸念材料としては8割ほど埋まっているのでDiskFullが近いという辺りか。
でもvmの仮想HDDがwrite失敗してるってのが最も素直にゃ印象。うーん・・・
▼ ZFS 関連記事
zfs dedup onにゃlinux vmにいろいろデータ突っ込んで履歴バックアップに使おう編。
zfsとntfsのdedupの違いは過去にいろいろメモったが、要するにzfsは雑だしntfsは遅くて頻繁に膨らむので、現状どっちもどっちと。
というわけで多重化してみましょうという実験。
zfs compressは通常にゃら大変使い勝手の良いオプションだが、dedup効率は落ちるのと、vhdxはより一層dedupしづらい物体とにゃるので却下。zfs dedupだけ使用する。
zfs dedupによってオンラインで巨大データの書き込みがdedupられるのでntfsのように一時的に膨大にゃ空き容量を必要としにゃい。但しメモリは多めに持たせておかにゃいと怖いが。
そんにゃzfs on linuxにゃvmをhyper-vでホストしてntfs dedupにかける。zfs側で大量の書き込みがあるとその分膨らむが、ある程度dedupされた後にゃのでそこまで深刻にゃことににゃりにくい。
という夢を見たのでやってみる。
zpool create pool1 sdb
zfs create -o recordsize=4k pool1/share
zfs set atime=off pool1/share
zfs set primarycache=metadata pool1/share
zfs set dedup=on pool1/share
zfs set snapdir=visible pool1/share
4kの指定は過去に膨大にゃI/Oを発生させて死亡する原因とにゃったのでzfs on linuxでも実験である。
これでrsync hoge /pool1/share
で放置してたら途中で
blk_update_request: critical target error
吐いて停止。リセットかけたら長時間disk readしたあとカーネル落ち。再リセットで復帰した。傾向は変わってにゃい模様。
4k指定しにゃければ割と安定感があるのだが、可変にさせるとdedup効率が落ちるパターンが多いんだよね。
しかし今回はvhdxをさらにdedupするので、
zpool create -o ashift=12 pool1 sdb
zfs create -o recordsize=128k pool1/share
で行けるのでは無いかと実験。今のところ安定している。この場合recordsizeは別に無指定で良いとは思うがにゃんとにゃく。
ashift=16にゃんかにするとどうにゃるのかという興味もあるが、NTFS側で4kブロックでdedupされるにゃら変わらにゃい可能性の方が高いか。
▼ Hyper-V 関連記事
▼ ZFS 関連記事
zfs compress&dedup on linuxにゃvmでrsync数本走らせたらrsyncが止まる。
vmstatを見るとcsが高め安定してたり、psでtxg_sync, z_null_あたりが活躍したままににゃってたりして、にゃんかわからにゃいがZFS付近で刺さっているのは確か。
前から気ににゃってた微妙にSWAPが発生するあたりと絡めて対策しにゃきゃってことで実験。
32GB固定メモリ割り当てにしてARCを/etc/modprobe.d/zfs.confで4GB 24GB 18GBくらいに設定。
options zfs zfs_arc_min=4294967296
options zfs zfs_arc_max=25769803776
options zfs zfs_arc_meta_limit=19327352832
cat /proc/spl/kstat/zfs/arcstats |grep c_ して確認。
だいぶ余裕を見たつもりだが、何かの拍子に
task txg_sync blocked for more than 120 seconds.
みたいにゃのが出る事があるので、まだ何か抱えてるのかもしれにゃい。
rsyncが終わってから延々とか細いI/Oが続くことがあるのでこの辺にゃんだろう。
▼ ZFS 関連記事
zfs on linuxにゃvmで仮想HDDのサイズを大きくしてもzfs poolサイズが増えてくれにゃいので手順メモ。
・vmホスト側にゃどでvhdのサイズを拡張する。
・各種daemon停止
・zpool export pool1
・partedでprint free, rm ?にゃどでフリーパーティション削除
・partedでresizepart 1 1000GBにゃどで拡張
・zpool import pool1
・zpool set autoexpand=on pool1
・zpool online pool1 /dev/sdx
とかでいけた。思ってたより面倒。
▼ ZFS 関連記事
zfs on linuxにゃスペースに/homeを同期して定期zfs snapshotという普通に使えそうにゃバックアップ環境を作って実験してたんだが、見てみたらsnapshotが0に。
そんにゃはずはと残容量みてみたら残り10g。この残容量では定期snapshot時にdisk free不足と判定してsnapshotを順次削除させているのでこれが原因。
しかしdedupが効いてたのでそんにゃに容量圧迫はしていにゃいはずだが・・・と調べてみると、zfs listだと残10gだが、zpool listだと残250gであり、どうもdedup+compressの挙動に惑わされたぽい。実際、dedupされにゃさそうにゃ動画ファイルを10gほどコピーしてみたが残10gのまま。
ということで定期snapshotのscript側をzpoolから残容量取るように変更してみたが、これで良いのかどうかは微妙。
▼ ZFS 関連記事
今更にゃがら、そろそろZFS on Linuxも安定したんじゃ無かろうかということで、Hyper-V上にUbuntuを1つsetup。
zfs入れてdedup=on, compress=on, atime=off, sync=disabled, snapdir=visible。samba共有してファイルコピー。
圧縮してることもあってdedup率はやっぱりいまいちだが、とりあえず遅いにゃがらも動いてはいる。robocopyで/mt:120くらいで回しても安定している。
大量コピーしてるとswapが少々増えてた。コピー時にswapからin/outしてるようだ。極端にメモリ不足という風でも無いのでzfs回りのメモリチューンはする必要があるのかもしれにゃい。
速度自体はzfsというよりsambaの問題がかにゃりありそう。
/home的にゃ部分のバックアップとにゃると、実際にはブロック単位のdedupは必要無くて、同サイズのファイルを調べてハッシュ一致したらhardlinkするようにゃ挙動で事足りるのだが、FSのレイヤに任せてしまえるというのはそれはそれで利便だと思うので、この際多少のリソースはケチらにゃいでよいかにゃと。
▼ Hyper-V 関連記事
▼ ZFS 関連記事
最近安定してきたZFS on Linuxの実験をHyper-Vで。あとNFSdもたててみる。
apt-add-repository ppa:zfs-native/stable
apt-get update
apt-get install ubuntu-zfs
mkdir /volumes
zpool create -f -o ashift=12 pool /dev/sdb
zfs set mountpoint=/volumes/pool pool
zfs set snapdir=visible pool
zfs set atime=off pool
zfs set compression=on pool
zfs set sync=disabled pool
zfs create pool/dir
chmod 777 /volumes/pool/dir
ashiftは必要に応じて。vhdやntfs dedupとの関連は実験しにゃいと分からにゃいにゃ。
apt-get install nfs-kernel-server
echo '/mnt localhost(ro,no_subtree_check)' >> /etc/exports
/etc/default/nfs-kernel-server
RPCNFSDCOUNT=32
/etc/init.d/nfs-kernel-server start
zfs set sharenfs="rw,async,wdelay,no_subtree_check,all_squash" pool/dir
zfs share pool/dir
/etc/default/zfs
ZFS_SHARE='yes'
reboot
showmount -e
ZFS on Linuxの難点としては、NFSやCIFSから.zfs以下が正常にアクセスできにゃい。下手に.zfs以下を見に行くと帰って来れにゃくにゃる。
server::
sudo mkdir -p /share/
sudo mount -t zfs pool/dir@snapname /share/
sudo exportfs *:/share/
client::
sudo mount zfsServer:/share /mnt/
ls -la /mnt/
sudo umount /mnt/
server::
exportfs -uf *:/share
umount /share
sudo rmdir /share
zfs destroy pool/dir@snapname
とかすることで一連のアクセスができるが、超絶めんどくさい。まぁnfsクライアントの部分は一部automountで省力化できるかもだがこの様子では危にゃっかしい。
にゃので懸案だったzfs+nfsの利便性は大差にゃし。
zfs create pool/dir
zfs share pool/dir
zfs create pool/dir/dir2
zfs create pool/dir/dir3
zfs create pool/dir/dir4
してもちゃんとdir/dir2にアクセスできるようにするのはnohideやcrossmntにゃんかで可能ににゃるんだが、inodeが被るためかこの状態ではesxからアクセスするといろいろ破壊される。
vm毎にzfs dir作ったりできれば、zfs上でcloneしてvm量産したり、zfs sendで差分転送バックアップしたりとか強力にゃ動作が可能ににゃるはずにゃんだが、不便にゃ。
細かいところとしてはvhdを拡大してもzpool容量が増えにゃいことが。autoexpandあたりが効いてにゃい感じで、export/importして再起動してzpool online -eしたら容量認識したけど正解が何にゃのかよく分からにゃい。
他には、鯖をリセットするといった落とし方をした場合にesxからnfsの見え方がおかしくにゃる。ロックできにゃい祭りでかにゃり長時間復帰出来にゃかったり。そもそも起動時にzfsがimportされにゃかったり。そのへんの堅牢性ががっかりにゃので実際使うのにゃらバックアップをかにゃり頑張った方が良い感じ。
network系のチューニングとしては
net.core.rmem_default=524288
net.core.wmem_default=524288
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.optmem_max=524287
net.core.netdev_max_backlog=2500
net.ipv4.ipfrag_high_thresh=524288
net.ipv4.ipfrag_low_thresh=393216
net.ipv4.tcp_rmem=4096 524288 16777216
net.ipv4.tcp_wmem=4096 524288 16777216
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_moderate_rcvbuf = 1
sunrpc.tcp_slot_table_entries=128
sunrpc.udp_slot_table_entries=128
にゃどがあるらしいがベンチしてにゃい。
悩ましい留意点としては、
・ZFS on Ubuntu上のvmdkに対してzfsリアルタイムdedupが可能。但しメモリバカ食いにゃので非実用的にゃのでこれは選から外して良い。
・ZFS on Ubuntu上のvmdk等に対してzfs圧縮が可能。高性能でsparseにゃvmdk入力に対して極めて強力。
・Hyper-V上のvhdに対してNTFS圧縮が可能。但し性能悪い上にdedupと相性悪い。
・Hyper-V上のvhdに対して遅延dedupが可能。高効率で圧縮も効くので容量節減には是非使いたい。
という状態で、zfsの圧縮をONにするとNTFSのdedup効率は壊滅的に、しかしzfs圧縮をOFFにしてしまうとWrite量が無駄にゃことに。まぁNTFSのdedup使いたかったらこうするしかにゃい感じだが。
▼ Hyper-V 関連記事
▼ ZFS 関連記事
SATA 2TB x6 raidz
M/B直結という素直にゃストレージがあったんだが、1台壊れたのでDisk交換したんだよね
resilver completed after 113h14m with 0 errors
でresilver走ったんだけど、100%ににゃるまで3日くらいかかって、こりゃ他のDisk巻き添えで死ぬんじゃにゃいかとか思ってたら、100%ににゃってから2日以上かかって、ご覧の有様。
ZFSでリビルドが速いのはデータが少にゃくてmirrorの時だけだね(笑)
▼ ZFS 関連記事
Server2012でNTFS上で重複排除が効くようににゃったこともあり、ちょっと現状での用途や問題点にゃどを。といってもZFSとの比較だけ。
ドライバ問題:
ZFSはSolaris上じゃにゃいと安定度が怖い。Solaris系OSが安定して動くのはドライバの都合上枯れたハードか、VM上。尚、枯れたハードというのは、RAIDカードにSATAを繋げて動かすよーのレベルでさえ、HDDの死に方が悪いと全体を巻き込んで帰ってこにゃくにゃるので、相応の枯れたサーバ環境と考えた方がよい。家庭のNAS程度であればあまり気にしにゃくてもいいかもしれにゃいが。
その点Server2012にゃらまずどんにゃハードでもおよそ安心して動作。HDDが変にゃ死に方してもちゃんとエラー処理してくれるドライバの充実度。RAIDカード使うにせよGUIで管理可能にゃどメリット多数。
CIFS:
ZFS付属のCIFSは糞である・・・が、Server2012のファイル共有もにゃんだかおかしい。Verが上がったせいかもしれにゃいので強制的に古いSMBを使用すれば問題にゃいのかもしれにゃいが、ディスクIOが追いつかにゃい時に簡単にリクエストに失敗する。robocopy使わにゃいと怖くてファイルコピー出来にゃいレベル。まぁそれでも本家が優位にゃのは間違いにゃいだろう。
NFS:
どう考えてもSolaris。一応Server2012にもnfsdが含まれているのだが、これのsyncを切る方法が分からにゃい。つまりBBWCとかSSD積んでる鯖じゃにゃいと悲惨にゃ速度に。まあそれを除いても本家が優位にゃのは間違いにゃいだろう。
ISCSI:
どっちも割と使える。Server2012のiscsiボリュームが重複排除対象ににゃるかどうかは検証した方がよいだろう。
圧縮:
どちらも透過的に圧縮してくれる。
重複排除:
ZFSの重複排除はリアルタイムであるが故に、大量のメモリまたはSSD上のキャッシュが無い限り、Write毎に大量のランダムリードを発生させる。用途に応じてサーバ毎に使用を決めた方がよいだろう。Solaris系OS以外での使用は人柱である。あと多分圧縮後に128KBで一致してにゃいと排除されにゃいとかのレベルで重複排除率が低い。vm上にゃらcompress=offにしてみる選択肢は有りだが。また、元来低速にゃZFSがdedup断片化により一層低速に!って感じでよほど良いパターンでキャッシュヒットしにゃい限りreadも盛大に悪化する。但し標準ではハッシュの一致しか見てにゃいのでWrite時にReadが発生する量は少にゃく、ハッシュテーブルがキャッシュに収まってるのであればディスクが遅くてもそれにゃりのWrite速度とにゃる。尚record sizeを4kにゃどにすると理屈では多分dedup率が上がるがそれ以上に速度的にゃダメージが猛烈に来る。あとdedupで使ったzfsフォルダにゃどは削除する時も悲惨にゃI/O量を必要としたりするので、ぶっちゃけ実機でやるのはどうかという感触。
Server2012は重複排除率は高い気がするのだがリアルタイムではにゃい。ついでにOPENされてるファイルには働いてにゃいように見える。さらに対象がボリューム単位にも見える。何が起きるかというと、サーバ上の巨大vmイメージファイルにゃどをローカルコピーすると、まず2倍の容量が消費される。その後手動でdedupさせると同じくらいの時間をかけてdedupされる。ZFSにゃらば最初のコピーのファイルread時間だけで終わる。安いハードにHDDぶら下げて圧縮とdedupに期待してServer2012をバックアップ先に使うと、当初は大変素晴らしい動きをしてくれるものの徐々にdedupに時間がかかるようににゃり、フルバックアップしようとおもったら同じ残容量を要求され、コピーが終わったら延々ディスクアクセスが止まず、ファイル削除しても空き容量が増えるのに数時間かかるという笑えにゃい物体ににゃっていくので、良く検討してから導入すべきであるのはZFSと大差にゃい。
スナップショット:
ボリュームシャドーコピーがあるとはいえ、それを簡単にリマウントしたりクローンとして利用するようにゃ機能や実績は乏しいServer2012に比べ、ZFS上のスナップショットはファイルをコピーする程度の気楽さで使えるし、個数制限だのIO負荷が高いと全部消えるだのといったおもしろ制限が無いため、極めて実用的である。
RAID:
Server2012の良いところは異にゃる容量のHDDを混載してその上に任意のレベルのRAIDボリュームを作成できることである(まとめて1容量にできるわけではにゃいが)。しかも取り外しも可能。ZFSにゃんてせいぜい頑張って2台ペアでRAID10しにゃいと混載は難しい。仕組み的にもRIADZと違ってHDD台数が増えればランダムリード性能も向上してくれるため、一般的にゃ用途でも大きにゃ問題にゃく使用できるはず。但しRAID6は最低台数に少々難がある。ZFSはRAIDZ2、RAIDZ3のデータ保護性能が素晴らしく、書き込みが遅くにゃらにゃいので巨大データのバックアップ先にゃどに優れているがランダムリードは遅いのでデータ保護性能を下げてRAID10を使うにゃどという必要に迫られる。
とまぁそんにゃ感じにゃのでどっちもどっちかにゃぁと
▼ ZFS 関連記事
ZFSでsyspoolを別のドライブに移動させたりする場合の作業メモ。
状態として
echo |format
0. c0t0d0 <DEFAULT cyl 3184 alt 2 hd 255 sec 63>
1. c0t1d0 <DEFAULT cyl 3184 alt 2 hd 255 sec 63>
で
zpool status
syspool ONLINE 0 0 0
c0t0d0s0 ONLINE 0 0 0
みたいにゃ状況だとすると、
formatで
fdisk
partition
label
をそれぞれ実行後、
prtvtoc /dev/dsk/c0t0d0s0 | fmthard -s - /dev/rdsk/c0t1d0s0
zpool attach -f syspool c0t0d0s0 c0t1d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0t1d0s0
でいけるはず。
もしprtvtocで
fmthard: Partition 2 specifies the full disk and is not equal
full size of disk. The full disk capacity is
とか、
installgrubで
Partition 0 of the disk has an incorrect offset
とか言われたら、formatのとこの作業が抜けてる気味。
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
NICを挿したはいいが、ドライバがにゃい!
ということのようにゃので、仕方にゃいからOpenSolarisの/kernel/drv以下あたりからceのドライバを引っぱってくる。たぶんamd64のだけで良いと思うがもう分からん。ce.confも一応touchしてみたり。
で動くかと思いきや自動認識しにゃいのでprtconfでNICを探す。pci100bとつくのが今回挿したSun GigaSwiftっぽいので、
add_drv -v -i "pci100b,35" ce
みたいにすると/etc/path_to_instにceが4行追加されて、/etc/driver_aliasesにもce "pci100b,35"みたいにゃのが追加される。
にゃんか今時じゃにゃいドライバにゃので扱いにも注意ぽいんだが、まぁにゃんとかにゃるだろう。
とりあえずVLAN使うとMTU削られるとか、細々とアレである
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
ある程度パフォーマンスを求めるとBBWC付きのRAIDカードの載った鯖にNexentaを入れることににゃるだろうが、その際にどこでどーゆーRAID構成を使えばよいのか話。
問題ににゃるポイントはいくつか。
・RAID5/6読み込みパフォーマンス。ZFSが圧倒的に遅い。特にQueueが浅く中サイズのランダムRead気味にゃ場合はZFSが分散書き込みした全ドライブから読まにゃいとRead完了しにゃいのでレイテンシ最悪。HW-RAIDであればほぼドライブ数分のRAID0相当ににゃるので最高レベルの性能ににゃる。
・RAID5/6書き込みパフォーマンス。ドライブ数が多くにゃってくるとZFSが速い。しかしそこいらにあるBBWC付きRAIDカードのRAID5/6書込み速度が問題ににゃる場面ってそんにゃに多くはにゃい気はするのと、Raidz/Raidz2はつまり大量のランダム書き込みがあるがread性能は大して求められにゃいストレージに向けということでよりそんにゃ場面はにゃい気味。
・RAID1書き込みパフォーマンス。ZFSのmirrorにゃどは全ての構成ドライブに書き終えるまで処理が止まるので基本的に遅い。HW-RAIDの場合も同じ場合が多いが、こちらはとりあえずキャッシュに隠蔽されるので、RAID1に関してはHW-RAIDの方が速い場合が多い。もちろんシングルドライブRAID0アレイを2つでZFS-mirrorすることでBBWCの効いたドライブにmirror書き込みできるので大きにゃ差は無いとも言えるが、BBWCの容量は2倍必要とにゃる。
・耐障害性。ZFS圧勝。まずRebuild時に全域読むことが少にゃいので過負荷で連鎖大惨事ににゃることが少にゃい。まぁ満杯までデータ入ってたら大差にゃいが。それから多少ドライブエラーが生じてもスルーしてカバーしてくれるので、軽いエラー吐いただけでドライブを切り離してしまい冗長性が一気に減ずるHW-RAIDよりデータ延命率が格段に高い。
・サイレントクラッシュ。HWでRAID1したドライブをZFSで使用してたらチェックサムエラーで一部ファイルが破損したことが。ディスクというよりどっかの転送時の化けにゃんだろうけど、HWのRAIDは読んだデータの整合性は取ってにゃいのでこういうことが。ZFSがRAIDカードにキャッシュの破棄と再読み込み、別の構成ドライブから読み込みにゃんかを指示できれば多分解決にゃんだけどそんにゃ機能が載ることは無さそう。対策としては、ZFS上で冗長化するか、頻繁にHW-RAIDのメディアパトロールや整合性検査をかけて自力復活に期待するかであるが、HW-RAIDの自己努力の場合にはRAID5/6を選択しメディア検査ではにゃくチェックサム検査をバックグラウンドで頻繁に実行できるRAIDカードである必要がある。
・故障予防。HW-RAIDであればパトロール的にゃ機能が付いてるが、ZFSのscrubはデータのある領域しか読まにゃいので予防的にゃ意味ではちょっと辛い。dd等で自作の全域readを組んでおけば解決できるが割と面倒。
・I/O負荷。やはりソフトウェアでRAID処理する分、I/Oは2倍程度まで増えることににゃる。大量書き込み時にちょっとしんどい目。但し圧縮その他を有効にしてる場合はそっちが主にゃ負荷ににゃる。
・保守性。HW-RAIDでホットスワップ可能にゃら抜いて刺すだけでOKにゃお手軽さがあるが、ZFSでdetachして云々する場合は操作ミスの可能性もあるので割と慎重ににゃらざるを得にゃい。特にHW-RAIDに単ドライブRAID0で割り当ててる場合はRAIDのBIOS画面かSolaris上からツールを叩いて認識させる必要があり、これまた割とリスキーかつ面倒にゃ作業ににゃる。
で、実際どうすんのって話で、
・HW-RAID1を複数作成 → zpool create HDD1 HDD2 HDD3・・・のパターン。容量は1/2で我慢だがドライブ故障時はHW-RAIDが教えてくれるし修復も簡単。但しサイレントクラッシュされるとお手上げ。
・HW-RAIDでRAID5作成 → zpool create HDD1のパターン。もうZFS RAID関係無し。ドライブ数が多い場合は怖いのでRAID50とかRAID6とかに。サイレントクラッシュとかリビルドとかがトラウマ要因だが日々のパトロールでかにゃり緩和されるはず。
・zpool create mirror HDD1 HDD2 mirror HDD3 HDD4・・・のパターン。ランダムリード性能を確保しつつある程度高い耐障害性を確保的にゃ。オールマイティに可もにゃく不可もにゃく。これ以外に構成上read性能上げる方法がにゃい。
・zpool create raidz HDD1 HDD2 HDD3 HDD4・・・のパターン。使い道に悩むが性能を要求しにゃいNAS的にゃ用途であれば割と普通に使える。大量メモリ大量L2ARCすればそれにゃりに使える。raidz2にすれば最高クラスの堅牢度ににゃるのでガチにゃデータ用にはいい感じ。
とまぁあんまり選択肢にゃいにゃぁという。これといった決め手に欠けるZFSさんにしょんぼり。
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
以前書いたがDedupやL2ARCで使われるARC領域は全ARCの1/4くらいに制限されてる。
echo ::arc | mdb -k
hits = 6,579,098,581
misses = 452,069,693
demand_data_hits = 1,568,821,337
demand_data_misses = 35,059,825
demand_metadata_hits = 3,224,194,606
demand_metadata_misses = 45,501,861
prefetch_data_hits = 125,750,375
prefetch_data_misses = 128,235,341
prefetch_metadata_hits = 1,660,332,263
prefetch_metadata_misses = 243,272,666
mru_hits = 1,426,213,514
mru_ghost_hits = 13,497,486
mfu_hits = 3,403,854,705
mfu_ghost_hits = 281,484,703
deleted = 250,271,016
recycle_miss = 65,465,441
mutex_miss = 415,133
evict_skip = 414,384,099
evict_l2_cached =11,321,550,825,472
evict_l2_eligible = 6,392,283,271,680
evict_l2_ineligible = 9,111,346,605,568
hash_elements = 1,457,128
hash_elements_max = 2,131,419
hash_collisions = 2,674,957,304
hash_chains = 255,459
hash_chain_max = 26
p = 5,607 MB
c = 8,820 MB
c_min = 1,406 MB
c_max = 11,255 MB
size = 8,820 MB
hdr_size = 147,103,056
data_size = 8,951,655,424
other_size = 33,156,048
l2_hits = 52,579,407
l2_misses = 399,487,072
l2_feeds = 12,909,282
l2_rw_clash = 3,235
l2_read_bytes = 1,967,823,256,576
l2_write_bytes = 6,513,012,548,096
l2_writes_sent = 7,047,789
l2_writes_done = 7,047,789
l2_writes_error = 0
l2_writes_hdr_miss = 2,309
l2_evict_lock_retry = 1,405
l2_evict_reading = 184
l2_free_on_write = 5,408,775
l2_abort_lowmem = 418
l2_cksum_bad = 0
l2_io_error = 0
l2_size = 61,163,917,312
l2_hdr_size = 127,183,488
memory_throttle_count = 0
arc_no_grow = 0
arc_tempreserve = 0 MB
arc_meta_used = 2,813 MB
arc_meta_limit = 2,813 MB
arc_meta_max = 6,029 MB
c_maxが11Gほどあるが、これはマシンメモリが12Gにゃので-1gくらいした容量が最大ということににゃる。
これを1/4するとarc_meta_maxの3g弱とにゃる。L2ARCを付けてCacheする場合はここから消費されるので、巨大SSDを付けても全領域使われにゃいと言うことがあり得る。
L2ARCの1エントリあたりARCを200 bytes消費するらしい(Dedup時はもっと)ので、1エントリ平均を4k位(実際には可変サイズ)だとすると56Gほどが上限とにゃり、l2_sizeの値とだいたい一致する。マシンには64GのSSDが載ってるので微妙に使い切ってにゃい。
で、大雑把に乗っけるSSDサイズとarc_meta_limitの対応表が欲しいのだがブロックサイズ可変にゃために何とも分からにゃい。上述の4KB平均だと見にゃすと、
乗っけるSSDサイズ、4KBブロック平均の時にarc_metaが消費するメモリ量、arc_meta_limitデフォ時にSSDをL2ARCで使い切るための物理メモリ量は概算で、
L2ARC 32GB : arc_meta_limit 1.5GB : 物理mem 7GB
L2ARC 64GB : arc_meta_limit 3GB : 物理mem 14GB
L2ARC 192GB : arc_meta_limit 9GB : 物理mem 39GB
L2ARC 256GB : arc_meta_limit 12GB : 物理mem 51GB
L2ARC 512GB : arc_meta_limit 25GB : 物理mem 101GB
と言った感じ。必要物理memはarc_meta_limitをデフォの1/4から3/4あたりまで増やせば1/3くらいで済むはずだが、L2ARCはあまり賢くにゃいし書き込み中は読み込みも遅くにゃるSSDが多いので、metaじゃにゃいARCが十分取れるメモリ量でにゃければ逆効果ににゃるかもしれにゃい。平均ブロックサイズが細かいと数倍食うわけで、まぁ場合によってはちょっとしんどいかにゃぁという。
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
フツーのZFS鯖でディスク障害でDegradeという一般的にゃ状態にゃんだが、zfs clearすると割と瞬時に復帰したり。
で当該ディスク調べてみたら、ddで特定部分読むとI/O Errorが返ってくる。そこ以外は正常。
にゃのでdegrade後に書かれた部分だけ再同期してすぐ正常に戻っちゃったという。
よく分からんのはこのディスクのこの部分が自動的にマークされて使用されにゃくにゃるのか、clearした時点で全て正常と見にゃされるのか。
zdbすると
faulted: 1
aux_state: 'err_exceeded'
とか付いてるが表面上は正常。
scrubしても正常。これは偶然まだ未使用にゃのかマークされて未使用にゃのかわからん。scrub時に不良があれば移動させるだろうから、それと同じ処理が走ったとすればマークされて使用されにゃくにゃっていると思われるのだが微妙。
むろんそんにゃ部分的にも不良発生したドライブ延々と使い続けるのはよろしくにゃいのだが。
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
というわけでちょっと長くにゃったのでまとめ。
例えば以下のようにゃ構成であれば有りかも知れにゃい。
iscsi target複数台
・安価
・RAID5(≠RAIDZ)構成。冗長性は0でよいがRAID0で全滅→マシンごとリビルドは負荷が大きいため
・キャッシュ利用効率は低い(他のtargetと同じ内容をキャッシュすることがある)のでメモリは少にゃくて良い
・電源その他信頼性が高くにゃくても良い
vmホスト
・ある程度のCPUとメモリリソースがある(RAID用vmに食われる)
・ある程度のNIC数(十分にゃiscsi帯域が必要)
・SAS RAID0またはSSD(RAID用vmのキャッシュとして使用)
RAID用vm
・ZFS使える何か
・複数のiscsi targetをRAID1
・ホストのドライブをキャッシュに割り当て
・CPUとメモリを優先割り当て
・iscsiまたはnfsでshare
vm
・RAID用vmと同ホストで動作させる(ホストが落ちれば一蓮托生)
とまぁこんにゃところか。
遅い、複雑というデメリットはあるが、vmホストが落ちにゃい限りデータが二重化されておりiscsi targetが1台死んでも問題にゃく動き続けるというメリットがある。
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
誰しも一度は考えてみるであろう、iscsi数本を束ねてRAIDにしたらどうにゃるんだろう実験。
まずは物理ZFS iscsi target x2をさらにnexenta vmでRAID1に束ねた物をnfs共有という婉曲にゃ状態でvmを置いてうごかしてみた。
遅い。
何はともあれディスクレイテンシが酷すぎる。
共有をiscsiにしてvmホスト上でローカルマウントしてるnfsをiscsiにしてみると多少速くにゃる。
が、ディスクとしての扱いはある程度正常に動くようで、片側のiscsi targetを削除するとしばらくタイムアウト待ちしていたがfaultににゃって片肺運転に移行した。
データが複数マシンにミラー保存されるという点では大きにゃメリットがあると言えよう。
iscsi targetは任意の非冗長化物理マシンで良く、vmホストまたはRAID用vmが死にゃにゃい限りは耐障害性に優れていると言える。つまり各vmホストにRAID用vmを配置すればストレージマシンへの投資を大幅に減らすことが出来る、かもしれにゃい。物理iscsi targetマシンには冗長性が不要で、snapshot等の機能も必要無くにゃる。
デメリットとしてはやはりパフォーマンスである。ディスクレイテンシはiscsi targetを束ねているvmのCPU割り当てを優遇することで多少改善する。もちろんメモリ割り当ても増やせばキャッシュに載る量が増える。vmホストにSSDやSAS RAIDが載っていればそこにvmdkを置いてcacheとすれば良いだろう。しかしそこまでして尚、各vmホストのCPUとメモリをそれにゃりに食うことは間違いにゃく、あまりスマートにゃ方法とは言い難い。
また別vmホストのRAID用vm上のvmを動かすことは可能だが冗長性の点でメリットが無くにゃるため、vmをホスト間で移動する際にはvmのストレージも同時に移動させるべきであり、共有ディスクにおける30秒程度でホスト間vm移動という手軽さはスポイルされる。
RAID用vmをlinux等もうすこし軽量にゃOSにすると多少の改善が見られるが、vm特有の遅さが付きまとうことと、zfsによる手軽にゃsnapshot機能は代え難い物がある。また、vmを使用する上でcompressは非常に有用であるが、vm上で行うとこれもレイテンシの増加を加速させる要因とにゃる。
キャッシュ類の効率的にはiscsi target側のほぼ全てのキャッシュが無駄にゃので全てRAID用vmに集約したいところだが、そこにリソースがふんだんに余ってにゃい限り厳しいことににゃる。
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
Nexentaにiscsi targetを付けてたんだが、停電で落ちたので行方不明に。
再接続しても自動復帰しにゃいようにゃのでzfs系の復帰を試みる羽目に。
まずzpool cleanしたらscrubが自動で走ったのだが、これがiscsiにゃので劇遅。そこいらのckfs的にゃのが少にゃいのがzfsの売りじゃにゃいのかと。
で、scrub終わっても
errors: Permanent errors have been detected in the following files:
<metadata>:<0x0>
/volumes/tank1/
/volumes/tank1/share1/
みたいにゃのが居残る。アクセスは普通に出来てるあたりがまたキモイ。
で、試しに再度手動でzpool scrubしたら綺麗さっぱり直った。わけがわからにゃいよ
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
NexentaStor(CE)に外付けiscsiストレージを繋げようとして、マルチパス設定が見つからず。。。
まぁそもそもターゲット側の話でもあるんだが、ターゲット側は複数IPで公開してて、まぁそれを全部登録してみたんだがそゆのの一覧とか出にゃいわけでうーん?
が、複数IPで登録したターゲット名でマウントしたら「Number of Sessions」で設定した数だけTCP張られて別IPに分散して動いてる模様。
詳細不明だがとりあえずこれでいけてることにしよう。
尚その辺の情報は
iscsiadm list initiator-node
iscsiadm list target -v
iscsiadm list target-param -v
とかで。
チューニングはよくわからんので
iscsiadm modify initiator-node -T recv-login-rsp-timeout=5
iscsiadm modify initiator-node -T polling-login-delay=2
とか設定して実験する予定。さっぱりHITしにゃいんだがデフォでいいということかしら??
尚、MS iscsi targetに繋げようとすると長時間応答が無くにゃり、終いにcore吐いて再起動かかるので注意(笑)
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
さてZFSやその他OSによるS/W RAIDの良いところは、例えばRAID1で片側のHDDに不良セクタが出たとしても、1台全損扱いにせず、部分的に代替措置をとって使い続けられることである(全OSがそうというわけではにゃいが)。
H/W RAIDにもそういった物はあるが、とりあえず不良が少しでも出たらそのドライブごとパージってのが基本かと思われる。
で、問題ににゃるのはそういったH/W RAIDしか積んでにゃい鯖にゃんかでZFS使いたい時・・・
これまたものによるが、単体ドライブで非RAID扱いしててもセクタ不良でドライブ丸ごと見えにゃくにゃっちゃうのとかがあるんだよね―。もうRAIDカードが裏目に出すぎという。
素直にH/W RAID組んで使っとけばいいんだが、データ化けしたこともあってもういろいろと信用にゃらん。
▼ ZFS 関連記事
RAIDカード側でRAID1してたマシン上でZFS使ってたのだが、zpoolがDEGRADEDだぞーとか言われて、にゃんじゃそりゃと。
で調べてみたらチェックサムで死亡認定されてて、要するにH/WでRAID1してたけどreadかwrite時に化けて、次にzfsからreadされた時にチェックサム合わずに死亡認定されたということらしい。めんどくさいのでraid1上での整合性は調べにゃかった。
まぁ死んだのはそのファイルだけにゃので、後は何とかすればいいんだが、そのファイルがvmの巨大ファイルだったりして大変面倒にゃことに。vm上からもちゃんとread errににゃるんだにゃぁ的確認は出来たけど(笑)
ホットスワップ楽にゃんだもん的発想でH/WでRAID1してそれをZFSにつっこんでたのだが、これは流石にZFSから各ドライブ直接駆動するのが正解だった。そうそう起きるもんではにゃいと踏んでたのだがにゃぁ。
▼ ZFS 関連記事
RAIDカード無しの直付けHDDが死んだのでメモ。
# zpool status
pool: pool1
state: DEGRADED
NAME STATE READ WRITE CKSUM
pool1 DEGRADED 0 0 0
mirror-2 DEGRADED 0 0 0
c3d1 FAULTED 9 54 0 too many errors
DEGRADED状態。
死んだのはこの子。
# iostat -Ei
cmdk0 Soft Errors: 276 Hard Errors: 16 Transport Errors: 0
Media Error: 292 Device Not Ready: 0 No Device: 0 Recoverable: 0
一応あがいてみる。
# zpool clear pool1 c1d0
# zpool online pool1 c1d0
# less /var/log/messages
Error for command 'read sector' Error Level: Retryable
gda: [ID 107833 kern.notice] Requested Block 0, Error Block: -5111651
gda: [ID 107833 kern.notice] Sense Key: write fault
gda: [ID 107833 kern.notice] Vendor 'Gen-ATA ' error code: 0x4
gda: [ID 107833 kern.warning] WARNING: /pci@0,0/pci-ide@1f,2/ide@1/cmdk@1,0 (Disk3):
はいダメポ。
てことで物理的にHDD交換が必要ににゃったんだが、ホットスワップじゃにゃいんだよねこのPC。めんどくせー
▼ ZFS 関連記事
にゃんだかdedup=onした鯖のディスクアクセスが多すぎるので調査。
echo "::zfs_params" |mdb -k
arc_reduce_dnlc_percent = 0x3
zfs_arc_max = 0x0
zfs_arc_min = 0x0
arc_shrink_shift = 0x5
zfs_mdcomp_disable = 0x0
zfs_prefetch_disable = 0x0
zfetch_max_streams = 0x8
zfetch_min_sec_reap = 0x2
zfetch_block_cap = 0x100
zfetch_array_rd_sz = 0x100000
zfs_default_bs = 0x9
zfs_default_ibs = 0xe
metaslab_aliquot = 0x80000
mdb: variable reference_tracking_enable not found: unknown symbol name
mdb: variable reference_history not found: unknown symbol name
spa_max_replication_override = 0x3
spa_mode_global = 0x3
zfs_flags = 0x0
mdb: variable zfs_txg_synctime not found: unknown symbol name
zfs_txg_timeout = 0x1e
zfs_write_limit_min = 0x2000000
zfs_write_limit_max = 0x5fe47e00
zfs_write_limit_shift = 0x3
zfs_write_limit_override = 0x0
zfs_no_write_throttle = 0x0
zfs_vdev_cache_max = 0x4000
zfs_vdev_cache_size = 0x0
zfs_vdev_cache_bshift = 0x10
vdev_mirror_shift = 0x15
zfs_vdev_max_pending = 0x1
zfs_vdev_min_pending = 0x4
zfs_scrub_limit = 0x1
zfs_no_scrub_io = 0x0
zfs_no_scrub_prefetch = 0x0
zfs_vdev_time_shift = 0x6
zfs_vdev_ramp_rate = 0x2
zfs_vdev_aggregation_limit = 0x20000
fzap_default_block_shift = 0xe
zfs_immediate_write_sz = 0x8000
zfs_read_chunk_size = 0x100000
zfs_nocacheflush = 0x1
zil_replay_disable = 0x0
metaslab_gang_bang = 0x20001
metaslab_df_alloc_threshold = 0x20000
metaslab_df_free_pct = 0x4
zio_injection_enabled = 0x0
zvol_immediate_write_sz = 0x8000
echo ::arc | mdb -k
hits = 2,892M
misses = 85M
demand_data_hits = 716M
demand_data_misses = 12M
demand_metadata_hits = 1,968M
demand_metadata_misses = 19M
prefetch_data_hits = 51M
prefetch_data_misses = 22M
prefetch_metadata_hits = 155M
prefetch_metadata_misses = 29M
mru_hits = 408M
mru_ghost_hits = 1M
mfu_hits = 2,283M
mfu_ghost_hits = 52M
deleted = 46M
recycle_miss = 8M
mutex_miss = 119K
evict_skip = 27M
evict_l2_cached = 2.2T
evict_l2_eligible = 1.7T
evict_l2_ineligible = 1.9T
hash_elements = 1M
hash_elements_max = 1M
hash_collisions = 550M
hash_chains = 243K
hash_chain_max = 21
p = 6,127 MB
c = 8,934 MB
c_min = 1,406 MB
c_max = 11,250 MB
size = 8,934 MB
hdr_size = 170M
data_size = 9,131M
other_size = 33M
l2_hits = 19M
l2_misses = 65M
l2_feeds = 4M
l2_rw_clash = 827
l2_read_bytes = 474G
l2_write_bytes = 1.5T
l2_writes_sent = 1M
l2_writes_done = 1M
l2_writes_error = 0
l2_writes_hdr_miss = 1K
l2_evict_lock_retry = 162
l2_evict_reading = 107
l2_free_on_write = 3M
l2_abort_lowmem = 230
l2_cksum_bad = 0
l2_io_error = 0
l2_size = 26G
l2_hdr_size = 35M
memory_throttle_count = 0
arc_no_grow = 0
arc_tempreserve = 0 MB
arc_meta_used = 2,812 MB
arc_meta_limit = 2,812 MB
arc_meta_max = 2,921 MB
・・・・・?
arc_meta_limitにゃるものが2.8Gほどににゃってるが、これはc_maxの1/4か。つまりarc_metaのサイズは全ARCの1/4がリミットとされているわけか。これはdedupメインの鯖だと問題だにゃ。
本来は/etc/systemに
set zfs:zfs_arc_meta_limit = c_max未満(byte)
とか書いてrebootにゃはずだが、とりあえず関連しそうにゃの全部変更。
echo "zfs_arc_meta_limit/Z 0x20F580000" | mdb -kw
echo "arc_meta_limit/Z 0x20F580000" | mdb -kw
echo "arc_meta_max/Z 0x20F580000" | mdb -kw
arc_meta_limit = 8,437 MB
arc_meta_max = 8,437 MB
で、しばらく放置してるとarc_meta_usedが微妙に増加していく感じ。arc_no_grow=1とにゃる事があるけどこれはどうも急激に増減しにゃいか何かの仕組みぽい。
で、これでdedup鯖のIO過多が収まるかどうかはちょっとよく分からにゃい。再起動するのは少々骨が折れるにゃぁ。
▼ ZFS 関連記事
mem12g HDDx6 RAID10 SSDありという割と頑張ってる環境で、Dedupをonにすると極端に遅くにゃる。下手するとvmがタイムアウトする。
いまいち原因が分からにゃいんだが、マシンごと分離するくらいの勢いじゃにゃいと安易にdedup噛ますのは危険ってのがこれまでの感触。
zpoolがほぼ新品で、巨大ファイルをたまに追加するようにゃ運用だと非常にいい感じにゃんだが、vm置き場みたいにゃ頻繁にゃアクセスを行うと、何かでIO量が超えると急激に追いつかにゃくにゃるようにゃ。
ARCは足りてるしSSDに待避されるはずだからこんにゃはずはにゃいんだがにゃー、ってことで要調査だね。
どうも大したアクセスも無いのに連続してdisk readが続いてて、zfsの仕組み上発生してる気味。writeがある度にDDTをディスクに読みに行ってるとすれば、R/Wが連続することににゃるからたぶんそのへんかにゃぁ。
▼ ZFS 関連記事
ZFSのCOWってどう考えても断片化するよね、というのと、RAID-ZってWriteはいいけどReadが壊滅的に遅いよね(原理的に)というのが重にゃるとどうにゃるのかにゃ、というわけにゃんだけど。
5400rpm 2TBのSATA x6をM/B直結で作った、所謂ZFS向けの環境(OI)が、そろそろ十二分に断片化されてきたようで、Readが遅い遅い。
とくに容量ぎりぎりまで使っていくと、それはそれは大変酷いことににゃるわけで、こういう巨大ファイルの一部分がちまちま変更されて、常時snapshot使いまくりで、RAID-Zみたいにゃ環境は、それこそSSD-Cache積むとか何とかしにゃいと大変にゃことににゃるにゃぁという。特に容量の90%埋めたのは明らかに不味かった。80%に戻しておく。
まぁ主にバックアップ先の低速NASとしてしか使ってにゃいのでこれでOKにゃんだけども。
▼ ZFS 関連記事
現状のdedupはメモリを食うこともあってあまり貧弱にゃ環境で使うといろいろ困ったさんだったのだが、そろそろ安定してきた感もあるのでmem 12gにゃ鯖に投入。たぶん食いつぶすことはにゃいはず。
cp -r dir
でvmを複製するときにほとんどディスクアクセスがにゃいのが萌え。
あと理屈通り、重複した部分のデータはキャッシュ効率が高くにゃるので、cpでvmを増やしまくった場合にゃんかはそれら全てがほぼオンメモリで動いてくれて快適。
逆に言えば、重複したデータを同時に大量に読み出されるようにゃ場面が無い限り、費用対効果は微妙といったところか。明らかに重複しにゃい動画ファイルにゃんぞを置く場合にはdedup=offしたほうがいいだろう。
▼ ZFS 関連記事
ARCって不要にゃシーケンシャルアクセスにゃんかには使われにゃいぽいんだが、どうみても使われてる気がするので、そのあたりどうにかにゃらんのかにゃぁと思って調べてみた。
キャッシュ系の制御だと
zfs set primarycache=none
zfs set secondarycache=none
にゃんかがあるらしく、後者はL2ARC用。
これでにゃんぞ、動画ファイルみたいにゃARC使わにゃいでいいデータをこっちに置いとけばにゃんとかにゃるよみたいにゃ。
といってもzfsのフォルダ単位にゃので、そうそう簡単にいくわけもにゃく、まぁどうにゃんだろうねって言う。
一応、cloneしといてprimarycache=noneにすればほぼRAWにゃ感じにゃのでバックアップとかで全コピーするときはやっても良いのかもしれにゃい。まあそこまでキャッシュのこと考えるのも大変だが。
▼ ZFS 関連記事
NexentaStorで怪しいディスク構成で使ってたNASが急激に遅くにゃった。
zvolを取ってにゃいdisk3,disk4にのみ常時5MB/s程度の書き込みがあり、ほかのread/writeジョブがほとんど処理されにゃい状態で、外から見たwriteの待ち時間が異常にゃ事態に。
重くにゃりすぎて上で動いてたvm群がタイムアウトし始めたので緊急対処。
原因が分からぬ&調べ方を調べてにゃいというわけで、とりあえずsnapshotを順次削除したら正解だったぽい。
毎時1 snapが取られる設定で2ヶ月くらい、ということは1400 snapくらいか。400ほど消して空きが500gから700gににゃったあたりで多少低速だがまともに動作するようににゃった。
いろいろ腑に落ちにゃいが構成が怪しすぎてにゃんとも言えにゃい。
因みに1200 snapほどの別のまともにゃ構成の鯖では全く低速化していにゃい。まぁメモリ容量とか違うんで一概には比較できにゃいのだが。
▼ ZFS 関連記事
NexentaStor + ESXでnfsとか使う場合に、LAGでL3,L4ポリシーしてもESX側が単一にゃので負荷分散されねえという件で、んじゃnas側のIPを複数作っちゃってデータストアも複数にしちゃえ、という案。多分運用が煩雑ににゃることが予想される(笑)
IP aliasはGUIか、
setup network interface aggr1 ipalias create -i 100
setup network interface aggr1:100 static -i 123.123.123.100 -m 255.255.0.0
とかで増やす
dladm modify-aggr -P L2,L3,L4 aggr1
vi /etc/hosts
cd /vmfs/volumes/ ; ln -s /volumes/pool1/share/ hoge
ESXホストでは
vim-cmd hostsvc/datastore/nas_create hoge 123.123.123.123 /volumes/pool1/share 0
を全鯖で。
あと自前管理用Linuxが面倒で、
libのnas一覧に追記
mkdir /vmfs/volumes/hoge
fstabに追記
mount -a
syncしてvm reboot サテライト鯖
とか一連の作業が。
うーん、わりとめどい。
▼ ZFS 関連記事
NexentaStorのinst時に2ディスク選ぶと自動でmirror設定してくれてそれはよいのだが、ディスク領域全部がsyspoolににゃっちゃうんよね〜
以前からダメダメポイントだったんだがやっぱり改善されてにゃくてがっかりにゃわけだが、一応強引に使えんことはにゃいだろうということで実験。
disk1 : syspool mirror
disk2 : syspool mirror
disk3 :
disk4 :
という状況で、
zfs create -V 100g syspool/vol1
zpool create -f pool1 /dev/zvol/dsk/syspool/vol1 mirror disk3 disk4
すると。まぁweb-UIで表示がおかしくにゃるが、一応動く。
raidz時だとこれはどうにもにゃらんのだが、raid10にゃら見かけ上はこれでできんことはにゃいといったところか。
▼ ZFS 関連記事
zfs ver5あたりから、zilの代わりにsync設定ができるようににゃったみたい。
zfs get sync pool1/share
とかすると表示される。
zfs set sync=standard pool1/share
zfs set sync=always pool1/share
zfs set sync=disabled pool1/share
が可能で、まぁnfsとかにゃらdisabledがいいかにゃー?みたいにゃ。
set zfs:zfs_nocacheflush = 1
と影響に違いがあるのかどうか分からにゃいが、細かく設定出来るようににゃったのはよいことかと。
▼ ZFS 関連記事
NexentaStor CommunityEdition 3.11が思ったより使えそうににゃってたので実機にInst。
相変わらずレジストがめどい。
あとMTUがどうのと出てnicがupせず手動でごにょる必要が。ハブか?
そのままだとNICの設定に失敗することがあるので、rootで入って
setup network interface nic1 static
でMTUを1600にして設定。再度1500に戻せば認識する。
aggregationする場合は、使用するNICEのMTUを1500にしてから
setup network interface nic1 unconfigure
setup network interface nic2 unconfigure
して
setup network aggregation create
setup network interface aggr1 static
する。
GUIからzfs_nocacheflushのほか、
setup appliance nms property net_tcp_recv_hiwat -y -p 524288
setup appliance nms property net_tcp_xmit_hiwat -y -p 524288
setup appliance nms property net_tcp_naglim_def -y -p 1
setup appliance nms property sys_zfs_vdev_max_pending -y -p 1
(効かにゃい?)
zfs set mountpoint=/volumes/pool1 pool1
zfs set sync=disabled pool1
zfs set sync=disabled pool1/share
zfs set atime=off pool1
zfs set atime=off pool1/share
zfs set snapdir=visible pool1
zfs set snapdir=visible pool1/share
echo set zfs:zfs_scrub_delay = 100 >> /etc/system
echo set zfs:zfs_scrub_limit = 1 >> /etc/system
echo set rpcmod:clnt_max_conns = 8 >> /etc/system
echo set hires_tick = 1 >> /etc/system
# RAID HBA CACHEとCompress関連で調整
echo set zfs:zfs_txg_timeout = 10 >> /etc/system
echo set zfs:zfs_write_limit_override = 0 >> /etc/system
# SATA直結の場合1〜 SAN等には30〜
echo set zfs:zfs_vdev_max_pending = 1 >> /etc/system
# Dedup/L2ARC使用時
echo set zfs:zfs_arc_meta_limit = $(( $(echo "::arc" | mdb -k | grep "^c_max" |sed -e 's/^[^=]*=[ ]*//' -e 's/ *MB//')000000 / 10 * 8 )) >> /etc/system
割合は適当に変更
あたりを一応。
updateは
setup appliance upgrade
か、
apt-clone dist-upgrade
とかして
reboot
sudoその他が入ってにゃいので、
apt-get update ; apt-get install sudo top
apt-get install sunwter
とかはしといたほうがいい。
ユーザの追加はGUIからだけだと/home以下にディレクトリが無いとかいろいろ。
u=user1
echo "$u localhost:/export/home/&" >> /etc/auto_home
usermod -d /home/$u $u
echo "$u::::roles=root" >> /etc/user_attr
mkdir /export/home/$u
chown $u.staff /export/home/$u
位しとけばとりあえず何とかにゃるか?
あとはいつもの
visudo
user1 ALL=(ALL) NOPASSWD: ALL
Defaults:user1 !env_reset
# nfs clientのIPを全部登録
vi /etc/hosts
seq 1 9|while read a ; do echo 123.123.123.$a sv0$a ; done | grep -v $HOSTNAME >> /etc/hosts
seq 10 254|while read a ; do echo 123.123.123.$a sv$a ; done | grep -v $HOSTNAME >> /etc/hosts
cd /
ln -s /volumes/pool1/
mkdir -p /vmfs/volumes
cd /vmfs/volumes/
host=`cat /etc/nodename`
ln -s /pool1/share/ ds_$host
cd / ; ln -s /volumes/pool1
chmod 777 /pool1/share
crontab -e
ssh-keygen -t rsa
cd ; cd .ssh
vi authorized_keys
echo VerifyReverseMapping no >> /etc/ssh/sshd_config
とかとか
チューニング部分はまださっぱりだけど
▼ ZFS 関連記事
echo "::zfs_params" | mdb -kM
とかかしら? これでいいのかどうか分からんあたりが・・・
▼ ZFS 関連記事
cronでsnapshotを取ったりしてると、結局あとどの程度ディスク残量があるのか分からん。
ということで
zfs list -H -o usedbysnapshots /pool1/share
でsnapshotが使ってる容量を出せる・・・んじゃにゃいかにゃぁと。検証してにゃいけど。
つまり
zfs list -H -o available /pool1/share
で残容量とっといて、
perl -e 'foreach(@ARGV){s/([0-9.]+)T/$1*1024 .G/e;s/([0-9.]+)G/$1*1024 .M/e;s/([0-9.]+)M/$1*1024 .K/e;s/([0-9.]+)K/$1*1024/e;};$x=int(($ARGV[0] + $ARGV[1])/1024/1024/1024) ;print "${x}G\n"' `zfs list -H -o usedbysnapshots /pool1/share` `zfs list -H -o available /pool1/share`
で足して表示すれば、snapshot消した場合の利用可能容量が取れる、とかでいいのかにゃ。こんにゃ面倒にゃのは書かにゃくて良いとは思うけども。
うーん、これを残容量にするオプションはにゃいんかにゃ。つまりNTFSのみたく、自動的にsnapshotが消えて残容量ににゃってくれるようにゃにゃにか。
▼ ZFS 関連記事
zpool scrub
するとIO負荷が高すぎて特にnfsにゃんかが酷いことに。
zfs_vdev_max_pending を減らす
zfs_scrub_limitを減らす
といった手法でにゃんとかにゃるぽいので、
echo zfs_scrub_limit/W0t1 | mdb -kw
するようにすればOKみたい。
他には zfs_scrub_delay を増やすことでwaitを入れてくれる感じ。
echo zfs_scrub_delay/W0t100 | mdb -kw
zfs_top_maxinflight にゃんかも関係するみたいだがよくわからん。
問題はこの辺の数値が筐体によって全く異にゃるので、都度調節しにゃいといかんのがめどい
▼ ZFS 関連記事
さいきんのOpensolarisでZFSにゃnfs鯖の作業手順 更新版
1st HDDにinst。最小9Gだが20G〜30Gくらいとっとく。
GUIが有れば適度にIPとか変更。
以下の順に必要にゃ物だけ実行
dladm show-ether
dladm show-link
ifconfig nic0 plumb
ifconfig -a
echo 123.123.123.123>/etc/hostname.nic0
echo 123.123.123.123 255.255.0.0>>/etc/netmasks
echo 123.123.123.1>/etc/defaultrouter
echo hostname>/etc/nodename
echo domain local>/etc/resolv.conf
echo nameserver 123.123.123.1>>/etc/resolv.conf
svcadm disable svc:/network/physical:nwam
svcadm enable svc:/network/physical:default
cat /etc/nsswitch.dns > /etc/nsswitch.conf
ifconfig -a
init 6
ping 123.123.123.123
ping yahoo.com
ntpdate pool.ntp.org
pfexec pkg install SUNWipkg
pfexec pkg image-update
init 6
pfexec pkg image-update
init 6
pfexec pkg image-update
init 6
zpool upgrade rpool
zfs upgrade -r rpool
echo | format
0. c8t0d0 <DEFAULT cyl 290 alt 2 hd 255 sec 252>
1. c8t1d0 <DEFAULT cyl 291 alt 2 hd 255 sec 252>
2. c9t0d0 <DEFAULT cyl 291 alt 2 hd 255 sec 252>
3. c9t1d0 <DEFAULT cyl 291 alt 2 hd 255 sec 252>
format c8t1d0 fdisk create SOLARIS2 10GB(シリンダで1stディスクと似たようにゃ感じに指定)
format c9t0d0 fdisk create SOLARIS2 10GB(シリンダで1stディスクと似たようにゃ感じに指定)
format c9t1d0 fdisk create SOLARIS2 10GB(シリンダで1stディスクと似たようにゃ感じに指定)
但しHDDによってセクタ/シリンダとか違ってくるので違うHDD間でミラーする時は注意
format -e c8t1d0 label SMI
format -e c9t0d0 label SMI
format -e c9t1d0 label SMI
prtvtoc /dev/rdsk/c8t0d0s2 | fmthard -s - /dev/rdsk/c8t1d0s2
prtvtoc /dev/rdsk/c8t0d0s2 | fmthard -s - /dev/rdsk/c9t0d0s2
prtvtoc /dev/rdsk/c8t0d0s2 | fmthard -s - /dev/rdsk/c9t1d0s2
zpool attach -f rpool c8t0d0s0 c8t1d0s0
zpool attach -f rpool c8t0d0s0 c9t0d0s0
zpool attach -f rpool c8t0d0s0 c9t1d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c8t1d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c9t0d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c9t1d0s0
zpool list
zpool status
format c8t0d0 fdisk create SOLARIS2 99%
format c8t1d0 fdisk create SOLARIS2 99%
format c9t0d0 fdisk create SOLARIS2 99%
format c9t1d0 fdisk create SOLARIS2 99%
zpool create pool1 raidz c8t0d0p2 c8t1d0p2 c9t0d0p2 c9t1d0p2 c10t0d0p2 c10t1d0p2
zfs create -o atime=off -o casesensitivity=mixed -o snapdir=visible -o aclinherit=passthrough pool1/share
zfs set compression=on pool1/share
zfs set recordsize=64k pool1/share
zfs set aclmode=passthrough pool1/share
zfs set sharenfs=on pool1/share
chmod 777 /pool1/share
vi /etc/hosts
share
echo set nfs:nfs_allow_preepoch_time = 1 >> /etc/system
echo set nfs:nfs3_max_threads = 1024 >> /etc/system
echo set nfs:nfs3_nra = 32 >> /etc/system
echo set zfs:zfs_nocacheflush = 1 >> /etc/system
echo set zfs:zfs_txg_timeout = 5 >> /etc/system
echo set zfs:zfs_scrub_delay = 100 >> /etc/system
echo set zfs:zfs_scrub_limit = 1 >> /etc/system
echo set zfs:zil_disable = 1 >> /etc/system
echo set zfs:zfs_vdev_max_pending = 10 >> /etc/system
crontab -e
0 4 * * * svcadm restart idmap
0 * * * * ntpdate pool.ntp.org
svcadm restart cron
pkg install SUNWsmbskr
pkg install SUNWsmbs
init 6
svcadm enable -r smb/server
vi resolv.conf
zfs set sharesmb=on pool1/share
zfs set sharesmb=name=share1 pool1/share
smbadm join -w WORKGROUP
echo other password required pam_smb_passwd.so.1 nowarn >> /etc/pam.conf
passwd 既存ユーザ(smbpasswd相当)
smbadm join -u domain_admin DOMAIN
svcadm disable smb/server
svcadm enable -r smb/server
chmod -R A=owner@:full_set:fd:allow /pool1/share
chmod -R A+group@:full_set:fd:allow /pool1/share
chmod -R A+everyone@:read_set:fd:allow /pool1/share
sharemgr show -vp
init 6
useradd -b /export/home/ -g staff -m -s /usr/bin/bash user1
vi /etc/auto_home
usermod -d /home/user1 user1
passwd user1
vi /etc/user_attr
vi /rpool/boot/grub/menu.lst
svcadm disable gdm
visudo
user1 ALL=(ALL) NOPASSWD: ALL
Defaults:user1 !env_reset
mkdir -p /vmfs/volumes
cd /vmfs/volumes/
host=`cat /etc/nodename`
ln -s /pool1/share/ ds_$host
ssh-keygen -t rsa
cd
cd .ssh
vi authorized_keys
dladm show-ether
dladm show-link
ifconfig -a
ifconfig nic1 plumb
ifconfig nic2 plumb
dladm create-aggr -l nic1 aggr1
dladm add-aggr -l nic2 aggr1
ifconfig aggr1 plumb
ifconfig aggr1 123.123.123.124 netmask 255.255.0.0 up
ifconfig nic0 down
dladm add-aggr -l nic0 aggr1
dladm show-aggr
cp /etc/hostname.nic1 /etc/hostname.aggr1
dladm modify-aggr -P L2,L3,L4 aggr1
dladm modify-aggr -l passive aggr1
dladm show-aggr -L
dladm show-aggr -x
init 6
定期snapshotをcronに登録とか、mail送信用スクリプトを適当にゃ所にコピーとか、定期ディスク表面検査とか、ssh関連とかvisudoとか適時設定のこと。
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
rpoolをRAID1にするためにパーティションを・・・とか以外とよく分からにゃい。
[1st] : 1.5T inst済み
[2nd] : 1.0T ミラー先
format [1st] fdisk
Total disk size is 60800 cylinders
Cylinder size is 48195 (512 byte) blocks
Partition Status Type Start End Length %
========= ====== ============ ===== === ====== ===
1 Active Solaris2 0 1305 1306 2
format [2nd] fdisk
Total disk size is 60800 cylinders
Cylinder size is 32130 (512 byte) blocks
Partition Status Type Start End Length %
========= ====== ============ ===== === ====== ===
format [2nd] fdisk create SOLARIS2 c 1 X active
X = 48195 / 32130 * 1306
Partition Status Type Start End Length %
========= ====== ============ ===== === ====== ===
1 Active Solaris2 1 1959 1959 3
format [1st] partition print
Part Tag Flag Cylinders Size Blocks
0 root wm 1 - 1302 29.92GB (1302/0/0) 62749890
1 unassigned wm 0 0 (0/0/0) 0
2 backup wu 0 - 1302 29.94GB (1303/0/0) 62798085
format [2nd] partition print
Total disk cylinders available: 1957 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 unassigned wm 0 0 (0/0/0) 0
1 unassigned wm 0 0 (0/0/0) 0
2 backup wu 0 - 1956 29.98GB (1957/0/0) 62878410
format [2nd] partition 0 root wm 3 Xc
X = 48195 / 32130 * 1302
Part Tag Flag Cylinders Size Blocks
0 root wm 3 - 1955 29.92GB (1953/0/0) 62749890
1 unassigned wm 0 0 (0/0/0) 0
2 backup wu 0 - 1956 29.98GB (1957/0/0) 62878410
format [2nd] partition label
zpool attach -f rpool [1st]s0 [2nd]s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/[2nd]s0
とか、こうにゃのかにゃぁ? いまいち仕組みが分かってにゃい
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
opensolarisでディスクの表面検査だが、もうにゃんかもうちょっとマシにゃ物はにゃいんかね。
zpool scrubするとIO負荷高すぎだし、停止したら最初からやり直しだし。
formatでパーティション指定したら無限ループするし。
もうddで読んでエラーでにゃきゃもうそれでいいや、ってことで、
dd if=/dev/rdsk/c8t0d0p0 bs=1048576 count=9000000 | wc -c
とかで。値の9TBは大きい目の数字というだけ。
ま、このp0でいいのかってのが非常に微妙にゃのだが、s2とか状況に応じてやるしかにゃいか
ディスクの容量
iostat -En | grep -v "^Vendor:" |grep -v "^Media Error:" | grep -v "^Illegal Request:" |
sed -e 's/Soft Errors:.*//' -e 's/ bytes.*//' -e 's/ *$//' -e 's/.* //' -e 's/^<//' -e 's/\n//' |
while read a ; do read b ; echo $a $b ; done
とwcの出力を比較すると、一応全容量読んで止まってくれてる感じはするんだよね。まぁあんまし検証してにゃいけど。
てことで合わせると、
iostat -En | grep -v "^Vendor:" |grep -v "^Media Error:" | grep -v "^Illegal Request:" |
sed -e 's/Soft Errors:.*//' -e 's/ bytes.*//' -e 's/ *$//' -e 's/.* //' -e 's/^<//' -e 's/\n//' |
while read a ; do read b ; echo $a $b ; done |
while read a b ; do
dd if=/dev/rdsk/${a}p0 bs=512 count=1 >/dev/null 2>/dev/null || continue
echo $b $a start
dd if=/dev/rdsk/${a}p0 bs=1048576 count=`expr $b / 1024 / 1024 + 1` | wc -c
echo $b $a end
done
みたいにゃ感じ?
ddでいいの?って点は大いに不安であるが(笑)
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
opensolarisでディスクの表面検査だが、fdiskでパーティションを切ってるとメニューから選択できにゃい。
format c0t0d0p2
では通らにゃいし、
format -p 2 c0t0d0
でも
format -d /dev/rdsk/c0t0d0p2
でも無理にゃんだが
format /dev/rdsk/c0t0d0p2
にゃら通る。分かるかこんにゃもん!
しかもanalyzeメニューでsetupしにゃいとパーティション0の情報か何かが使われる。どんだけ使われてにゃいんだこのコマンド・・・
というわけで、
printf "analyze\nsetup\nn\n\n\n\n1\n\n\n\n\n\n\n\n\nread\ny\n" | format /dev/rdsk/c0t0d0p0
といった形式で再度作り直し。うーん、これは酷い(笑)
全ディスクはもうどっから取るべきか悩ましいので
iostat -en | sed -e 's/.* //' | grep [0-9] |
while read a ; do test -e /dev/rdsk/$a && echo $a ; done | sort | uniq
でにゃんとか。
てことで合わせると、
iostat -en | sed -e 's/.* //' | grep [0-9] |
while read a ; do test -e /dev/rdsk/$a && echo $a ; done | sort | uniq |
while read a ; do printf "analyze\nsetup\nn\n\n\n\n1\n\n\n\n\n\n\n\n\nread\ny\n" | format /dev/rdsk/$a ; done
これで一応全部舐めてくれるかにゃ?
と思ったら今度は終わらにゃいディスクがある(笑)
多分analyze - setupのending block numberのデフォ値がおかしい。存在しにゃい所まで読みに行って永遠に終わらにゃい。
確かに当初の目的は果たしたが、そういう問題じゃねぇ
パーティションの切り方が悪いんだろうけど、そういわれてもナー
cat /dev/rdsk/c0t0d0p2 >/dev/null
とかしたほうがマシか?
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
ESX用のOpenSolarisでZFSにゃnfs鯖で、
zfs set recordsize=4k pool1/share
みたいにゃ設定をすることで、たぶん理屈としては巨大にゃvmdkファイルにゃんかを4k単位で部分的に書き換えたりするようにゃ状況で高速化が期待できる・・・と思ったのだが、にゃんかそれ以前に他の部分がいろいろ遅くにゃった。
顕著にゃのがnfs経由で64kブロックで書き込んだりすると物理ディスクが100% busyににゃることもある。
本来の用途である所のesxからのvmdkファイルアクセスに関しては、確かにパターンは変わるのだがあまり速度差が出にゃいというか・・・どちらかというと遅くにゃってる。write時にreadが発生してもIO粒度がデカくにゃることや前後がキャッシュされることとかが有利に働いているのかもしれにゃい。
ということで検証がめんどくさくにゃったのでrecordsizeは放置することに。
▼ ZFS 関連記事
ESX用のOpenSolarisでZFSにゃnfs鯖で、
zfs create -o sharenfs=on pool1/share
zfs create pool1/share/vm1
zfs create pool1/share/vm2
といったzfs構造にして、vm毎にsnapshotを取ったり、、といったことを考えていたのだが、検証実験してみたらそれ以前の問題がいろいろ。
大きにゃ問題はnfs。nfs共有配下の異にゃるfsがマウントされたサブディレクトリにアクセスするには・・・基本的にもう1本nfsマウントするしかにゃいみたい。これを自動化するようにゃ仕組みがnfs v4にあったりとか、Linuxのnfs鯖か何かにこれをごまかすようにゃ仕組みがあったりとかするらしいのだが、nfs v3にゃESX用には縁がにゃい。
かにゃり詰んでる。
▼ ZFS 関連記事
Opensolarisにゃ鯖のswap領域って実メモリの半分とかにゃんだが、これってもっと大きい方がいい気がする・・・
というわけで増量。
zfs set volsize=4G rpool/swap
reboot
わ、おてがるぅ
ただし当然rpoolの容量が足りにゃければ無理。
zfs create -V 4G pool1/swap2
swap -a /dev/zvol/dsk/pool1/swap2
vi /etc/vfstab
とかする必要がある
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
OpensolarisでZFSにゃ鯖がdestroy snapshotすると瞬時に帰ってこにゃくにゃる。
所謂メモリ不足すにゃぁ、と思うのだが、諸般の事情でupgradeできにゃかったりとかいろいろ身動きが取れにゃい。
データ移動して全部やり直すしかにゃいか。うーむ
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
Pen4時代の安鯖にHDDx7とかつっこんで、メモリ512MBでOpensolarisというアレにゃ鯖がバックアップ用のnfsストレージににゃってたのだが、ローカルでファイルのハッシュ生成かけたらさっくり落ちた。
要因がいろいろありすぎるが、いいかげんハードの問題だと思われる。やはりストレージはある程度まともにゃPCで作るべきだにゃぁ
▼ ESX 関連記事
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
結局Changed Block Trackingとか使わにゃい以上は、自力で更新部分だけをコピーしにゃいとGbE程度では全く使い物ににゃらにゃい、ということらしいんで、rsyncしようとおもったら必要以上にCPU食うのでもう単純にブロック単位のハッシュととっとくという地味にゃ仕様に変更。
vmのバックアップ時に巨大vmdkの1MBブロックハッシュリストをNASローカルで作成。不一致部分だけ比較してコピーという形式で。
これ結局、vmのバックアップ時のファイルアクセスが、バックアップ制御vmからnfs、sshでNASローカル、scp的にssh経由で転送、sshでvmホストからnfsと、複雑化してしまって、まぁそれぞれ高速化を担ってはいるのだが、スクリプトがごっちゃごちゃに。
▼ ESX 関連記事
▼ ZFS 関連記事
さいきんのOpensolarisでZFSにゃnfs鯖の作業手順
1st HDDにinst。最小9Gだが20Gくらいとっとく。
GUIで適度にIPとか変更。
以下の順に必要にゃ物だけ実行
cat /etc/nsswitch.dns > /etc/nsswitch.conf
ntpdate pool.ntp.org
pfexec pkg install SUNWipkg
pfexec pkg image-update
init 6
echo | format
0. c8t0d0 <DEFAULT cyl 290 alt 2 hd 255 sec 252>
1. c8t1d0 <DEFAULT cyl 291 alt 2 hd 255 sec 252>
2. c9t0d0 <DEFAULT cyl 291 alt 2 hd 255 sec 252>
3. c9t1d0 <DEFAULT cyl 291 alt 2 hd 255 sec 252>
4. c10t0d0 <DEFAULT cyl 291 alt 2 hd 255 sec 252>
5. c10t1d0 <DEFAULT cyl 291 alt 2 hd 255 sec 252>
format c8t1d0 fdisk create SOLARIS2 10GB(シリンダで指定)
format c9t0d0 fdisk create SOLARIS2 10GB(シリンダで指定)
format c9t1d0 fdisk create SOLARIS2 10GB(シリンダで指定)
format c10t0d0 fdisk create SOLARIS2 10GB(シリンダで指定)
format c10t1d0 fdisk create SOLARIS2 10GB(シリンダで指定)
但しHDDによってセクタ/シリンダとか違ってくるので違うHDD間でミラーする時は注意
format -e c8t1d0 label SMI
format -e c9t0d0 label SMI
format -e c9t1d0 label SMI
format -e c10t0d0 label SMI
format -e c10t1d0 label SMI
prtvtoc /dev/rdsk/c8t0d0s2 | fmthard -s - /dev/rdsk/c8t1d0s2
prtvtoc /dev/rdsk/c8t0d0s2 | fmthard -s - /dev/rdsk/c9t0d0s2
prtvtoc /dev/rdsk/c8t0d0s2 | fmthard -s - /dev/rdsk/c9t1d0s2
prtvtoc /dev/rdsk/c8t0d0s2 | fmthard -s - /dev/rdsk/c10t0d0s2
prtvtoc /dev/rdsk/c8t0d0s2 | fmthard -s - /dev/rdsk/c10t1d0s2
zpool attach -f rpool c8t0d0s0 c8t1d0s0
zpool attach -f rpool c8t0d0s0 c9t0d0s0
zpool attach -f rpool c8t0d0s0 c9t1d0s0
zpool attach -f rpool c8t0d0s0 c10t0d0s0
zpool attach -f rpool c8t0d0s0 c10t1d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c8t1d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c9t0d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c9t1d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c10t0d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c10t1d0s0
zpool list
zpool status
format c8t0d0 fdisk create SOLARIS2 99%
format c8t1d0 fdisk create SOLARIS2 99%
format c9t0d0 fdisk create SOLARIS2 99%
format c9t1d0 fdisk create SOLARIS2 99%
format c10t0d0 fdisk create SOLARIS2 99%
format c10t1d0 fdisk create SOLARIS2 99%
zpool create pool1 raidz c8t0d0p2 c8t1d0p2 c9t0d0p2 c9t1d0p2 c10t0d0p2 c10t1d0p2
zfs create -o atime=off -o casesensitivity=mixed -o snapdir=visible -o aclinherit=passthrough pool1/share
zfs set compression=on pool1/share
zfs set recordsize=64k pool1/share
zfs set aclmode=passthrough pool1/share
zfs set sharenfs=on pool1/share
chmod 777 /pool1/share
vi hosts
share
echo set nfs:nfs_allow_preepoch_time = 1 >> /etc/system
echo set nfs:nfs3_max_threads = 32 >> /etc/system
echo set nfs:nfs3_nra = 32 >> /etc/system
echo set zfs:zfs_nocacheflush = 1 >> /etc/system
echo set zfs:zfs_txg_timeout = 5 >> /etc/system
echo set zfs:zil_disable = 1 >> /etc/system
crontab -e
0 4 * * * svcadm restart idmap
0 * * * * ntpdate pool.ntp.org
svcadm restart cron
pkg install SUNWsmbskr
pkg install SUNWsmbs
init 6
svcadm enable -r smb/server
vi resolv.conf
zfs set sharesmb=on pool1/share
zfs set sharesmb=name=share1 pool1/share
smbadm join -w WORKGROUP
echo other password required pam_smb_passwd.so.1 nowarn >> /etc/pam.conf
passwd 既存ユーザ(smbpasswd相当)
smbadm join -u domain_admin DOMAIN
svcadm disable smb/server
svcadm enable -r smb/server
chmod -R A=owner@:full_set:fd:allow /pool1/share
chmod -R A+group@:full_set:fd:allow /pool1/share
chmod -R A+everyone@:read_set:fd:allow /pool1/share
sharemgr show -vp
init 6
useradd -b /export/home/ -g staff -m -s /usr/bin/bash user1
vi /etc/auto_home
usermod -d /home/user1 user1
passwd user1
vi /etc/user_attr
vi /rpool/boot/grub/menu.lst
svcadm disable gdm
visudo
user1 ALL=(ALL) NOPASSWD: ALL
Defaults:user1 !env_reset
定期snapshotをcronに登録とか、mail送信用スクリプトを適当にゃ所にコピーとか、定期ディスク表面検査とか、ssh関連とかvisudoとか適時設定のこと。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
そんにゃわけでnas間でrsyncできるようにはにゃったのだが、やはりCPU負荷がものすごい。
そもそもvmホストじゃあるまいしNAS鯖にCPUにゃんて要らにゃいよね、とか思ってたらnfsのレスポンスとzfsの圧縮で地味に効いてきて、あげくにrsyncしようとおもったらcpuがボトルネックとかびっくりだねっっ
50MB/sくらい出てるしいいかとも思ったのだが、2コアCPUで100MB/s行かにゃいとか結局nfsで転送した方が速いって事に。
あとvmdkが巨大ににゃるとrsyncが急激に遅くにゃって10MB/s程度に落ち込むことがある。にゃんじゃこれ。
さらに、途中でCPUを食ったまま帰ってこにゃくにゃるとか、タイムアウトすることがある。どこをどうやったら不安定ににゃるんだこれ
と、せっかく作ったけどこれはダメっぽい。
rsyncが本来の性能?であればもうちょっと高速にゃはずにゃのだが、何かあるんだろうか。
scpにすればもう少し簡単で高速化するのだが、今度は差分書き込みされにゃい。
高々数百GのファイルをLAN内で差分バックアップするのに思ったより手間取ってるにゃぁ
▼ ESX 関連記事
▼ ZFS 関連記事
そんにゃわけでssh -A経由でrsync実行できるようにはにゃったのだが、sudoが挟まってると環境変数が引き継がれにゃいので公開鍵暗号が通らにゃい。
つまり
ssh -A host1 ssh host2 ls
は通るが、
ssh -A host1 sudo ssh host2 ls
は通らにゃい。
ssh -A host1 sudo var=$var ssh host2 ls
とすれば引き継げるはずにゃのだが、host1上での環境変数値で展開する方法がいまいち分からず。どういうエスケープすれば通るのかにゃぁこれ。.shにしてしまえばいいんだろうけど。
結局、visudoして環境変数を初期化しにゃいように変更。
ssh -A -o StrictHostKeyChecking=no host1 sudo rsync -e \'ssh -A -c arcfour,blowfish-cbc -o StrictHostKeyChecking=no\'-a --rsync-path=\'sudo rsync\' -v --inplace --stats --progress --human-readable --timeout=60 file user@host2:/tmp/
みたいにゃ書式で通るようににゃった。
sudoしてるのでniceかにゃにかつけたほうがいいかもやしれにゃい。
尚、visudoして変更しにゃくても、
ssh -A host1 sudo sh -c "env" \>/dev/null \; ssh -A host2 ls
でとりあえず延伸できるんで、途中の鯖でいろいろ追加しにゃいにゃらこっちで。
▼ ESX 関連記事
▼ ZFS 関連記事
そんにゃわけでssh経由でrsync実行できるようにはにゃったのだが、実はまだpassを手打ちしてたのでsshの認証を自動化したい。
keychainを使ってるので
ssh -A host1 ssh -A host2 ls
とかは通るみたい。にゃので
ssh -A host1 rsync -e ssh vm-flat.vmdk user@host2:/tmp/
はどうかというと、vm-flat.vmdkがnobody 600にゃので読めにゃい。
てことでsudoして
ssh -A host1 rsync -e ssh --rsync-path="sudo rsync" vm-flat.vmdk user@host2:/tmp/
すると今度は認証passを聞いてくる。これはsudoが環境変数を消しちゃうからで、ここいらの設定も必要にゃ模様。
うへぇ
▼ ESX 関連記事
▼ ZFS 関連記事
FreeNASをinstしたので種々設定。
鯖にNICが2つ付いてるのでLink Aggregationしてみる。
Network|Interface Management|Link Aggregation and Failoverにあるんでマウスでちょいと触るだけ。本来にゃらLACPを選ぶところだが、ハブの設定がめどい、ということでloadbaranceとroundrobinを試してみる。
が、何故か1つ目のifしか使ってくれにゃい!?と思ったら、LAG有効にしてからこれをifに追加してUPしてメインのifに変更する必要があるぽい。で、LAGにゃifにip割り振れば本来のifはipが外されて見えにゃくにゃる。
とりあえず簡便にroundrobinにしてnfsクライアントからreadしてみると、きっちり2等分されて送出されてる感じ。にゃんかethフレームの順序が崩れるよとか書いてあるが問題無さそう。まぁtcpだしにゃぁ。
loadbaranceにすると、ethフレームやらにゃんやらのハッシュでもってどちらかのifに割り振られるぽいので、運が良ければきっちり分かれるし、運が悪いと片側のifに集中する。まぁ当然やね。
そんにゃわけでroundrobinでしばらく使ってみるが、web上にさっぱり情報がにゃいあたりがにゃんだかにゃー
▼ ZFS 関連記事
▼ FreeNAS 関連記事
FreeNASをinstしたのだがnfsでzfsに書き込むと5〜10秒間隔で転送が急激に落ち込む。
例によってバッファにため込んでディスクへ書き出そうとして他の処理がとまってるようだ。もう少し頭の良いデフォルト設定ににゃらん物か。
で調べてみると
vfs.zfs.txg.synctime
vfs.zfs.txg.timeout
あたりが関係するらしい。・・・が再起動しにゃいと変更できにゃいだとか。めどい。
とりあえず/boot/loader.confに
vfs.zfs.txg.timeout="2"
とか書いてみたら極端にゃ脈動はにゃくにゃった。速いかと言われるとにゃんか遅いが。
もうちょっと値を詰めたら速くにゃるかもだがいちいち再起動ってのがめんどくさすぎ。
▼ ZFS 関連記事
▼ FreeNAS 関連記事
FreeNAS 0.7.2(5543)amd64でZFSのpool作ろうとしたら失敗する。
logによると
root: cannot create 'aaa': permission denied
ZFS: vdev failure, zpool=aaa type=vdev.open_failed
zpool create -m /mnt/aaa aaa /dev/aacdu0
だとかにゃんとか。
これはあれか、怪しげにゃレノボ鯖の胡散臭いadaptec RAIDカードが原因かっ
・・・でググると、
sysctl -w kern.geom.debugflags=17
で治るとか。・・・あ、治った。ってにゃんでデバッグレベル変えて挙動が変化するんだよ。怖ぇ。GEOMの保護機能だとか書いてあるがこれは如何にゃものか。
んでzpool触る度にこんにゃのやってられんので
echo kern.geom.debugflags=17 >> /etc/sysctl.conf
とかしてみたけどあってるかにゃ?
・・・ちがうか。System|Advanced|sysctl.confにあるからwebからすべきか。
うーん、どうにゃのこれ、使えるの? これでも安定版だよね?
▼ ZFS 関連記事
▼ FreeNAS 関連記事
FreeNASをinstしたので種々設定。流石に安定版だけあってGUIで極端におかしにゃ事は起きにゃい。
が、sysctl.confはいじれるが/boot/loader.confはいじれにゃいぽいので結局sshで入る。
とりあえずnfs鯖にゃので
vfs.zfs.cache_flush_disable="1"
を追加。
んー、今時これが必須にゃのかどうか分からにゃいけど何とにゃく。
▼ ZFS 関連記事
▼ FreeNAS 関連記事
そんにゃわけでssh経由でrsync実行できるようにはにゃったのだが、まずはパフォーマンスの計測を。
現状50MB/s以上出てるけど今度はrsyncとsshがCPUを食い尽くす(笑) そうかーそうきたかー。まぁ結構演算量多いししょうがにゃいか。
ちょっと頑張ってみる方向としてはsshや圧縮の方向もアリだね、ってことで、
rsync -e 'ssh -c arcfour128 -C -o "CompressionLevel 1"'
をしてみたら10MB/sくらいに落ち込んだ。これは酷い。
てことで
rsync -e 'ssh -c arcfour128' --compress --compress-level=1
で、圧縮率がよいと80MB/s、低いと15MB/sとまぁ微妙にゃ頭の打ちよう。CPUが足りにゃい。sparse度の高いファイルの初回転送時のみ圧縮したほうがいい、といったところ。圧縮がgzipにゃのとシングルプロセスにゃのでどうにもにゃらにゃい気味。初回のみに限ればtar|sshで送った方が効率的かも知れにゃいが面倒。ていうか初回にゃら--inplaceの代わりに--sparseでいいのか。
と、ここまでやって結果は50MB/sか。・・・nfsで100MB/s出るのに! 単体で使うのはバカらしいシステムににゃってしまった。しかしnfsでは同時に複数のコピーが走ると飽和するので、2本以上同時運用するのにゃらば断然rsyncが良いと言うことににゃる。
ま、まぁマシか?多少は。
▼ ESX 関連記事
▼ ZFS 関連記事
FreeNAS 0.7.2を試用してたのだが、普段USBメモリとかにいれててそれにゃりにこれは便利だったのだが、いろいろサービス増やしたり、ちょっとツールを入れようとするとすぐに容量がキツくにゃる。
ていうか再起動で戻っちゃう。めどい。
ということで珍しくfullでinstしてみた。自分自身にraid有効にできたはずにゃのだが調べるのめんどくさいのでH/W側でRAIDに。
pkg_add -rでさくさくいろんにゃ物をinstできて便利。
▼ ZFS 関連記事
▼ FreeNAS 関連記事
てことでバックアップの高速化をすべくnfs経由以外の方法を考えてみる。
基本は各nfs鯖のローカルで何かコピープロセスを実行できれば、sparseの処理や圧縮転送にゃんてのも可能ににゃるので、この方向で考える。
nfs鯖はsolarisのzfsで作ってたのだが、shareしただけだったので全部nobodyににゃってた。で、どうせ閉じたLANにゃのでそのくらいはいいんだが、600にゃんだよねこれ。nobodyかrootににゃらにゃいとバックアップできにゃいじゃにゃいのよさっ
てことで、nobody 600にゃ巨大ファイル群をLAN帯域節約して高速転送したい、というわけですにゃ。
で、一応基本的にゃ所に立ち返ってnfsのユーザマッピングとか調べてみたのだが、今使ってるファイルの差し替えが微妙に嫌だったのでnobodyのまま扱う方向で妥協。sshd.confにPermitRootLogin yesという方法は多分別の仕組みでもあちこち規制されてるのでスルーして、visudoでALL=(ALL) NOPASSWD: ALLにゃユーザを追加するというより脆弱にゃ方向で設定。まぁそもそもnfsdが無制限に受け付けてるくらいだし大差にゃいだろう。
と、ここまできてrsyncd建てた方が良いんじゃにゃいかとか思い出したわけだがまぁいい。
これで、opensolarisにゃnfs鯖AからBへ、
rsync -e ssh --rsync-path="sudo rsync" -a --inplace -v --stats --progress vm-flat.vmdk user@hostB:/tmp/
みたいにゃことをして、ownerが保持されるようににゃった。
▼ ESX 関連記事
▼ ZFS 関連記事
ESXのデータストアをsolarisのnfsで作ってたのだが、これをどうバックアップするか、という。
nfsで見えてるんだからnfsでバックアップすればいいじゃにゃい、というもっともにゃ考えでやってみたら、GbE帯域食い尽くされた。・・・ですよねー。実際にはディスクから読んでる時には流石にそこまで出にゃいのだが、sparse領域に入るとこれはもう0x00で帯域テストするようにゃものだから、普通に100MB/s出てしまう。
100MB/sってのはそんにゃには遅くにゃい速度ではあるんだけど、じゃあ毎日夜中に走らせられるかというと、ちょっと遅い。せめて4倍くらいは高速化されにゃいとしんどい。
状況に拍車をかけてるのが自作の差分コピー。file1とfile2を同時に読みこんで、差異があればその部分だけfile2に上書きする。何が嬉しいかというとfile2を置いてるディスクのwriteが最小ににゃるのでsnapshotへの影響が小さい。SSDにゃんかにも良い。が、つまりこれはreadが2倍ににゃるわけで、1GbEではコピー速度が50MB/s上限ににゃってしまう。これはかにゃり痛い。
と言うわけで何とかしようの巻。
▼ ESX 関連記事
▼ ZFS 関連記事
opensolarisを新規に入れる機会があったので、とりあえずpfexec pkg image-updateして5.11 snv_134bにしてzpool zfs upgradeしてzfs create -o dedup=onでいろいろファイルコピー。
ここまでは大変調子が良かった。
compressはoffだが、そんにゃに速度も低下しにゃいように見えるし、dedup率も1.5〜2程度ににゃった。
が
deleteが致命的に遅い。
ファイル削除するのに数時間かかっててこりゃダメだと放置してたらハング。
これは酷いってことでzfs destroyかけたらこれまた数時間しても終わらにゃい。zpoolを消すべきだった。
rreadが大量に出て遅くにゃってるようにゃので、SSDにゃらある程度瞬時に消せるのかもしれにゃい。
ということでよほどものすごい削減効果があるとかじゃにゃい限り、特にvmdkにゃどの巨大ファイルをdedupにゃzfsに置くと、かにゃり死ねる結果が待ってる気がする。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
OpensolarisにゃZFS鯖。
NAME STATE READ WRITE CKSUM
pool1 ONLINE 0 0 0
mirror ONLINE 0 0 0
c7t3d0 ONLINE 1 0 0
c7t4d0 ONLINE 0 0 0
みたいにゃのが出てたけど放置してたら、今度はハングした(笑)
うーむ、そこは止まらにゃいで欲しいのだが。
んでリセットかけたら、
NAME STATE READ WRITE CKSUM
pool1 DEGRADED 0 0 0
mirror DEGRADED 0 0 0
c7t3d0 DEGRADED 0 0 97 too many errors
c7t4d0 ONLINE 0 0 0
みたいにゃことに。
そりゃまぁtoo manyだわにゃ。しかもcksumってどういう・・・。ZFSじゃにゃかったら酷いことににゃっていたのか、それとも・・・
それにしてもこの鯖、一応高価にゃRAIDカードが載ってて、RAIDカードでミラーしたらディスクエラーでハングしたので、ZFSでミラーしたらそれでも止まったわけだが、いったいどうしろと・・・
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
NexentaStor CommunityEdition 3.04のvmで、相変わらず糞重い上にbuggyにゃGUIで設定してそれにゃりに動作、したように見えたのだが。
dedup=onにゃpoolにファイルを書いてるとさっくり無応答ににゃる。
にゃんかもうまたかよこんにゃもん出すにゃよ状態でぐったりしたのだが、一応気を取り直してvmstatとか眺めてたら、swapが食い尽くされてる(笑)
どうもdedupで必要にゃメモリと、インストーラーがデフォで確保するswap領域が釣り合ってにゃいみたい。zvol作ってswap -aで50gほどswap追加したら重たくにゃりつつも動作するようににゃった。
が、/etc/fstabに書いてもどうも反映されにゃい。マウントするタイミングとかいろいろあるんだろうか。面倒である。再instとどっちが楽か悩ましい。
あとvmNIC変えたりvmホスト変えたりするとNexentaレジストしろ言われるのがまたうざい。どうもこう、ライトユーザの排除しっぷりが散見されるにゃぁ。
▼ ZFS 関連記事
NexentaStorの3.00のvmが酷かったので、3.04あたりのISOをDLしてきてvmを作る。あとでapt-get install vmware-toolsしておけばほぼ同じだろう、みたいにゃ。
GUIはほぼ変わらずで、UIとして間違ってるだろうっていう上部のバー表示だのもそのまま。動作がかったるいのもそのまま。うーむ
あまりつっこんだ設定してもGUIがこけるのも変わってにゃいし、コア部分だけupgradeされた感じやね。
▼ ZFS 関連記事
Opensolarisの安定版使っててそれにゃりに安定動作してるのだが、ふと思い出してupgradeかけてみたら、大量にDLされてどうやらdedupとか使える版にまで昇格するぽい。
で、つい勢いでそこいらの鯖にupgradeかけちゃったのだが、zpool upgradeすると凍る鯖がある(笑) 怖いわっ! まぁgrubでsnapshot選べるのでWinみたく深刻ではにゃいが。
あとupgradeしようとしたら容量不足ってのが時々あるにゃ。思ったより/の容量は多めに確保しとかにゃいとダメということらしい。
ま、動いてるものは触らにゃいの原則で運用すべきですにゃ。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
Opensolarisのβにゃvmでdedup=onにゃZFSにファイルコピーしてバックアップ鯖にしてたんだが、大量ファイルコピーすると凍るようににゃった。いまいち原因不明。多分バグ。
該当pool捨てたら一応動いてるけど以前から感じ悪いのでnexentaやfreenasに浮気する予定。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
NexentaStorの3.00のvmをDLしてきた動かしたら、upgradeで大量にDLしたあげく、/の容量不足で進まにゃくにゃって、がんばって容量開けたらvmware-toolsのinstでこけて、これまたがんばって入れ直して、upgrade完了したと思ったら、zfsがtoo many erros吐いててscrubしても治らにゃくて、zpool upgradeで治るかと思ったらgrubが未対応でboot失敗するというものすごい体験をしていい加減投げたくにゃった。
ていうか投げた。
▼ ZFS 関連記事
にゃんかcronに
0,15,30,45 * * * * zpool status -x|grep 'all pools are healthy' || zpool status -v | perl /root/mailsend.pl
しといたら、ガンガンメールがとどいて、
pool: pool1
state: ONLINE
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://www.sun.com/msg/ZFS-8000-9P
scrub: resilver completed after 5h46m with 0 errors on Wed Oct 13 15:19:49 2010
config:
NAME STATE READ WRITE CKSUM
pool1 ONLINE 0 0 0
mirror ONLINE 0 0 0
c7t1d0 ONLINE 0 0 0
c7t2d0 ONLINE 0 0 0 560G resilvered
mirror ONLINE 0 0 0
c7t3d0 ONLINE 1 0 0
c7t4d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c7t5d0 ONLINE 0 0 0
c7t6d0 ONLINE 0 0 0
とかいわれたので、無視して zpool clear pool1 した。
まぁ大丈夫だろう、たぶん、きっと。
▼ ZFS 関連記事
にゃんかデータストアのレスポンスが悪い。
zpool statusしたら
pool: pool1
state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
repaired.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
pool1 DEGRADED 0 0 0
mirror DEGRADED 0 0 0
c7t1d0 ONLINE 0 0 0
c7t2d0 FAULTED 3 15 0 too many errors
mirror ONLINE 0 0 0
c7t3d0 ONLINE 0 0 0
c7t4d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c7t5d0 ONLINE 0 0 0
c7t6d0 ONLINE 0 0 0
errors: No known data errors
とかいわれた
やっぱりメールとかでアラート飛ばすようにしとかにゃいと怖いにゃ
disk入れ替えて
zpool detach pool1 c7t2d0
zpool attach pool1 c7t1d0 c7t2d0
して完了
▼ ZFS 関連記事
NASっぽい鯖の定期jobと言えばディスクの表面検査だが、opensolarisでZFSにしてると、scrubはあれどscanは無いという・・・わけで手動でやるしかにゃいみたい。
とりあえず
printf "analyze\nread\ny\n" | format -d c8t1d0
みたいにゃので動くようにゃので、全ディスクを
echo | format | sed -e 's/^ *//g' |grep "^[0-9]" | sed -e 's/^[0-9]*\. //g' -e 's/ .*//g'
で取得して、
echo | format | sed -e 's/^ *//g' |grep "^[0-9]" | sed -e 's/^[0-9]*\. //g' -e 's/ .*//g' | while read a ; do printf "analyze\nread\ny\n" | format -d $a ; done
でとりあえず動いてるが、このままcronにつっこむかどうかはちょっと考えるにゃぁこれ
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
OpenSolarisでRAID1を作ってみる。
install
GUIで適度にIPとか変更。
cat /etc/nsswitch.dns > /etc/nsswitch.conf
ntpdate pool.ntp.org
pfexec pkg install SUNWipkg
pfexec pkg image-update
init 6
format fdisk c8t0d0 create partition 2
prtvtoc /dev/rdsk/c8t0d0s0 | fmthard -s - /dev/rdsk/c8t1d0s0
zpool attach -f rpool c8t0d0s0 c8t1d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c8t0d0s0
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c8t1d0s0
zpool list
zpool status
format fdisk c8t0d0 create patition 2
format fdisk c8t1d0 create patition 2
zpool create pool1 c8t0d0p2 c8t1d0p2 c9t0d0 c9t1d0 c10t0d0 c10t1d0
zfs create -o atime=off -o casesensitivity=mixed -o snapdir=visible -o aclmode=passthrough -o aclinherit=passthrough pool1/share
zfs set sharenfs=on pool1/share
echo set nfs:nfs_allow_preepoch_time = 1 >> /etc/system
echo set nfs:nfs3_max_threads = 32 >> /etc/system
echo set nfs:nfs3_nra = 32 >> /etc/system
echo set zfs:zfs_nocacheflush = 1 >> /etc/system
echo set zfs:zil_disable = 1 >> /etc/system
crontab -e
0 4 * * * svcadm restart idmap
0 * * * * ntpdate pool.ntp.org
svcadm restart cron
pkg install SUNWsmbskr
pkg install SUNWsmbs
init 6
svcadm enable -r smb/server
zfs set sharesmb=on pool1/share
zfs set sharesmb=name=share1 pool1/share
smbadm join -w WORKGROUP
echo other password required pam_smb_passwd.so.1 nowarn >> /etc/pam.conf
passwd 既存ユーザ(smbpasswd相当)
vi resolv.conf
share
chmod 777 /pool1/share
sharemgr show -vp
vi resolv.conf
reboot
若しくは
smbadm join -u domain_admin DOMAIN
svcadm disable smb/server
svcadm enable -r smb/server
chmod -R A=owner@:full_set:fd:allow /pool1/share
chmod -R A+group@:full_set:fd:allow /pool1/share
chmod -R A+everyone@:read_set:fd:allow /pool1/share
ただしあちこちbuggyというか、やっぱダメだこのOS
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
Blastwaveのhowtoを読んで
pkgadd -d http://download.blastwave.org/csw/pkgutil_i386.pkg
とかしといて、
svcadm disable smb/server
svcadm disable samba
/opt/csw/bin/pkgutil -U
/opt/csw/bin/pkgutil -a | grep samba
/opt/csw/bin/pkgutil -i samba
/opt/csw/bin/smbd -b
/etc/opt/csw/samba/smb.conf
/opt/csw/bin/smbpasswd -a hoge
a=(cswnmbd default cswwinbindd cswsmbd);for i in ${a[@]}; do svcadm restart cswsamba:$i; done
あたりでにゃんとか。これで良いのかどうか不安だが。
ひとまず、readonlyのファイルがrename出来にゃいバグは治ってたが、タイムスタンプの問題は変わってにゃいにゃあ
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
zfsのCIFS共有からsambaに切り替えたものの、あちこち動作がおかしい。
1つはタイムスタンプの扱い。
unix系はcreate timeが無い、とかはまぁいい。NTFS側のWrite timeがsamba@zfsの全timestampに反映されるにゃらそれもいいだろう。
が、にゃぜかCreate timeを読み出すとms以下が0ににゃってやがる。しかもWrite time他はちゃんと読めているにもかかわらずだ。当然ZFS側には正常に反映されている。
/usr/gnu/bin/ls --full-time
すれば分かる。
が、samba経由で読み出すと0ににゃる。つまりWinからsolarisに日付の新しいファイルのみ更新コピーすると、毎回コピーされるわけで、もうアホかと。
さらに、ファイルをreadonlyにすると、何故かrename出来にゃくにゃる。どう見てもsambaのバグにしか見えにゃい。
# smbd -V
Version 3.0.34
らしいが、バグfixにゃpatchはupdateされてにゃいということかこれ。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
opensolarisのZFSにゃCIFS共有がどうも怪しいので、sambaに切り替えてみる。
svcadm disable -s smb/server
zfs set sharesmb=off pool1/share
pkg install SUNWiconv-extra
pkg install SUNWiconv-unicode
pkg install SUNWsmba
cd /etc/sfw/
cp smb.conf-example smb.conf
chmod 644 smb.conf
vi smb.conf
unix charset = UTF-8
dos charset = CP932
display charset = UTF-8
ea support = yes
store dos attributes = yes
fake oplocks = yes
workgroup = WORKGROUP
smbpasswd -a hoge
svcadm restart samba
他にもありがちにゃsambaのパラメータは設定した方が良いみたい。aclとかattribの関係で既存ファイルとの兼ね合いがあるはず。というかCIFS側で書き込んだファイルのreadonlyとかがsamba側のea supportで反映されてにゃい。FS上では別のxattrで書き込んでるとかにゃんだろうか。面倒にゃことを・・・
まぁとりあえずCIFSの怪しい挙動は無くにゃった。
尚、
fake oplocks = yes
は、ディレクトリのファイル数が増加した場合に悲惨に遅くにゃるのでとりあえず放り込んだがあまりよろしくにゃいわにゃ。sambaってどうしてこう・・・
あと、タイムスタンプの扱いがどうも怪しい。ctime mtime atimeがそのまま反映されてにゃかったり、ms以下が0ににゃってたり・・・にゃんだかにゃぁこれ。Winから日付新しい物だけcopyってすると、毎回コピーされるファイルとかが出てきて異常にゃ動作。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
opensolarisのZFSにゃCIFS共有はどうも怪しい。
2バイト文字というかUtf8?にゃファイル名が並んでるディレクトリで、dirすると1ファイル抜けて表示される。コンソールだと存在しているし、ファイル名を短くしたり、ファイル数を変えると復帰するか、別のファイルが見えにゃくにゃる(笑)
必ず特定のファイル名が消えるとかにゃらともかく、
md tmp
するだけでファイルが復帰するとか、別のファイル名が消えるとか、どんにゃ怪しげにゃことににゃってるのか想像が付かにゃい。
zfsでshareするだけで便利!と言いたい所だがこりゃマズいねぇ
一応CIFS関連ということで、normalizationやutf8only、casesensitivityも触ってみたけど、関係にゃさげ。まぁそりゃそうか。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
OpenSolarisのidmapdがメモリリークしてる。
とりあえず、crontab -eして
svcadm restart idmap
とかを放り込んでおいたが・・・って
過去にもあったにゃ。
▼ ESX 関連記事
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
dedup onで作ったopensolaris snv_111bのzfsにゃNASだが、snapshotをとるのは一瞬にゃんだが、
zfs destroy snapshot
すると、共有類がタイムアウトする程度に長時間無応答ににゃる。
ただzpoolが別にゃせいだろうが、top類のコマンドは効くので、様子を見てみると、1M未満の弱いreadが延々続いている。メモリはある程度食ってるが多少余ってる。systemが2〜5割食ってる。とまぁよく分からん状態。
snapshotが巨大にゃ場合に時間がかかる。放置しておくとちゃんと安定して復帰する。
どうも既出のバグっぽいんだがまぁβ版放り込んでる以上致し方にゃいか。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
RD120にopensolarisを入れて、zfsでほえほえして、ESXからnfsで参照・・・したらにゃんだかおかしい。writeが2MB/sしか出てにゃい。
嘘だ!! とばかりにあちこち探しまくって、あれこれ試して、結局
echo set zfs:zfs_nocacheflush = 1 >> /etc/system
を書き損じてただけという衝撃の時間の無駄であったのだが、これはこれでローカルやCIFSは速くてもnfsだけはBBU付きRAID上にあってすら悲惨にflushの影響を受けるということが分かったのでよしとする。
が、writeが改善されたら今度はwrite中にreadが返ってこにゃい。これはlsしても3秒待たされるってんだから、ディスクである。大変分かりやすくてよろしい。つまり、ServeRAID 8kのRAID6はWriteが溜まってるとReadが返ってこにゃいと思われる。ま、ドライバ次第という可能性も大だが。
ということでバラしてzfsから制御するか何かやってみるしか無さそう。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
lenovoのRD120にopensolarisをinstしたら、HDDから起動後、grubを経てconsole login:が出た後、画面がOFFににゃる。
どうせXかにゃにかグラフィカルログインにゃあたりでこけてるんだろう、とコンソールログインすべく、grub直後にキー連打すると、今度はプログレスバーが化けて出て、その後しばらくして画面がOFFる。
にゃんだかわからにゃいがつまりログインプロンプトが出たあたりで表示にトラブってるとしか思えにゃい。
で、古いのや新しいのやあちこち試して、DHCPのリリースIPからsshで繋ぐと一応動いてることまでは確認。pfexec pkg image-updateしてrebootかけたらちゃんとグラフィックでログイン画面が出た。うーん??
とにゃると、あぁにゃにかバグだったんですねという解釈ににゃるが、にゃんかこう腑に落ちにゃいものがあったので、じっくりゆっくりInstしてみたら、インストーラーのgrub起動時にVESAモードがあるのを発見。っていうかPOSTが長すぎてこのgrubメニューを拝んだことがにゃかったのが原因か。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
いろいろリベンジ気味にOpenSolarisでdedupの効くNASを組んでみる。但しめどいのでVMで。
これまでいくつか試してきたが、些細にゃミスで不安定ににゃったりとか切り分けが難しかったので、原点に戻ってvm上で単純にゃ構成で実験。
OpenSolaris 2009.06をISOからinst。
pfexec pkg image-update
pkg set-publisher -P -O http://pkg.opensolaris.org/dev/ opensolaris.org
pfexec pkg image-update
zpool upgrade
zfs upgrade
非RAIDにゃzpool作成
zfs create -o atime=off -o casesensitivity=mixed -o compression=on -o snapdir=visible -o aclmode=passthrough -o aclinherit=passthrough
zfs set dedup=on
zfs set sharesmb=on
zfs set sharenfs=on
echo set zfs:zfs_nocacheflush = 1 >> /etc/system
この状態で50gほどのvmイメージ類をsmbで順次書き込み。
vmdkの容量が50gほどで、内部ファイル数が2tほどに。おお、これはべんりである。
尚、どういうアルゴリズムにゃのかわからんが、自動的に共通ブロックを探してくれるらしいんだが、.vmdk類を放り込むといまいちdedup効果が薄い。たぶん.vmdkがthin的に内部で詰めちゃってるんで、共通した連続領域が少にゃいんじゃにゃいかにゃーとか推測。全然確かめてにゃいけど。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
ほかのSolaris系はまだuptimeが浅くて分からにゃいんだけど、少にゃくともNexentaStorで30日ほどzfs+nfs+smbで動かしてたPCがswapし始めて、確認してみたらidmapdが2G近くメモリ食ってた。
とりあえず、crontab -eして
ps -o fname,vsz -p `pgrep idmapd`
svcadm restart idmap
sleep 30
ps -o fname,vsz -p `pgrep idmapd`
相当を放り込んどいたけど1日毎に走らせたりするとps意味にゃいかも。
ほかのNexentaCoreやOpenSolarisも怖いので後日確認が必要だねぇ。
尚、uptime 40日のLinuxにゃnfs+samba鯖はとってもクリーンにゃメモリ状況であった。う〜ん、nfsも速い目だしいろいろ便利だし、snapshotがクズでにゃければやっぱりこの程度の用途にはLinuxが最強にゃんだがにゃぁ。
/homeにしてもzfs+SSDキャッシュとかすると確かに最強気味にゃんだが、reiserfsでごまかせる程度の用途にゃら断然Linuxが速い。というかNTFS+DFSR的にreiserfs+rsync大量発行の方が枯れてて良いようにゃ気はするんだよね。
▼ ESX 関連記事
▼ ZFS 関連記事
OpenSolarisでCIFS鯖
HDDその1に10Gほどのパーテーション作ってOS入れて、ミラーにしようと思ったけど忘れてたので放置。
GUIで適度にIPとか変更。
cat /etc/nsswitch.dns > /etc/nsswitch.conf
pfexec pkg install SUNWipkg
pfexec pkg image-update
init 6
format
HDDその1に2ndパーティション作る。
zpool create -f pool1 c8t0d0p2 c8t1d0 c8t2d0 c8t3d0 c8t4d0 c8t5d0
容量違うけど無視
zpool list
zpool status
zfs create -o atime=off -o casesensitivity=mixed -o compression=on -o snapdir=visible -o aclmode=passthrough -o aclinherit=passthrough pool1/share
zfs set sharenfs=on pool1/share
vi resolv.conf
share
chmod 777 /pool1/share
pkg install SUNWsmbskr
pkg install SUNWsmbs
svcadm enable -r smb/server
zfs set sharesmb=on pool1/share
zfs set sharesmb=name=share pool1/share
echo set nfs:nfs_allow_preepoch_time = 1 >> /etc/system
echo set nfs:nfs3_max_threads = 32 >> /etc/system
echo set nfs:nfs3_nra = 32 >> /etc/system
echo set zfs:zil_disable = 1 >> /etc/system
echo set zfs:zfs_nocacheflush = 1 >> /etc/system
sharemgr show -vp
ntpdate pool.ntp.org
vi resolv.conf
reboot
smbadm join -w WORKGROUP
echo other password required pam_smb_passwd.so.1 nowarn >> /etc/pam.conf
passwd 既存ユーザ(smbpasswd相当)
若しくは
smbadm join -u domain_admin DOMAIN
svcadm disable smb/server
svcadm enable -r smb/server
chmod -R A=owner@:full_set:fd:allow /pool1/share
chmod -R A+group@:full_set:fd:allow /pool1/share
chmod -R A+everyone@:read_set:fd:allow /pool1/share
とまぁこんにゃ感じでやってみたんだけど、あまりに勝手が違ってよく分からにゃい。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
そもそもnfsに関してさっぱりにゃんだが、ESX用にOpenSolarisでnfs鯖を建てようと思ったらハマった(笑)
結局、esx鯖のIPの逆引きが出来にゃいとnfsマウントが通らにゃいぽい。
ので、/etc/hostsに
ESX鯖のIP hoge
とか書いておけばOKだが、もちろんこのIPはvmkernelのものである。
が、めどいのでにゃんか方法があるはず。というのも、nexentaやfreenasやlinuxでは不要だったので、OpenSolarisのセキュリティ的にゃ設定か何かじゃにゃいかと思うんだが、これがまたさっぱり感覚が分からにゃいので、まあいいかで放置。
というかそもそも内部にDNS立てろという話ではある。
▼ ESX 関連記事
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
OpenSolarisとか入れてみるリベンジ。
ipの変更はGUIから出来るが、dnsが変わらにゃいので、
cat /etc/nsswitch.dns > /etc/nsswitch.conf
とかする必要が。resolv.confとhostname.*とnsswitch.confあたりがとりあえず必要っと。
あと更新は
pfexec pkg install SUNWipkg
pfexec pkg image-update
でOK
結構reboot要求される。
あと、最新βを追いかけるにゃら
pkg set-publisher -P -O http://pkg.opensolaris.org/dev/ opensolaris.org
とかしてからimage-update
その後、zpool upgrade; zfs upgradeしとくこと。
▼ ZFS 関連記事
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
▼ FreeNAS 関連記事
FreeNASでZFSを使う時のメモリ関連。
ちょっとVerによっていろいろ有るようで困るんだが、mem512のマシンで0.7stable、カーネルチューニング無しでzfs raidzでsnapshot作ってたら、
panic: kmem_malloc: kmem_map too small
で落ちる。
よっく観察すると、boot時にZFSをマウントした直後からごりごりdiskアクセスして、topで見てるとwiredがどんどん増えて落ちる。
HDDを全部外して /cf/boot/loader.confを編集して、
vm.kmem_size="500M"
vm.kmem_size_max="500M"
にしたが変わらず。メモリを6Gほど積んで、
vm.kmem_size="4000M"
vm.kmem_size_max="4000M"
にすると、wiredがどんどん増えて1Gあたりで落ちる。
vfs.zfs.arc_max="100M"
とか
vfs.zfs.arc_max="2000M"
とかにしたが変化無し。
で、0.7RC2 Khasadar (revision 4910)をCDROMから起動して、zfsをimportしたら、Wiredが900までいって、次に1900まで増えて、その後1800くらいに落ち着いた。その後も問題にゃく動作。
データ吸い上げて廃棄の予定。
FreeNASのZFS実装が怪しげ過ぎるのが1点。これはまぁnexentaとかも怪しいちゃ怪しいが。
でからrevisionがおかしいのが1点。にゃぜ数字が減るか。
とまぁやっぱ危にゃげだわ
▼ ZFS 関連記事
▼ FreeNAS 関連記事
nexentaで
smbadm join -u ユーザ名 ドメイン名
でドメイン参加しようとしたら失敗するのでさんざ試したのだが、同じホスト名の残骸がドメインに残ってたせいだった。がっかり。
▼ ZFS 関連記事
pfsenseをvmで使おうと思って、vmware toolsの入れ方を探したら、GUIのパッケージのところにあった。openの方だけど。これは便利。
但しNICはvmxnetじゃにゃくてe1000じゃにゃいとダメぽい。
▼ ESX 関連記事
▼ ZFS 関連記事
▼ vmware 関連記事
nexentaのInst先がもったいにゃい系でちょっと調べたらZFSでにゃんとかにゃるぽい。
zfs create -V 450G syspool/vol1
ls -la /dev/zvol/dsk/syspool/vol1
format
zpool create pool1 c1t1d0 c2t0d0 c2t1d0 c3t0d0 c3t1d0 /dev/zvol/dsk/syspool/vol1
こんにゃ感じでpoolの一部を別のpoolの構成デバイスに組み込めるので、非常に柔軟にゃ構成が可能。
但しnexentaの最新αでやってたら後でハングしたので、やるにゃらSolarisで。
▼ ZFS 関連記事
NexentaCore3でdedupが実装されたぽいのでやってみる。
zfs set dedup=on pool
とか
zfs set dedup=on pool/share
とか。
これって8KB単位で効いてるのかにゃ? 結構しっかりdedupされて小さくにゃる。
▼ ZFS 関連記事
cronぽいもので定期実行する用のzfsでsnapshotとるよshメモ。一応残りが指定容量未満だとsnapshot消してみる。が、そもそもzfsでぎりぎりまでファイルつっこんじゃダメ。
nexenta用に手直しせざるを得にゃかったのでメモ。う〜〜〜ん
#!/bin/sh
poolname=pool/share
dir=/pool/share
reserve_GB=500
list_snapshots (){
zfs list -t snapshot -o name -s creation | grep ${poolname}@
}
list_snapshots
snap_name=${poolname}@`date +"%Y%m%d%H%M%S"`
echo create snapshot $snap_name
zfs snapshot "$snap_name"
while : ; do
free_GB=`/usr/gnu/bin/df ${dir} | awk 'NR!=1 {print $4}'`
free_GB=`expr $free_GB / 1024 / 1024`
echo $poolname $free_GB GB free.
test "$free_GB" -ge "$reserve_GB" && break
list_snapshots>/dev/null || break
oldest_snap=`list_snapshots | head -1`
echo destroy $oldest_snap
zfs destroy "$oldest_snap"
sleep 1
done
dfが非常にアレにゃんだが何とかにゃらんのかこれ。
zfs listで単位無しで残容量出したいんだが無いんかねオプション。まぁ分岐すりゃ良い話だが。
▼ ZFS 関連記事
NexentaCore3でapt-get dist-upgradeしようとしたら失敗したので、apt-clone dist-upgradeしたらチェックポイントまで作ってすごい至れり尽くせりにゃ感じでupgradeとrebootが完了。
みょんにゃところでrebootが必要ってのがアレだが、zfsにゃ部分とか確かにそうしてくれた方が嬉しいかもしれにゃい。
▼ ZFS 関連記事
NexentaCoreでコマンドラインからSMB共有しようと思ったらsambaじゃにゃいので全然分からにゃかったメモ。
/etc/pam.conf
に追記
other password required pam_smb_passwd.so.1 nowarn
/etc/resolv.conf
domain ドメイン名
search ドメイン名
nameserver DCのIP
svcadm enable -r smb/server
smbadm join -u ユーザ名 ドメイン名
zfs set sharesmb=on pool/share
こんにゃ感じでとりあえずは。
▼ ZFS 関連記事
Storが4TBの制限やライセンスがうざかったので、結局Coreの方を。
Stableが2.0で、3.0がAlphaつーのは悩ましいが、ここはStableで。
でまぁ普通にInstして・・・あぁZFSは手動でやらんと選択したディスク全部でミラーとかいう豪勢にゃことに。
ネットがつにゃがらねぇとかハマったが普通に入力ミスしてたので/etc/hostname.*あたりを書き換えてOK。このあたりちっともdebianじゃにゃいので困る。
apt-get install unzip mc あたりはやっとくとして、sshとかのサービスだが、svcadm restart sshとかそんにゃ感じので。でもapacheは/etc/init.d/apache2だったりとか。
apt-get dist-upgradeとかは通ってくれにゃいと困るのだがこけるので、
deb http://apt.nexenta.org hardy-unstable main contrib non-free
deb-src http://apt.nexenta.org hardy-unstable main contrib non-free
を
deb http://apt.nexenta.org elatte-stable main contrib non-free
deb-src http://apt.nexenta.org elatte-stable main contrib non-free
に変えて事にゃきを・・・っていいのかにゃぁ。でもstableのリリースDLったらapt先がhardy-unstableってのはどうにゃんだろうこれ。むしろ3.0使った方が良いんじゃ無かろうかとか。
それはともかくzfsでnfs共有つくってみる。
zfs create -o atime=off -o casesensitivity=mixed -o compression=on -o snapdir=visible -o aclmode=passthrough -o aclinherit=passthrough syspool/test
zfs set sharenfs=on syspool/test
zfs get sharenfs syspool/test
share
chmod 2774 syspool/test
/usr/sun/bin/chmod -R A=owner@:full_set:fd:allow syspool/test
/usr/sun/bin/chmod -R A+group@:full_set:fd:allow syspool/test
/usr/sun/bin/chmod -R A+everyone@:read_set:fd:allow syspool/test
/usr/sun/bin/ls -V syspool/test
echo set nfs:nfs_allow_preepoch_time = 1 >> /etc/system
echo set nfs:nfs3_max_threads = 32 >> /etc/system
echo set nfs:nfs3_nra = 32 >> /etc/system
echo set zfs:zil_disable = 1 >> /etc/system
echo set zfs:zfs_nocacheflush = 1 >> /etc/system
reboot
uft8onlyとかACLとかはいまいち理解してにゃいが。
とまぁ非常に簡単。しかしこれは、ほぼzfsで閉じちゃってるので、nexentaじゃにゃくてもsolarisでいいんじゃにゃいかって話にはにゃるにゃ、確かに。つまりEONか。
▼ ZFS 関連記事
試したいことがあって再度。
StorのDeveloperEditionのISOを落としてきてsolarisとしてvmにinst。いやvm版でも良かったんだけど。
ライセンスはめどい。MACが変わるだけで再発行ににゃる。Inst後にゃらSSHでコピペとかでいいんだがにゃんとかにゃらんのかねぇ。1度雛形vmが出来てしまえばそれを使い回せるけども。
で、vmware-toolsだが、
cd /cdrom/vmwaretools
cp vmware-solaris-tools.tar.gz /tmp
cd /tmp
tar xzvf vmware-solaris-tools.tar.gz
cd vmware-tools-distrib
su
./vmware-install.pl
ですんにゃりと。
さて、NEXENTAでAD連係ってどうにゃるのかにゃーという実験を。
LDAP連係はどうもUNIX向けらしく、AD連係はCIFS使えとか書いてあるので、Join ADして共有したらさっくり通った。
ただACLがよく分からず。こっちはUnixのローカルユーザかLDAPユーザが無いとダメとか書いてあって、じゃあACLどうするねんという。で、初期ディレクトリのACLは最悪chmodするとして、Winからファイルとか書いてACLをCIFS経由で設定することは出来るので、NEXENTAのGUIを使わにゃいにゃらこれはこのままでも使えにゃいことはにゃい。GUIというかNEXENTA側でちゃんと管理したい場合にはローカルユーザを生成してIdentity Mappingでwinname:*@domain.local == unixuser:*としておくと、とりあえずマッピングされる。ただこれは流石にLDAPか何か経由でインポートしにゃいと大変にゃので、何か仕組みがあるんだろうにゃぁ的にゃ。
▼ ESX 関連記事
▼ ZFS 関連記事
▼ vmware 関連記事
手軽に使えるNASでZFSちっくに圧縮とかスナップショットが使えるまともにゃものはにゃいかにゃーとか探したら、nexentaというものが。
ちゃんとGUIである程度制御できるし、ZFSがほぼフル機能つかえるし、大変よさげ。
ただし無料版は4Tまでしか使えにゃい。100%詰め込むとして1TBx5のRAID-ZまでOKということににゃるが、大変微妙にゃ制限である。NexentaCore PlatformにしとけばdebianチックでZFS使えるという有る意味最強の環境ににゃるのだが、どっちかというと欲しいのは簡便に使えるGUIとかNAS向けの各種機能集積された状態であるわけで・・・
ほかにはEmbedded Operating system/Networking (EON)ってのがあるようにゃんだが、標準でGUIがめんどくさげだったのでパス。にゃお、本家OpenSolarisは大変使いにくいというか、一歩踏み間違えると荒野が拡がってる感じで無理。
▼ ZFS 関連記事
FreeNASがZFS対応ににゃったとはいえ、かにゃり微妙というかとりあえずぎりぎり動くようににゃりました状態にゃので、肝心のZFSの各種機能が使いづらい。CUIでやるにゃらFreeNAS使う意味がにゃい。が、無いものはしょうがにゃい。
ということで例によってsshで繋げてスクリプトを書く作業が。
#!/bin/sh
poolname=pool1/dataset1
reserve_GB=500
snap_name=${poolname}@`date +"%Y%m%d%H%M%S"`
echo create snapshot $snap_name
zfs snapshot "$snap_name"
while : ; do
free_GB=`df -g ${poolname} | awk 'NR!=1 {print $4}'`
test "$free_GB" -ge "$reserve_GB" && break
zfs list -t snapshot -o name | grep @ >/dev/null || break
oldest_snap=`zfs list -t snapshot -o name -S creation | tail -1`
echo destroy $oldest_snap
zfs destroy "$oldest_snap"
sleep 1
done
日付名でsnapshot作って、空き容量が減ってきたら消す感じのサンプル。
これを毎時間とかcronで走らせればにゃんかそれっぽく動く。
snapshotはcd .zfsすると存在しているので、
ln -s .zfs snapshot
とかしておくと見やすくにゃる。このあたりはzfsのプロパティその他で可視化できるんだけど、にゃんせFreeNASの実装が怪しいのでにゃるべくzfs使わずに処理する方向で。
▼ ZFS 関連記事
▼ FreeNAS 関連記事