start

Emacsのウィンドウ自動分割機能を抑制する

Emacsのウィンドウは、2つに縦分割(C-x 3を1回)した状態で使うのがデフォな私。 編集中のバッファで補完機能を使うと、候補がもう一方のバッファに現れ、入力が終われば消えて元のバッファの状態に戻るので実に使い勝手が良かった。

ところが、フォントサイズを小さくしたら、片方のバッファを更に横分割する形で候補ウィンドウが出るようになってしまった。 つまり、[ | ] の右バッファで補完呼び出しすると [-| ] な感じに分割されてしまう。そして最悪な事に横分割された左バッファは元に戻らない!これは具合がよろしくないので、自動横分割を抑制することにした。

init.elに以下の1文を付け加える。

(setq split-height-threshold nil)

heightをwidthにすれば、縦分割の抑制になる。

Emacs 23.3.1で動作する事を確認。

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

  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo