ソースの表示以前のリビジョンバックリンク全て展開する/折り畳む文書の先頭へ Share via Share via... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer Reddit Teams最近の変更Send via e-Mail印刷パーマリンク × メモリ16GBは人権の今、ZFSの重複排除(dedup)を解禁する (2020-12-15 追記) dedup有効状態で10ヵ月弱使ってみたけど、やっぱりまだ解禁しない方がよさげ。メモリ的には余裕だが、ファイル削除に時間がかかるようになったり微妙に怪しげな挙動をすることがある(何となくレコード毎に重複チェックが走り本当に削除するかどうかを決定しているような感じ。ファイルサイズと削除所用時間は比例する。要検証)。データの破損や消失は起きてないので、そういった意味での危険性はないが、有効にするなら何が起きても自己責任ってことで! ZFSは2010年頃のPool Version 21で重複排除機能(dedup)を備えたが、本機能の使用は長らく禁忌とされてきた。というのも、Chr〇meも真っ青のレベルでメモリを馬鹿食いするからだ。ZFSの他の機能同様、dedupも有効にした後の書き込みから機能するため、当初は問題なく動いてるように見える。が、徐々にメモリが使われて行き「なんか重いなぁ…」と気付いた時には既に遅し、メモリが枯渇しているのである。慌ててdedup=offにしても、既に重複排除された分は効き続けるため、メモリは減ったままというオマケ付き。dedup地獄から抜け出すには、メモリを増設するかスワップを大量に割り当て、既存の重複排除が解除されるのをひたすら耐えるしかない。 そんな訳でdedupの実用は難しかったのだけども、メモリ16GBは人権宣言から1年、フッ化水素騒動も何のその、メモリ価格は下落を続け個人でメモリ1TBも現実的となってきた昨今、そろそろdedupを解禁しても良いのではないか。 FreeBSD Mastery: ZFSによると、dedupはデータ1TBあたり概ね5GBのメモリを消費するそうだ。うちの自宅サーバはメモリ64GBでメインのプールは8TBなので、dedupを有効にしてもお釣りがくる計算だ。ならば人柱よろしくdedupっちゃおうじゃないの。ちなみに、同書にはdedupメモリ消費量のより詳しい見積もり方法が書いてある。気になる人は買って読んでください。 dedupを有効にするプールzhomeは以下のような感じ。8TBのHDDを2本(ada5とada6)のミラー構成としている。改めてみるとファイルシステム名のつけ方が酷いな…。 $ zpool status zhome pool: zhome state: ONLINE scan: scrub repaired 0 in 0 days 02:21:29 with 0 errors on Thu Oct 24 11:57:54 2019 config: NAME STATE READ WRITE CKSUM zhome ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ada5p1 ONLINE 0 0 0 ada6p1 ONLINE 0 0 0 logs mirror-1 ONLINE 0 0 0 nvd0p3 ONLINE 0 0 0 nvd1p3 ONLINE 0 0 0 cache nvd0p7 ONLINE 0 0 0 errors: No known data errors $ zpool list zhome NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zhome 7.27T 1.22T 6.04T - - 2% 16% 1.00x ONLINE - $ zfs list -r zhome NAME USED AVAIL REFER MOUNTPOINT zhome 1.22T 5.81T 96K /zhome zhome/R 1.21T 5.81T 88K /zhome/R zhome/R/home 1.21T 5.81T 1.21T /usr/home zhome/ROOT 15.5G 5.81T 96K /zhome/ROOT zhome/ROOT/nextcloud 6.78G 5.81T 6.78G /mnt/nextcloud zhome/ROOT/vm 8.69G 5.81T 88K /zhome/ROOT/vm zhome/ROOT/vm/virtcurrency 8.69G 5.81T 8.69G /zhome/ROOT/vm/virtcurrency とりあえずホームディレクトリが置いてあるzhome/R/homeでdedupを有効にしてみる。 # zfs set dedup=skein zhome/R/home dedup=onではなくdedup=skeinなのは、チェックサムアルゴリズムとしてSkeinを使いたいから。 dedupは標準でSHA-256を使うようになっているが、manを見る限りSkeinはSHA-256/SHA-512より安全かつ高速で、更にプール固有のソルトを用いるためハッシュ衝突攻撃にも強いらしい。「sha512は何からの理由で高速なskeinが使えないシステムで使う」とも書いてあるので、基本はskeinで良さそう。 その後、別プールにあるISOイメージやらインストーラやらが詰まってる493GBのフォルダを、dedup有効のプールにコピーした結果が以下。 $ zpool list zhome NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zhome 7.27T 1.64T 5.62T - - 3% 22% 1.11x ONLINE - 重複排除率が1.11xってのは……たぶん2.00xならdedupで実使用量が半分になったって事だろうから、(重複排除できたサイズ)=(1-(1/DEDUP))*(元のサイズ) なので48GBほど排除できた感じっすかね? この時のメモリ使用量の変化は下図のとおり。 ARCサイズはloader.confでvfs.zfs.arc_max=“20G”として20GBに制限している。dedup前はARCを20GBフルに使ってるのに対し、dedup後は15GBになっていることから、dedup用のハッシュキャッシュはARCから確保されるっぽい? データ493GBでハッシュ5GBって冒頭の概算の2倍消費しとるやんけ!と思ったが、Skeinは512bitハッシュなので比率で考えたら見事に概算通りの結果となった。そう考えると、メモリ64GB程度ではdedupを使うにはまだ心許ない感じがするなぁ……(何というオチ)。ちなみに、将来dedupのメモリ消費量が削減される可能性があるっぽい。 まぁ、せっかくdedup有効にしてみたんだし、しばらく運用してみよう。NVMeなSSDも載ってるので、最悪そっちに大容量スワップ作れば何とかなるだろう。 (2020-01-06 追記) dedup有効後、6日ほど経ったのでtopを見てみたら、ARCが20GBに戻ってた…。ARCからハッシュキャッシュから取られる訳ではなさそう?ちゃんと調べてみないと分かりませんな……。 last pid: 26323; load averages: 0.21, 0.20, 0.17 up 71+13:01:17 22:29:52 51 processes: 1 running, 50 sleeping CPU: 0.8% user, 0.0% nice, 0.3% system, 0.0% interrupt, 98.9% idle Mem: 295M Active, 1465M Inact, 25G Wired, 35G Free ARC: 20G Total, 11G MFU, 6802M MRU, 1530K Anon, 369M Header, 1446M Other 17G Compressed, 24G Uncompressed, 1.43:1 Ratio Swap: 参考サイト zfs(8) OpenZFS、重複排除機能が改善される可能性あり | マイナビニュース 我が国では人権はいくらでも蹂躙して構わないことになっているので「メモリ16GBは人権」といういい方はNG、という説 - Togetter Nextcloudのプレビューの文字化けを直す Web版Nextcloudで表示されるテキストファイルのプレビュー画像が文字化けしてたので直してみた。 やることは、プレビュー生成で使っているフォントをNotoSansCJKに変更するだけ。手順は↓こんな感じ。 https://github.com/minoryorg/Noto-Sans-CJK-JP/tree/master/fonts から NotoSansCJKjp-Regular.ttf をダウンロード DLしたフォントを Nextcloudのインストール先/core/fonts に入れる 上記フォルダでNotoSansCJKjp-Regular.ttfをNotoSans-Regular.ttf (Nunito-Regular.ttf)にリネームする(シンボリックリンクでも可) Nextcloudの標準フォントに、日本語のグリフが含まれていないのが原因のようだ。当初は文字コード周りかと思ってたが、プレビューをよく見ると“豆腐”になっていることが分かる。 プレビューの生成はファイルが変わった時に行われるようなので、てきとーにファイルを編集すれば正常な表示になるはず。 もう少し詳しく解説すると、テキストファイルのプレビューの生成はlib/private/Preview/TXT.phpで行われており、80行目あたりでNotoSans-Regularが指定されている→GitHub/master Notoなのに何で文字化け…?と思ったのだが、同梱のNotoには日本語のグリフが含まれていないようだ。ついでに、Notoが使われるようになったのはごく最近で、以前はNunitoが使われていたようだ→GitHub/Move font from Nunito to Noto Sans というわけで、使ってるNextcloudのバージョンに応じて、NotoSans-Regular.ttfもしくはNunito-Regular.ttfを日本語グリフを含むフォントに差し替えればおkというわけ。 Transcend TS256GUSD300S-Aのベンチマーク Nintendo Switch用にトランセンドのmicroSDXC TS256GUSD300S-Aを買った。税込み4580円。シリアル番号で保証期間が表示されたので正規品だと思われる。 Switchで使う前にCheck Flashで喝入れ、SD Formatterで上書きフォーマットし、CrystalDiskMarkでベンチしてみた。USB 3.0接続のカードリーダーでの結果でござる。 ------------------------------------------------------------------------------ CrystalDiskMark 7.0.0 x64 (C) 2007-2019 hiyohiyo Crystal Dew World: https://crystalmark.info/ ------------------------------------------------------------------------------ * MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s] * KB = 1000 bytes, KiB = 1024 bytes [Read] Sequential 1MiB (Q= 8, T= 1): 93.954 MB/s [ 89.6 IOPS] < 88429.49 us> Sequential 1MiB (Q= 1, T= 1): 93.332 MB/s [ 89.0 IOPS] < 11211.36 us> Random 4KiB (Q= 32, T=16): 6.323 MB/s [ 1543.7 IOPS] <258114.41 us> Random 4KiB (Q= 1, T= 1): 6.099 MB/s [ 1489.0 IOPS] < 670.86 us> [Write] Sequential 1MiB (Q= 8, T= 1): 53.682 MB/s [ 51.2 IOPS] <150429.74 us> Sequential 1MiB (Q= 1, T= 1): 53.275 MB/s [ 50.8 IOPS] < 19516.58 us> Random 4KiB (Q= 32, T=16): 3.240 MB/s [ 791.0 IOPS] <185034.42 us> Random 4KiB (Q= 1, T= 1): 3.246 MB/s [ 792.5 IOPS] < 1260.52 us> Profile: Default Test: 1 GiB (x5) [Interval: 5 sec] <DefaultAffinity=DISABLED> Date: 2019/12/08 18:56:23 OS: Windows 10 Professional [10.0 Build 18362] (x64) Comment: Transcend TS256GUSD300S-A (microSDXC/256GB) 値段なりの順当な結果かなと。ついでにSD Card Formatterでの初期化結果は↓こんな感じだった。 DokuWikiにStopForumSpam 2を入れたらスパムがピタッと止んだ ここ一か月ほど、blog記事へのピンバックスパム攻撃に晒されていた。気づいたときにシコシコと手動削除で対応してたけど、Google Analyticsの報告でスパムが原因と思われる読み込み時間が異様に長いページが出始めたため、本腰を入れて対応することにした。 DokuWikiにも有名処のスパム対策としてCAPTCHAプラグインやreCAPTCHAプラグインが用意されている。うちでもコメント投稿用にCAPTCHAは導入済みでスパムコメントは全くないが、仕組み的にBlogTNGのピンバックには効果がない。スパマーの大半はロシア中国韓国の「あっ(察し」なところ経由で来てて、それら全部のアクセスを遮断しちゃってもいいんだけど、さすがに乱暴すぎる。 スパマーのIPアドレスを動的に良い感じで遮断してくれるプラグインは無いかと探してたら、StopForumSpam Plugin 2ってのがあった。 このプラグインはStop Forum Spamの情報を利用してスパムを遮断するものだが、設定によりスパマーのアクセス自体の遮断も行えるのがポイント。サイト設定の以下の項目を0以外にすると、Stop Forum Spamのスコアに基づいてアクセスを遮断してくれるようになる。プラグインの作者は日本人のようで、説明が日本語なのも嬉しい。 plugin»stopforumspam2»accessRefusalFreq plugin»stopforumspam2»accessRefusalConf この設定をしてから、1日50件くらいあったピンバックスパムが、4日経過時点で1件のみと素晴らしい成果を上げている。Stop Forum Spamとプラグインの作者さんに超感謝なのだ。 参考サイト Stop Forum Spam StopForumSpam Plugin 2 Stop Forum Spamを用いてロボットスパムを検挙してみる - Qiita スパム対策プラグイン - StopForumSpam2 [北海道ゆっくり放送の砂場] MegaRAIDでUnexpected sense, Command timeoutとかが出てた 知人から「なんかサーバのHDDがオレンジになってるんだけど…」という一報があった。 恐る恐るMegaRAID Storage Managerで状態を見てみると、Unexpected senseやらCommand timeoutやらPower on, reset, or bus device reset occurredやらが出てアレイがデグレってた:( ;´꒳`;):。マシンはDELL PowerEdge T330, PERC H730で、アレイはMD050ACA800×4, WD80EFAX×4でRAID-6からVDを2つ切り出してるという構成。稼働してまだ10カ月くらい。そのうち1つのWD80EFAXが切り離されていた。ログは↓な感じで。 ID | TIME | MESSAGE ----+---------------------+--------------------- 267 | 2019-10-30 08:51:57 | Controller ID: 0 Command timeout on PD: PD = -:-:5 No addtional sense information, CDB = 0x8a 0x00 0x00 0x00 0x00 0x02 0xd3 0x03 0xb9 0x00 0x00 0x00 0x00 0x80 0x00 0x00 , Sense = , Path = 0x4433221103000000 267 | 2019-10-30 08:51:57 | Controller ID: 0 Command timeout on PD: PD = -:-:5 No addtional sense information, CDB = 0x8a 0x00 0x00 0x00 0x00 0x02 0xd3 0x03 0xba 0x00 0x00 0x00 0x00 0x80 0x00 0x00 , Sense = , Path = 0x4433221103000000 268 | 2019-10-30 08:51:57 | Controller ID: 0 PD Reset: PD = -:-:5, Critical = 3, Path = 0x4433221103000000 267 | 2019-10-30 08:52:09 | Controller ID: 0 Command timeout on PD: PD = -:-:5 No addtional sense information, CDB = 0x8a 0x00 0x00 0x00 0x00 0x02 0xd3 0x03 0xbc 0x80 0x00 0x00 0x00 0x80 0x00 0x00 , Sense = , Path = 0x4433221103000000 268 | 2019-10-30 08:52:09 | Controller ID: 0 PD Reset: PD = -:-:5, Critical = 3, Path = 0x4433221103000000 113 | 2019-10-30 08:52:13 | Controller ID: 0 Unexpected sense: PD = -:-:5 Logical unit not ready, cause not reportable, CDB = 0x8a 0x00 0x00 0x00 0x00 0x02 0xd3 0x03 0xbc 0x80 0x00 0x00 0x00 0x80 0x00 0x00 , Sense = 0x70 0x00 0x02 0x00 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x00 0x04 0x00 0x00 0x00 0x00 0x00 113 | 2019-10-30 08:52:14 | Controller ID: 0 Unexpected sense: PD = -:-:5 Power on, reset, or bus device reset occurred, CDB = 0x1b 0x01 0x00 0x00 0x01 0x00 , Sense = 0x70 0x00 0x06 0x00 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x00 0x29 0x00 0x00 0x00 0x00 0x00 113 | 2019-10-30 08:52:15 | Controller ID: 0 Unexpected sense: PD = -:-:5 Power on, reset, or bus device reset occurred, CDB = 0x8a 0x00 0x00 0x00 0x00 0x02 0xd3 0x03 0xbc 0x80 0x00 0x00 0x00 0x80 0x00 0x00 , Sense = 0x70 0x00 0x06 0x00 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x00 0x29 0x00 0x00 0x00 0x00 0x00 267 | 2019-10-30 08:52:36 | Controller ID: 0 Command timeout on PD: PD = -:-:5 No addtional sense information, CDB = 0x1b 0x01 0x00 0x00 0x01 0x00 , Sense = , Path = 0x4433221103000000 268 | 2019-10-30 08:52:36 | Controller ID: 0 PD Reset: PD = -:-:5, Critical = 3, Path = 0x4433221103000000 87 | 2019-10-30 08:52:37 | Controller ID: 0 PD Error: -:-:5 ( Critical 240) 114 | 2019-10-30 08:52:37 | Controller ID: 0 State change: PD = -:-:5 Previous = Online Current = Failed 81 | 2019-10-30 08:52:37 | Controller ID: 0 State change on VD: 0 Previous = Optimal Current = Partially Degraded 250 | 2019-10-30 08:52:37 | Controller ID: 0 VD is now PARTIALLY DEGRADED VD 0 81 | 2019-10-30 08:52:37 | Controller ID: 0 State change on VD: 1 Previous = Optimal Current = Partially Degraded 250 | 2019-10-30 08:52:37 | Controller ID: 0 VD is now PARTIALLY DEGRADED VD 1 113 | 2019-10-30 08:52:37 | Controller ID: 0 Unexpected sense: PD = -:-:5 Power on, reset, or bus device reset occurred, CDB = 0x8a 0x00 0x00 0x00 0x00 0x02 0xd3 0x03 0xc2 0x00 0x00 0x00 0x00 0x80 0x00 0x00 , Sense = 0x70 0x00 0x06 0x00 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x00 0x29 0x00 0x00 0x00 0x00 0x00 114 | 2019-10-30 10:45:49 | Controller ID: 0 State change: PD = -:-:5 Previous = Failed Current = Online 81 | 2019-10-30 10:45:49 | Controller ID: 0 State change on VD: 0 Previous = Partially Degraded Current = Optimal 249 | 2019-10-30 10:45:49 | Controller ID: 0 VD is now OPTIMAL VD 0 81 | 2019-10-30 10:45:49 | Controller ID: 0 State change on VD: 1 Previous = Partially Degraded Current = Optimal 249 | 2019-10-30 10:45:49 | Controller ID: 0 VD is now OPTIMAL VD 1 113 | 2019-10-30 10:45:49 | Controller ID: 0 Unexpected sense: PD = -:-:5 Power on, reset, or bus device reset occurred, CDB = 0x8a 0x00 0x00 0x00 0x00 0x00 0x00 0x12 0x51 0x28 0x00 0x00 0x00 0x38 0x00 0x00 , Sense = 0x70 0x00 0x06 0x00 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x00 0x29 0x00 0x00 0x00 0x00 0x00 それらしい単語でググってみると、何やらファームの良く知られたちょっとしたバグ?らしく、無視しておkとのこと。タイムアウトでHDDが切り離されちゃってるのは気になるところだけど…。 サーバは遠隔地にあるため実物は確認できてないが、HDDそのものは動いてはいるようなので、オンラインにしてConsistency Checkを掛けた。今のところ問題なく動いているようだ。 なおパリティの再構成時間は、200GB(内22GB使用中)のVDで4分(196か所訂正)、54TB(内21.6TB使用中)のVDで17時間(11953か所訂正)だった。 参考サイト [SOLVED] MegaRaid Sense Errors - Server Hardware - Spiceworks With new MegaRAID firmware, error "Unexpected sense/- Invalid field in CDB" < Newer Posts 1 2 ... 15 16 17 18 19 20 21 ... 84 85 Older Posts > start.txt 最終更新: 2022-07-27 15:26by Decomo