と言いつつもう既に色々破綻してるのだがそれはともかく。 単に新年の挨拶をしたくなかっただけと言います。
いかん。これでは mixi でやった謎めき系擬きの二の舞ではないか。 取り敢えず直近の TODO だけ書いとこう。
なんか他にも色々あったはずなんだけど……既に溢れてる……
かなり前の話だけれど。
kernel をあげたら Alsa の OSS エミュレーションがおかしくなったのか、 音が鳴らなくなってしまった。
bmp から OSS デバイスに直接出しても鳴らない。 でも Alsa Output plugin なら鳴る。 最初はそれで良いかなぁと思っていたのだけど、ESD を止めてしまうと gaim のチャイムや色んな音が鳴らなかったりするので意外と不便だ。
kernel を下げるのも何なので、ESD 直接 Alsa に 出力してくれないものかなと探ってみた。
結論としてESDに機能は無いのだけれど、 polypaudio を使うと出来る。 polypaudio は ESD の置き換えを狙ったサウンドサーバなのだが、 プラグインを使って複数のプロトコルや出力をサポートできる様になっている。
これを入れて解決……と思いきや。確かに音は鳴るんだが、もの凄くCPUを喰う。これは動的ロードをやめて、起動時に alsa モジュールを固定的に読む様にしたらかなり改善した。……が、今度は時々デーモンが落ちる。期待は出来るんだけどまだまだだなぁ。
知ってる人には当たり前なんだろうけど、取り敢えずメモ。
Linux の多くのファイルシステムでは sparse file と言うものをサポートしている。 「疎なファイル」とか「穴あきファイル」とか訳されるけど、データのない部分はディスクブロックを確保せず、ファイルシステム上のサイズと実際のディスク消費量が異なるファイルを作成する機能。
効能は色々あるけど、取り敢えずこれを使うとこんなアホな事が出来る。
sugi@samidare:~% df -h / Filesystem サイズ 使用 残り 使用% マウント位置 /dev/hda2 22G 19G 2.9G 87% / sugi@samidare:~% ls -lh sparse-file-test -rw-rw-r-- 1 sugi sugi 800G 2006-01-13 23:50 sparse-file-test
ファイルシステム的な話は@ITの記事 を、詳しい説明は 穴あきファイル (UNIX の部屋 - 68user's page) をそれぞれ読んで貰った方が早い。
で。これ、どうやって手軽に作ったもんかと思っていたのだけど、 単に dd で seek すればOKみたい。
dd of=sparse-file-test bs=1G seek=5 count=0
これで 5G のファイルが出来る。
上のページで perl の例が挙がっているので、 ruby でもやってみればこんな感じ。
ruby -e 'File.open("filename","w").truncate(5<<30)'
実は gdb や BerkeleyDB 等はこういうファイルを作るので、 気づかずにお世話になっていたりする。
あと使いたいケースと言えば、ファイルシステムのイメージを沢山作る時だろうか。具体的言えば、xen を使う時に便利。
実際にやってみよう。
さっきのファイルを ls で確認してみると、使っているのは5Mの様だ *1 (-s オプションを付けると実際サイズが左に表示される)。
sugi@samidare:~% ls -lsh sparse-file-test 5.0M -rw-rw-r-- 1 sugi sugi 5.0G 2006-01-13 23:41 sparse-file-test
この時点での物理ディスクの残りは以下の通り。
sugi@samidare:~% df -m / Filesystem 1M-ブロック 使用 使用可 使用% マウント位置 /dev/hda2 22045 18283 3762 83% /
ではファイルシステムを作ってみる。
sugi@samidare:~% mkfs.ext3 sparse-file-test mke2fs 1.39-WIP (31-Dec-2005) sparse-file-test is not a block special device. Proceed anyway? (y,n) y (略)
すると、書き込んだ管理ブロックの分しか容量が増加しない。
sugi@samidare:~% ls -lhs sparse-file-test 214M -rw-rw-r-- 1 sugi sugi 5.0G 2006-01-13 23:57 sparse-file-test sugi@samidare:~% df -m / Filesystem 1M-ブロック 使用 使用可 使用% マウント位置 /dev/hda2 22045 18492 3554 84% /
あとはマウントしてファイルを書き込んで行けば、その都度使った分だけ増えてゆく。
この sparse file をコピーする時に注意。 対応していないものを使うとサイズが膨れてしまう。 GNU cp は勝手に解釈してくれるが、 例えば rsync では -S オプションを付ける必要がある。
*1 この辺はファイルシステムごとに違う。例えば XFS や ext2 では0になる