ソースの表示以前のリビジョンバックリンク全て展開する/折り畳む文書の先頭へ Share via Share via... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer Reddit Teams最近の変更Send via e-Mail印刷パーマリンク × FreeBSD 8.2-R + Marvell SATA + AHCI + ZFSはヤバいかも? この記事は嘘、大げさ、紛らわしい情報を含んでいる可能性が多分にあります。 先日遭遇したZFSのチェックサムエラー、どうもFreeBSD 8.2-RELEASEとMarvellのSATAチップの組み合わせがヤバそうな気がする。 こんな情報も発見 → ahci(4) + zfs chksum error with Marvell SATA controller チップはちょっと違うが(うちは88SE9128、投稿は88SE9172)、8.2-RでAHCIでZFSでチェックサムエラーというのは、まさにうちと同症状。 投稿者の方に連絡を取ってみたところ、この組み合わせでもFSがUFSだと問題がなく、またSATAコントローラがIntel/AMDのものだとZFSでも問題がないとのこと。うーん、様々な要因が複合的に絡み合ってバグってるぽいなぁ……。 一方で気になるのは、この現象の報告が殆ど無い事。探し方が悪い可能性は否めないが、まとまった情報は↑の投稿くらいしかヒットしない。いやマジで。Marvellチップなんて、SATA、とりわけSATA 3.0ではかなりメジャーなチップな訳で、同症状の人がもうちょい居てもおかしくないと思うのに。 とりあえず、SATAコンを88SE9123、SATAケーブルも3.0対応を謳いシールドもしっかりしてそうなものに替え、FreeBSD 9-BETA 3で環境を再構築した。 今のところチェックサムエラーは出ていない。もっとも、まだ1週間しか経ってないので今後発生する可能性は大いにある。 現象の原因を未確定の状態で不確かな情報を流すのは躊躇われるが、FS絡みの不具合は遭遇した時の精神ダメージが半端ないため、注意喚起という意味で流したいと思う。8.2-Rでは、AHCIを有効にするとMarvellのSATAコン経由でZFS Bootが出来なくなるなど、不安定な点があるのは事実なので。 まとめ FreeBSD 8.2-RELEASE、MarvellのSATAコントローラ、AHCI、ZFSの組み合わせでチェックサムエラーが発生するっぽい。 ZFSでミラーリング構成していても全く同一のブロックでエラーになっているのか、修復は不可能。 エラー数は、(プール全体のエラー数)× 2 =(構成HDD1台毎のエラー数)という関係になるっぽい(多少ふらつきがある場合がある)。 cp: Input/output errorを無理やりコピーする UNIX系のOSでファイルコピーをした際cp: Input/output errorが発生することがマレにある。 ストレージの不具合や突然の電源断でファイルシステムに不整合が発生し、データの読み書きに失敗した場合に発生するエラーである。これが発生した時点コピー処理は打ち切られ、残りのデータは一切コピーされなくなってしまう。 たとえファイルの完全復元が難しいと分かってはいても、吸えるデータは可能な限り吸っておきたいのが人情というもの。残りの正常かもしれないデータをみすみす棄ててしまうのは勿体ない。動画や音声なんかだと壊れたブロックの前後が欠落するだけで、全体としてみれば実用上問題ない事が殆どだし。 そんな時はcpioコマンドで、次のようにすると無理やりコピーができる。 find . -depth -print0 | cpio --null -pvd dstdir 本来の用途はファイルストリームを単一のファイルにアーカイブする事らしいんだけど、理屈はどうあれInput/output errorに負けずにディレクトリを丸々コピー出来る。 ZFSでチェックサムエラー発生! zpool statusしてみたらチェックサムエラーが発生していた。 pool: zroot state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scan: none requested config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 1 mirror-0 ONLINE 0 0 2 gpt/boot0a ONLINE 0 0 2 gpt/boot0b ONLINE 0 0 2 errors: 3 data errors, use '-v' for a list zpool scrub掛けて待つ事40分。改めてzpool status。 pool: zroot state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scan: scrub repaired 0 in 0h38m with 24 errors on Fri Oct 7 23:44:36 2011 config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 25 mirror-0 ONLINE 0 0 50 gpt/boot0a ONLINE 0 0 50 gpt/boot0b ONLINE 0 0 50 errors: 24 data errors, use '-v' for a list ちょwwwwwwおまwwwwwwwエラー増えとるwwwwww 何かの間違いに違いない、と淡い期待を抱きつつ再びscrub&status。 pool: zroot state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scan: scrub repaired 0 in 0h38m with 24 errors on Sat Oct 8 00:25:46 2011 config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 49 mirror-0 ONLINE 0 0 98 gpt/boot0a ONLINE 0 0 98 gpt/boot0b ONLINE 0 0 98 errors: 24 data errors, use '-v' for a list 更に増えとるorz しかも「修復出来なかったファイルリスト」みたいなのが続けて表示されてるorz これはどうしたものか・・・。 MinGW+OpenGL+GLUTで毎回ハマること $ gcc -lfreeglut -lglu32 -lopengl32 main.c main.o:main.c:(.text+0x1c): undefined reference to `_imp____glutInitWithExit@12' main.o:main.c:(.text+0x3e): undefined reference to `_imp____glutCreateWindowWithExit@8' main.o:main.c:(.text+0x60): undefined reference to `_imp____glutCreateMenuWithExit@8' main.o:main.c:(.text+0xa0): undefined reference to `_imp__glutInitDisplayMode@4' main.o:main.c:(.text+0xb9): undefined reference to `_imp__glutInitWindowSize@8' main.o:main.c:(.text+0xd2): undefined reference to `_imp__glutInitWindowPosition@8' main.o:main.c:(.text+0xf8): undefined reference to `_imp__glutDisplayFunc@4' main.o:main.c:(.text+0x109): undefined reference to `_imp__glutReshapeFunc@4' main.o:main.c:(.text+0x113): undefined reference to `_imp__glutMainLoop@0' main.o:main.c:(.text+0x13e): undefined reference to `glClear@4' (以下略) 大量のリンクエラーが出て(・3・)あるぇ~?となる。 解決方法・・・というか正しくは↓のように、コンパイル対象のソースを-lオプションより前に持ってくるである。 $ gcc main.c -lfreeglut -lglu32 -lopengl32 どういうわけか、この罠だけは毎度ハマっては、ライブラリを入れ替えてみたり小手先のマクロを定義してみたりして時間を無駄にしてしまうorz ExtAudioFileは重くなかった 前のエントリで発生していた音飛び問題が解決。 原因はインタリーブのデータを非インタリーブに変換する処理が間に合ってなかった模様。 この処理はNSFの再生でも行われてるし、その程度で処理落ちするか?って気もするが、全てインタリーブで処理するようにしたら奇麗サッパリ解決した。 疑ってごめんね、ExtAudioFileたん。 < Newer Posts 1 2 ... 64 65 66 67 68 69 70 ... 83 84 Older Posts > start.txt 最終更新: 2022-07-27 15:26by Decomo