「FreeBSD」カテゴリーアーカイブ

サーバクラッシュ顛末。

先週月曜日、サーバをクラッシュさせてしまい、この一週間復旧作業をしておりました。ようやく安定してきたので、自戒を込めて顛末を記しておきます。

サーバのクラッシュと言えば、ハードディスクが㌧だ、なんてのが定番ですが、今回は完全に自分のオペミス。こういう事が今後起こらないように…。

某所の重要サーバがそろそろ劣化してきたので、更新のためにHPEのmicroserver Gen10を購入したのが事の始まり。もっとも、その前にTM200を買って外部向けサーバとして構築していたのもあり、その流れでmicroserverを目が向いたという流れもあったりします。このとき、「microserver Gen10 いいじゃん?俺も家でこれ使おう」と思ったわけです。

これまで、サーバ専用機ではなく、ある時はノートパソコン、ある時はコンパクトPC、ある時はベアボーンキットと色々な構成を試した結果、やっぱりサーバ専用機として売ってる機械が良いよねという(当たり前の)結論に至った訳です。ファイルサーバとして大容量のストレージを組むのにzfsを使っていますが、10台収容の裸族タワーをUSBで接続して変なエラーに悩まされたり(←失笑千万だね)と、あえてわざわざ荊の道を歩むのもそろそろ疲れたという理由もあります。

TM200はディスクが2台しか入らないのに対して、microserverはHDD4台収容+SSDという構成が取れるのも魅力でした。

microserver gen10 sambaでググってみると、何やら暗雲立ち込める記事を発見。まぁ、俺が使っているのはFreeBSDだし、何とかなるべ?と思ってHPEのサイトでポチッとな。そして機材が届いたのが先週の月曜日なのでありました。

その日は丸一日仕事を終えてかなり疲れて帰ってきた日。もっと落ち着いたときに作業すればいいものを、オモチャを買ってもらった子供が我慢できずに開けて怒られるのと同じ。そう、小学校の理科の時間に乾電池と豆電球の実験で教材を配られて、先生が「まだ駄目」というのに我慢できずに開封して怒られたあの日。秋葉原で部品を買ってもらい、我慢できずに帰りの電車の中で袋を開けて眺めたあの頃。何十年経っても自分は変わっていないのだということを再認識させられたのです。

★教訓:重要な仕事は手順を踏んで万が一に備えてから。後悔しても遅い。★

我慢できない私は、現在稼働中のサーバをおもむろに止め、現在稼働中のSSDを取り出し、新鯖にマウントして電源を入れたのでした。このとき、「microserver gen10は癖があってしんどいよ~、気を付けないとダメだよ…」というのを某所の鯖でさんざん体験して何とか動作にこぎつけた経験が、頭の中で赤信号を点灯させているのは感じつつ…。

★教訓:後悔先に立たず。昔の人は偉い。その通りだ。★

おもむろに電源を入れてOSが起動した…と思ったものの、ブート途中でハングアップ。CTRL-ALT-DELも効かず。仕方ないので電源ボタンをポチッとな…そんな事を数回繰り返し、「やっぱり後で落ち着いてやった方が良いね」と気付いたのだが時すでに遅かったのはその時気付いていなかった。

さて、渦中のSSDを元のマシンに戻して起動。

 

zfs:zroot/ROOT/default failed with error 2: unknown file system

ブートしない。┌|゚□゚;|┐ガーソ!

 

もちろん、長い経験のうちにブート途中で止まってしまうなんてことは何度も経験していたので、シングルユーザモードで起動してゴニョゴニョしたりとか、別の領域からマウントしてfsckするとか、それなりには経験したことがあったのだけど、今回のヤバいことはzfsが壊れて復旧できないという事態。

そう、ufsであれば何とかなったのに、zfsをシステム領域にしてそれが壊れるのは初体験。ググってみると、別のシステムでzpool importとかやってみると良いよ!って事なので、その日はヨドバシ・ドット・コムでSSDを発注し、次の日に繰り越すのでした。

次の日。つまり先週の火曜日。午前中出勤で、その際にFreeBSD12.0Rのインストールメディアを作って帰宅。嬉しいことにもうSSDが届いてる!

という訳で、FreeBSD12.0Rをインスコし、そこに旧SSDをマウントしてzpool importして…おや、出来ないぞ。なになに-fオプションで強制的にインポートか。

 

…できないorz

 

っちゅうーわけで、どうやら一筋縄ではいかないことが判明。他方、メールも送受信できなければDNSすら引けない状況はまずいので、新たにインスコしたFreeBSD12.0Rにて環境再構築。ひたすら色々なデーモンをコンパイルだの、dns設定データの再編集だの、ローカルPCに残っていたメールデータを退避させてからの新鯖へのインポートなど、それはそれは大変な作業に週一杯掛かっていたのでした。

  1. 現在実稼働していて、万が一にも㌧だらまずいディスクで危険なことはしない。
  2. バックアップはちゃんと取る。
  3. 疲れた時に大切な仕事をしない。

等々。どれも昔っから言われてることじゃん!下手したら論語にも書いてありそうなレベル。

 

子曰わく、疲労時に重要な作業をすることなかれ。

 

合掌。

FreeBSD12.0Rとzfsでsticky bitが無効である件

某所のファイルサーバを更新するため、FreeBSD12.0-RELEASEとzfsを使ってsambaを動かす下準備をしていたのだけれど、

「メンバーの誰もが書き込めて、メンバーの誰もが読み出せて、しかしフォルダやファイルの削除だけは作成者本人しか出来ない領域」

を作ろうとしてもなかなか上手く行かない。

ああそうだ、こういう場合はディレクトリにsticky bitを立てるんだったなと思ってchmod 1777 sharedとかやっても、やっぱり他人にもファイルを削除できてしまう。

最初はsamba側の設定がおかしい(force user=誰々とかね)のかと思っていたけど、そうでもない。散々試行錯誤していたところ、zfsのACLの問題じゃないかと思い至った。

https://lists.freebsd.org/pipermail/freebsd-stable/2014-July/079340.html

キタ――(゚∀゚)――!! まさにこれですよ!

…なるほどね。従来のchmodじゃあダメなのね。(でも/tmp/はsticky bitが上手く動いてる気もするんだけどまあ気にしない)

という訳で、samba共有フォルダに対して↑のようにaclを設定してあげたら希望通りの動作になったような気がしています。(後方互換的にsticky bitが動作するようにしといて欲しいけどまあその辺りは色々と事情があるんでしょう)

以上、個人的( ..)φメモメモ

FreeBSD zpoolストレージのあれこれtips(作業メモ)

zfsのストレージプールを作っている。

dmesgの結果は次の通り。

da0 at umass-sim0 bus 0 scbus5 target 0 lun 0
da0: <ST8000DM 005-2EH112 1520> Fixed Direct Access SPC-4 SCSI device
da0: Serial Number 152D00539000
da0: 400.000MB/s transfers
da0: 7630885MB (15628053168 512 byte sectors)
da0: quirks=0xa<NO_6_BYTE,4K>
da1 at umass-sim0 bus 0 scbus5 target 0 lun 1
da2 at umass-sim0 bus 0 scbus5 target 0 lun 2
da1: <WDC WD80 PUZX-64NEAY0 1520> Fixed Direct Access SPC-4 SCSI device
da1: Serial Number 152D00539000
da1: 400.000MB/s transfers
da1: 7630885MB (15628053168 512 byte sectors)
da1: quirks=0x2<NO_6_BYTE>
da2: <WDC WD80 PUZX-64NEAY0 1520> Fixed Direct Access SPC-4 SCSI device
da2: Serial Number 152D00539000
da2: 400.000MB/s transfers
da2: 7630885MB (15628053168 512 byte sectors)
da2: quirks=0x2<NO_6_BYTE>
da3 at umass-sim0 bus 0 scbus5 target 0 lun 3
da3: <WDC WD80 EFZX-68UW8N0 1520> Fixed Direct Access SPC-4 SCSI device
da3: Serial Number 152D00539000
da3: 400.000MB/s transfers
da3: 7630885MB (15628053168 512 byte sectors)
da3: quirks=0x2<NO_6_BYTE>
da4 at umass-sim0 bus 0 scbus5 target 0 lun 4
da4: <WDC WD80 EFZX-68UW8N0 1520> Fixed Direct Access SPC-4 SCSI device
da4: Serial Number 152D00539000
da4: 400.000MB/s transfers
da4: 7630885MB (15628053168 512 byte sectors)
da4: quirks=0x2<NO_6_BYTE>
da5 at umass-sim0 bus 0 scbus5 target 0 lun 5
da5: <ST8000AS 0002-1NA17Z 1520> Fixed Direct Access SPC-4 SCSI device
da5: Serial Number 152D00539000
da5: 400.000MB/s transfers
da5: 7630885MB (15628053168 512 byte sectors)
da5: quirks=0x2<NO_6_BYTE>
random: unblocking device.
da6 at umass-sim0 bus 0 scbus5 target 0 lun 6
da6: <ST8000AS 0002-1NA17Z 1520> Fixed Direct Access SPC-4 SCSI device
da6: Serial Number 152D00539000
da6: 400.000MB/s transfers
da6: 7630885MB (15628053168 512 byte sectors)
da6: quirks=0x2<NO_6_BYTE>
Trying to mount root from zfs:zroot/ROOT/default []…
da7 at umass-sim0 bus 0 scbus5 target 0 lun 7
da7: <ST8000AS 0002-1NA17Z 1520> Fixed Direct Access SPC-4 SCSI device
da7: Serial Number 152D00539000
da7: 400.000MB/s transfers
da7: 7630885MB (15628053168 512 byte sectors)
da7: quirks=0x2<NO_6_BYTE>
da8 at umass-sim0 bus 0 scbus5 target 0 lun 8
da8: <ST8000AS 0002-1NA17Z 1520> Fixed Direct Access SPC-4 SCSI device
da8: Serial Number 152D00539000
da8: 400.000MB/s transfers
da8: 7630885MB (15628053168 512 byte sectors)
da8: quirks=0x2<NO_6_BYTE>

つまり、

da0:8TB(ST8000DM)

da1:8TB(WD80PUZX)

da2:8TB(WD80PUZX)

da3:8TB(WD80EFZX)

da4:8TB(WD80EFZX)

da5:8TB(ST8000AS)

da6:8TB(ST8000AS)

da7:8TB(ST8000AS)

da8:8TB(ST8000AS)

となっている。続いてzpoolのステータス

# zpool status
pool: zbackup
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using ‘zpool online’.
see: http://illumos.org/msg/ZFS-8000-2Q
scan: resilvered 0 in 0h0m with 0 errors on Mon Apr 23 06:29:16 2018
config:

NAME STATE READ WRITE CKSUM
zbackup DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
da8 ONLINE 0 0 0
5017281946433150361 UNAVAIL 0 0 0 was /dev/da4
da0 ONLINE 0 0 0
da5 ONLINE 0 0 0

errors: No known data errors

pool: zdata
state: ONLINE
status: Some supported features are not enabled on the pool. The pool can
still be used, but some features are unavailable.
action: Enable all features using ‘zpool upgrade’. Once this is done,
the pool may no longer be accessible by software that does not support
the features. See zpool-features(7) for details.
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zdata ONLINE 0 0 0
raidz3-0 ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
da3 ONLINE 0 0 0
da4 ONLINE 0 0 0
da6 ONLINE 0 0 0

errors: No known data errors

pool: zroot
state: ONLINE
status: Some supported features are not enabled on the pool. The pool can
still be used, but some features are unavailable.
action: Enable all features using ‘zpool upgrade’. Once this is done,
the pool may no longer be accessible by software that does not support
the features. See zpool-features(7) for details.
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
ada0p4 ONLINE 0 0 0

errors: No known data errors

da1・da2・da3・da4・da6でRAIDZ3。これはトリプルパリティで最大3台までのHDDが同時に死んでもデータは保全されるってやつ。8TBのHDDを5台使って容量16TB。

…うーん。安全性(ryだけどちょっと無駄が多すぎる希ガス

da0・da4・da5・da8はRAIDZ1で24TBのストレージ。しかしエラーが発生してる…。

zpoolコマンドで復旧してみるってのもひとつの経験としてアリだけど、年末大出血(って何)ってことで東芝の14TBのHDDを3台購入してきましたわけで。

以上の状態を踏まえてですね、

さて、どうするか。

まず、raidz3は少々やり過ぎな気もしないでもないけど、しかし海門のHDDには過去痛い目に遭ってるから、なるべく冗長度は大きくしたい。

ちなみに現在の使用量は、df -gすると

zdata 14327 8465 5861 59% /usr/home/jail/ほげほげ

って訳でまぁ概算9TB弱ぐらい使ってる。

って事は、14TBのHDDで新たにRAIDZ3を組んで14TBのストレーj

いや、3台じゃRAIDZ3組めないでしょ

しまった。

…しかし、raidzの特徴として、現在のストレージプールを構成しているハードディスクの容量が増えれば、勝手にプールの容量も増えるという、かつてnewfsとかシコシコやっていた頃に比べると考えれない利便性があるとのこと。

じゃあ、次の方針でやってみよう。

  1. 現在raidz3を構成している、da1・da2・da3・da4・da6のうち3台を14TBに交換。そしてまたそのうち金があったら14TBを2枚買い足す( ノД`)シクシク…
  2. その外した3台の8TBのHDDのうちどれかをda4の代わりに差し替える。

あーでも、現在使っているストレージタワー(裸族の云々)はフルスロットル埋まっているから、手順としては次のようにせざるを得ないね。

  1. da4を物理的に切り離し、代わりに14TBの生HDDを突っ込む。
  2. zdataからどれか1台を離脱させる。
  3. 離脱したHDDをzbackupに入れる。
  4. zdataに14TBのHDDを参加させる。

後はビルドが完了次第、zdataのうちどれか2台の8TBを離脱させ、そこに14TBのHDDを入れてやれば良いということ。ばっちぐー(古


1.障害が発生しているda4を切り離す作業

#zpool offline zbackup da4

とかやってみると、zpool statusした結果は、

pool: zbackup
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using ‘zpool online’ or replace the device with
‘zpool replace’.
scan: resilvered 0 in 0h0m with 0 errors on Mon Apr 23 06:29:16 2018
config:

NAME STATE READ WRITE CKSUM
zbackup DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
da8 ONLINE 0 0 0
5017281946433150361 OFFLINE 0 0 0 was /dev/da4
da0 ONLINE 0 0 0
da5 ONLINE 0 0 0

お、ちゃんとオフラインになった。

2.zdataからどれか1台を離脱させる作業

これ実稼働中のファイルシステムに行うのがメチャクチャ怖い…。もちろんraidz3だからHDDを離脱させても問題ないのは分かってるけど、心臓に悪いね。

(ST8000ASとST8000DMってどっちが信頼性高いんだろう。ASはアーカイブ用でDMの方が性能は高いのかな。でも昔クラッシュしてえらい目に遭ったのはDMだったよな。うーん…と5chで情報収集して悩む事ン十分)

 

・・・ん?

なんでda4が両方のストレージプールにあったの?(?_?)←今気づいた

と思って良く見たら。

da0・da5・da8でraidz0で構成しているのがzbackup

da1・da2・da3・da4・da6でraidz3を構成しているのがzdata

何だか良く分からなくなってきたから、da4を落とそう。えいやっ

# zpool offline zdata da4

でzpool statusをすると

# zpool status
pool: zbackup
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using ‘zpool online’ or replace the device with
‘zpool replace’.
scan: resilvered 0 in 0h0m with 0 errors on Mon Apr 23 06:29:16 2018
config:

NAME STATE READ WRITE CKSUM
zbackup DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
da8 ONLINE 0 0 0
5017281946433150361 OFFLINE 0 0 0 was /dev/da4
da0 ONLINE 0 0 0
da5 ONLINE 0 0 0

errors: No known data errors

pool: zdata
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using ‘zpool online’ or replace the device with
‘zpool replace’.
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zdata DEGRADED 0 0 0
raidz3-0 DEGRADED 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
da3 ONLINE 0 0 0
7675701080755519488 OFFLINE 0 0 0 was /dev/da4
da6 ONLINE 0 0 0

errors: No known data errors

…大丈夫なんだろうか。

とりま、ここでda4を物理的に外して、代わりに14TBの1枚目を投入してみる。

またこれがアナログ的に手法で、

#cat /dev/da4 > /dev/null

とかやってアクセスランプがパカパカするHDDを見つけるという方法。

よし。

#shutdown -p now

してHDDを取り出…

あれ?da7はどこに行ったの?

 

そう。実は古いgmirrorな使い方をしていた/dev/da7が遊んでいることに今気づいたのですよ。

ってー訳で、da4とda7を取り外して14TBを突っ込む。dmesgしてみると、

da0 at umass-sim0 bus 0 scbus5 target 0 lun 0
da0: <ST8000AS 0002-1NA17Z 1520> Fixed Direct Access SPC-4 SCSI device
da0: Serial Number 152D00539000
da0: 400.000MB/s transfers
da0: 7630885MB (15628053168 512 byte sectors)
da0: quirks=0x2<NO_6_BYTE>
da1 at umass-sim0 bus 0 scbus5 target 0 lun 1
da1: <ST8000AS 0002-1NA17Z 1520> Fixed Direct Access SPC-4 SCSI device
da1: Serial Number 152D00539000
da2 at umass-sim0 bus 0 scbus5 target 0 lun 2
da1: 400.000MB/s transfers
da1: 7630885MB (15628053168 512 byte sectors)
da1: quirks=0x2<NO_6_BYTE>
da2: <TOSHIBA MN07ACA14T 1520> Fixed Direct Access SPC-4 SCSI device
da2: Serial Number 152D00539000
da2: 400.000MB/s transfers
da2: 13351936MB (27344764928 512 byte sectors)
da2: quirks=0x2<NO_6_BYTE>
da3 at umass-sim0 bus 0 scbus5 target 0 lun 3
da3: <ST8000AS 0002-1NA17Z 1520> Fixed Direct Access SPC-4 SCSI device
da3: Serial Number 152D00539000
da3: 400.000MB/s transfers
da3: 7630885MB (15628053168 512 byte sectors)
da3: quirks=0x2<NO_6_BYTE>
da4 at umass-sim0 bus 0 scbus5 target 0 lun 4
da4: <ST8000AS 0002-1NA17Z 1520> Fixed Direct Access SPC-4 SCSI device
da4: Serial Number 152D00539000
da4: 400.000MB/s transfers
da4: 7630885MB (15628053168 512 byte sectors)
da4: quirks=0x2<NO_6_BYTE>
random: unblocking device.
da5 at umass-sim0 bus 0 scbus5 target 0 lun 5
da5: <ST8000DM 005-2EH112 1520> Fixed Direct Access SPC-4 SCSI device
da5: Serial Number 152D00539000
da5: 400.000MB/s transfers
da5: 7630885MB (15628053168 512 byte sectors)
da5: quirks=0xa<NO_6_BYTE,4K>
Trying to mount root from zfs:zroot/ROOT/default []…
da6 at umass-sim0 bus 0 scbus5 target 0 lun 6
da6: <WDC WD80 PUZX-64NEAY0 1520> Fixed Direct Access SPC-4 SCSI device
da6: Serial Number 152D00539000
da6: 400.000MB/s transfers
da6: 7630885MB (15628053168 512 byte sectors)
da6: quirks=0x2<NO_6_BYTE>
da7 at umass-sim0 bus 0 scbus5 target 0 lun 7
da7: <WDC WD80 PUZX-64NEAY0 1520> Fixed Direct Access SPC-4 SCSI device
da7: Serial Number 152D00539000
da7: 400.000MB/s transfers
da7: 7630885MB (15628053168 512 byte sectors)
da7: quirks=0x2<NO_6_BYTE>
da8 at umass-sim0 bus 0 scbus5 target 0 lun 8
da8: <WDC WD80 EFZX-68UW8N0 1520> Fixed Direct Access SPC-4 SCSI device
da8: Serial Number 152D00539000
da8: 400.000MB/s transfers
da8: 7630885MB (15628053168 512 byte sectors)
da8: quirks=0x2<NO_6_BYTE>
da9 at umass-sim0 bus 0 scbus5 target 0 lun 9
da9: <TOSHIBA MN07ACA14T 1520> Fixed Direct Access SPC-4 SCSI device
da9: Serial Number 152D00539000
da9: 400.000MB/s transfers
da9: 13351936MB (27344764928 512 byte sectors)
da9: quirks=0x2<NO_6_BYTE>

ん?da2とda9でマウントされてる。まあいいや

# zpool status
pool: zbackup
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using ‘zpool online’ or replace the device with
‘zpool replace’.
scan: resilvered 0 in 0h0m with 0 errors on Mon Apr 23 06:29:16 2018
config:

NAME STATE READ WRITE CKSUM
zbackup DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
da3 ONLINE 0 0 0
5017281946433150361 OFFLINE 0 0 0 was /dev/da4
da5 ONLINE 0 0 0
da0 ONLINE 0 0 0

errors: No known data errors

pool: zdata
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using ‘zpool online’ or replace the device with
‘zpool replace’.
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zdata DEGRADED 0 0 0
raidz3-0 DEGRADED 0 0 0
da6 ONLINE 0 0 0
da7 ONLINE 0 0 0
da8 ONLINE 0 0 0
7675701080755519488 OFFLINE 0 0 0 was /dev/da4
da1 ONLINE 0 0 0

errors: No known data errors

pool: zroot
state: ONLINE
status: Some supported features are not enabled on the pool. The pool can
still be used, but some features are unavailable.
action: Enable all features using ‘zpool upgrade’. Once this is done,
the pool may no longer be accessible by software that does not support
the features. See zpool-features(7) for details.
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
ada0p4 ONLINE 0 0 0

errors: No known data errors

よしよし。じゃー突っ込むよー

あれ?こんなコマンドを使うのかな?

# zpool replace zdata da4 da2

そしたら表示が

pool: zdata
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sun Dec 30 22:24:04 2018
32.3M scanned out of 19.5T at 2.49M/s, (scan is slow, no estimated time)
6.22M resilvered, 0.00% done
config:

NAME STATE READ WRITE CKSUM
zdata DEGRADED 0 0 0
raidz3-0 DEGRADED 0 0 0
da6 ONLINE 0 0 0
da7 ONLINE 0 0 0
da8 ONLINE 0 0 0
replacing-3 DEGRADED 0 0 0
7675701080755519488 OFFLINE 0 0 0 was /dev/da4
da2 ONLINE 0 0 0
da1 ONLINE 0 0 0

errors: No known data errors

こんな風になった。多分これでリビルド(?)してるんだろう。(とHDDのアクセスランプを見に行く)

raidz3だったら同時に2台目も入れ替えても大丈夫だろうけど、若い頃だったら多分突っ走ってやってただろうけど大人になった今はそういう危ない事はやらない。

で、後はda4をzbackupに復帰させてみる。

# zpool online zbackup da4

# zpool status
pool: zbackup
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sun Dec 30 22:36:02 2018
870M scanned out of 12.5T at 39.5M/s, 92h25m to go
197M resilvered, 0.01% done
config:

NAME STATE READ WRITE CKSUM
zbackup ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
da3 ONLINE 0 0 0
da4 ONLINE 0 0 0
da5 ONLINE 0 0 0
da0 ONLINE 0 0 0

errors: No known data errors

pool: zdata
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sun Dec 30 22:24:04 2018
57.1G scanned out of 19.5T at 79.0M/s, 71h33m to go
11.4G resilvered, 0.29% done
config:

NAME STATE READ WRITE CKSUM
zdata DEGRADED 0 0 0
raidz3-0 DEGRADED 0 0 0
da6 ONLINE 0 0 0
da7 ONLINE 0 0 0
da8 ONLINE 0 0 0
replacing-3 DEGRADED 0 0 0
7675701080755519488 OFFLINE 0 0 0 was /dev/da4
da2 ONLINE 0 0 0
da1 ONLINE 0 0 0

errors: No known data errors

pool: zroot
state: ONLINE
status: Some supported features are not enabled on the pool. The pool can
still be used, but some features are unavailable.
action: Enable all features using ‘zpool upgrade’. Once this is done,
the pool may no longer be accessible by software that does not support
the features. See zpool-features(7) for details.
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
ada0p4 ONLINE 0 0 0

errors: No known data errors

両方合わせて70時間ぐらい待ってれば良いっぽい。

という訳で今年の作業終了~。ふー


2019/1/3追記。

ビルドが終わったようなので、14TBのHDD2台目を行ってみる。

# zpool replace zdata da1 da9

# zpool status zdata
pool: zdata
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Thu Jan 3 05:56:07 2019
66.1M scanned out of 19.5T at 2.00M/s, (scan is slow, no estimated time)
12.6M resilvered, 0.00% done
config:

NAME STATE READ WRITE CKSUM
zdata ONLINE 0 0 0
raidz3-0 ONLINE 0 0 0
da6 ONLINE 0 0 0
da7 ONLINE 0 0 0
da8 ONLINE 0 0 0
da2 ONLINE 0 0 0
replacing-4 ONLINE 0 0 0
da1 ONLINE 0 0 0
da9 ONLINE 0 0 0

errors: No known data errors

よーし、これでまたリビルド待ち。

サーバ更新準備

最近このブログ(WordPress)なども稼働させているため過負荷気味のサーバですが、OSもいつの間にかObsoleteになって久しいし、ここいらでOSも含めて更新しようと思い立ったのでその記録。

まず、FreeBSD11.0Rをインストール。

1TBのSSDを持ってきてzfsにしてみた。zfsは扱ったことが無いので、これから慣れていかんとなぁ。

freebsd-update fetch

freebsd-update install

でパッチ当て。

/usr/src/以下でmake worldをかまし、make install INSTALLDIR=ごにょごにょとやってjailを構築。

その辺までは良いとして、いよいよjail環境の構築。

従来のように、/etc/rc.confにjailなんちゃらを書き込むのはもうobsoleteだよ!と怒られる。じゃあどうすれば良いかというと、/etc/jail.confに書く。

/etc/jail.confの書式は以前とは違うので注意。man jail.conf する。こんな感じ。

# cat /etc/jail.conf
exec.start = “/bin/sh /etc/rc”;
exec.stop = “/bin/sh /etc/rc.shutdown”;
exec.clean;
mount.devfs;
path = “/home/jail/$name”;
host.hostname = $name;

# each jail
khz {
ip4.addr = 10.100.100.71,192.168.0.71,10.100.100.72,192.168.0.72,10.100.100.73,192.168.0.73,10.100.100.75,192.168.0.75 ;
allow.chflags;
allow.raw_sockets;
}
kemasv {
ip4.addr =10.100.100.10,192.168.0.10 ;
allow.chflags;
allow.raw_sockets;
}

 

今までは、apacheにしろsambaにしろ、基本的には全てソースからコンパイルしていたけれども、依存関係だの何だのでなかなか入らない。

portsを使ってみたところ、まあまあ動くんだけど、やっぱり動かないものもある。

って訳でpkgに戻ってきましたよ、っと

pkg update

pkg install samba44

おおお、ちゃんとsambaが入る(笑)。

起動スクリプトとか設定ファイルの在処がアレだったりするけど、まあ長い旅をしてここに戻ってきたということで良いんじゃないでしょーか。

パッケージを探すときは

pkg search apache

みたいにやればいい。

続く。かも。

FreeBSDでqmail+imapサーバ構築

FreeBSDサーバでimapを使えるようにしたメモ。

imapデーモンとしてソースからコンパイルしてcourier-imapをソースからインストールしようとしてもどうしても上手くいかず、Makefileや各種ライブラリなどを調整してもダメだったので放置していました。

ところが、ある日調べてみると、昨今のimapデーモンはdovecotってのが流行りだとか。それを見てdovecotを入れて上手く行ってるのでそのメモ。

https://www.dovecot.org/

ソースを取得してコンパイル。普通にconfigure、make、make installで行くはず。

smtp-authは、qmail-smtpd-authパッチを当てるけど、このとき64bitパッチを当てていると上手く行かないので、

  1. 64bitパッチ等を当ててまずは普通にqmailのインストール
  2. 別途新たに展開したソースにsmtpauthパッチを当ててコンパイルし、qmail-smtpdのバイナリだけを取り出して別途保存

でqmail本体もsmtpauthも上手く行くはずです。

dovecotの設定ファイルは、

  • /usr/local/etc/dovecot/dovecot.conf
  • /usr/local/etc/dovecot/conf.d/10-auth.conf
  • /usr/local/etc/dovecot/conf.d/10-mail.conf
  • /usr/local/etc/dovecot/conf.d/10-master.conf
  • /usr/local/etc/dovecot/conf.d/auth-checkpassword.conf.ext

あたり。とりあえずcheckpassword経由の認証にしてあります。(多分これで十分)

動かなかったら、ログを見ながら調整してください。確か権限か何かを調整した覚えがあります(うろ覚え)が、少々の試行錯誤で動くようにはなるはずです。

imapデーモンを入れてからというもの、メールの読み書きがもんのすごく便利になり、もうpop3には戻れませんて。はい。

uptime

今管理しているサーバは、年に1度の設備点検時に電源を落としたり、ストレージのHDDを更新したりするため1年以上連続稼働する事は少ない(ほとんど無い)んだけど、ずっと前に保守契約が打ち切られたまま放置している某所のサーバがあるのを思い出してログインしてみた。

>uptime
1:49AM up 715 days, 15:14, 1 user, load averages: 1.00, 1.00, 1.00

おおお!まだ動いてる(笑)。

なんかこのまま放っとけばuptimeが1000日超えそうだわ。

>uname -a
FreeBSD (略) 8.3-RELEASE FreeBSD 8.3-RELEASE #0: Fri Oct 26 23:28:24 JST 2012 root@(略):/usr/home/src/sys/i386/compile/USB i386

そっかー、8.3か(遠い目)

自分のグローバルIPアドレスを知る方法

モバイル環境やNAT内からのアクセスなどで、自分が今インターネットにアクセスしているグローバルIPアドレスを知りたいことがあります。そんな時のためにスクリプトを作ってみました。(というか、5年以上前からこっそり動かしているんだけど)

http://ipaddress.khz-net.co.jp/

アクセスすると、HTMLなど一切無しでIPアドレスだけを吐き出します。従って、PHPなんかのスクリプトからアクセスしてIPアドレスを取得するとき、タグ除去などの面倒な作業が一切不要で便利かと思います。…というか、仕事上そういう必要性があったから自分用に作っただけなんだけどね。

使いたい方はご自由にどうぞ。もちろん、結果や正常動作については一切無保証です。過剰にアクセス負荷を掛けたりしないでね。

smb.confのアクセス制限落とし穴

色々な権限を持っている複数のユーザーが存在している状況下で、ユーザグループごとにアクセス制限を掛けているsamba共有フォルダの設定方法。

複数のユーザが同一の権限でアクセスできる共有フォルダ(force user/force group)のアクセス権限を、valid users=で設定するとうまく行かない。

その場合は、invalid usersを用いて排除するユーザを記述する。システムのグループで分けて、invalid users = +グループ名で設定すると楽。

gmirrorしているHDDに新HDDを追加・HDDの削除

  • 新しく買ってきた真っ新なHDDをミラーリングプールに追加

 # gmirror status

Name    Status  Components

mirror/8tbhdd0p1  COMPLETE

ad8p1 (ACTIVE)
ad11p1 (ACTIVE)

#  gpart create -s GPT ad12
ad12 created
# gpart add -t freebsd-ufs ad12
ad12p1 added
# gmirror insert 8tbhdd0p1 ad12p1
# gmirror status

Name    Status  Components

mirror/8tbhdd0p1  DEGRADED  ad8p1 (ACTIVE)
ad11p1 (ACTIVE)
ad12p1 (SYNCHRONIZING, 0%)

  • 今までのミラーリングプールから1台離脱

# gmirror remove 8tbhdd0p1 ad8p1
# gmirror status
Name    Status  Components
mirror/8tbhdd0p1  DEGRADED  ad11p1 (ACTIVE)
ad12p1 (SYNCHRONIZING, 0%)

  • 離脱させたHDDで別のミラーリングプールを作成

# gmirror label -v -b round-robin 8tbhdd1p1 ad8p1
Metadata value stored on ad8p1.
Done.
# gmirror status
Name    Status  Components
mirror/8tbhdd0p1  DEGRADED  ad11p1 (ACTIVE)
ad12p1 (SYNCHRONIZING, 0%)
mirror/8tbhdd1p1  COMPLETE  ad8p1 (ACTIVE)

wordpress更新エラーの件

「ダウンロードに失敗しました。 要求されたリクエストを完了できる HTTP トランスポートがありません。

というエラーでWordpress本体がアップデートできない件の対応。

原因は、curl

https://curl.haxx.se/

が入っていなかったこと。従って、curlのライブラリをインストールした上で、新しいバージョンが出ていたApacheと併せてPHPを更新。

Apacheのconfigureは、

./configure –enable-so –enable-authn-dbd –enable-ssl –enable-rewrite

PHPのconfigureは、

‘./configure’  ‘–with-pgsql’ ‘–with-apxs2=/usr/local/apache2/bin/apxs’ ‘–with-gd’ ‘–enable-exif’ ‘–with-jpeg-dir=/usr/local/’ ‘–with-png-dir=/usr/local/’ ‘–with-zlib-dir=/usr/local/’ ‘–enable-mbstring’ ‘–with-mysql’ ‘–with-curl’