2/27 (日)
[Linux] NILFS2 はディスクのブロックの一部がリークしているように見える
Permlink
Fedora 13 の NILFS2 を使っているが、ファイルの削除(unlink)するかトランケート(truncate)した時に、ブロックの一部をリークさせているようだ。
NILFS2 は B-Tree 形式のブロックマップでファイルを構成するデータブロックの管理をしているが、最初の 7 ブロック分までは i-node の中に直接データブロックのブロック番号を直接記録(DIRECT形式)して B-Tree 用のノードブロックを割り当てるのを節約している。 一つのファイルのブロックが 8 ブロックを越えると、最初のノードブロックが割り当てられる。 このノードブロックはブロックサイズが 4KB なら、255 個のデータブロックをポイントすることができる。 ファイルのデータブロックが 255 個を越えるとブロックマップはノードブロックを2段に重ねた構成になる。
逆に truncate でファイルサイズを縮小していくと、多段のブロックは元の戻って行く。 最後の1段の B-Tree は、ファイルが 4 ブロックから 3 ブロックに切り替わる時に DIRECT 形式へ戻り、ノードブロックを一切使わなくなる。
NILFS2 はこの多段の B-Tree の段数を減らす時と、最後に一つだけ残ったノードブロックを削除する時に、ブロックを漏らしているように見える。
NILFS2 はログ構造化ファイルシステムなので、ブロックを漏らしてもすぐに分からないのだが、ガーベージコレクションが動いて過去中のブロックを回収すると、上記で述べたノードブロックがファイルがファイルが削除されたにも関わらずいつまでも残ってしまう。 南無三。
2/13 (日)
デジタルオーディオプレイヤー
Permlink
iRiver iHP-120から乗り換えたいと思いながら幾星霜。 「デジタルオーディオプレイヤー(DAP)がかくあるべし」(2010年6月5日)という理想は胸にあるのだが、それに見合った製品は売っておらず。 どれも帯に短しタスキに長し。
- SONY ウォークマン
- SONY ウォークマンはハード的には理想に近いがソフト面が弱い。 NW-A850 はマスストレージクラスから登録した楽曲をフォルダ指定で再生できるが、プレイリストを作ることができない。 m3u ファイルなども使用不能。
- COWON
- COWON J3 はほぼ理想的な DSP だが、サブフォルダに置いた MP3 の再生が微妙。 COWON J3 Wiki FAQによるとサブフォルダの各階層に音楽ファイルを置いておかないと、それより下に探索しないらしい。そのため親フォルダに無音のダミー MP3 を置く必要があるそうな。
最近だと Android 搭載の DAP も増えている。 Android 搭載の場合、再生ソフトが気にいらいない場合でも、別の再生ソフトを探すか、最悪自分で作ることが可能だ。
今現在、発売中・発売予定の Android 搭載 DAP。 COWON D3 plenue と Zen Touch2 は横浜のヨドバシで実物を触ってきた。
- COWON D3 plenue (公式、GIGAZINE、Google Pad)
- 側面に再生・早送り・巻き戻しボタンがある。
デフォルトの音楽再生機能がフォルダ再生に対応している。 ただし COWON 特有の制限があるかも。
GPS はなし。
Android Market には接続できないらしい。 - CREATIVE ZEN Touch 2 (公式)
- 物理的な再生ボタンなし。
デフォルトの音楽再生機能がフォルダ再生に対応していない。
GPS付きのモデルがある。
Android Market は不明。 - パナソニック SV-MV100 (公式、GIGAZINE)
- 物理的な再生ボタンなし。
ワンセグ対応。
内蔵メモリは16GBまで。ただし SDXC 対応の SD カードがさせる。 - サムスン Galaxy S WiFi 5.0 (engadget 日本語版)
- 今のところレビュー記事等なし。
ただ soda さんもおっしゃるように登録できる mp3 ファイルやフォルダ数、プレイリストの制限が厳しいんですよね。ICレコーダーは音楽を聞くのがメインではないので仕方ない制限ですが。
2/10 (木)
[Food] つけ麺 維新@武蔵中原
Permlink
今週、武蔵中原駅の駅前にあったマグロ丼の店が閉店して、つけ麺がオープンした。 この位置の店は頻繁に交替するような気がする。
さっぱりしたつけ麺で、あびすけとかを食べ馴れるとかえって新鮮な味わい。
2/4 (金)
[Food] つけめんあびすけ@日吉 (公式)
Permlink
つけめんあびすけに IH 卓上ヒーターがついて、つけ汁を温められるようになった。 確かにつけ麺って、食べているうちにつけ汁がどんどん冷たくなっていくよね。
IH ヒーターに温められるように、陶器製の器(2007年5月20日の日記)から金属製の器へ変更された。 ただ器の材質を替えたことでかえって冷めやすくなり、ヒーターを使わないとすぐに冷たい汁に変わるなりよ。
器が変わるとなんだか別の食べ物をたべているような気がする。
2/2 (水)
[Linux] sparse file の穴を検出する方法
Permlink
疎なファイル(sparse file)とかholeのあるファイルの「穴」の位置を検出する方法を探しているのだが(2010年10月2日の日記)、Linux に限っては FIBMAP ioctl というのがあるのね。
A Smachkernel of Opinion の FIBMAP ioctl example - get the file system block number of a fileのブログを参考にして確認すると、疎なファイルの穴の部分にあたる論理ブロックは、FIBMAP ioctl を使うと物理ブロック 0 を指していると回答される。
ただし FIBMAP ioctl は穴があることをブロック単位でしか確認できないが、Linux 2.6.38 には FIEMAP ioctl という、ファイルの連続領域をエクステントで返すことができるようだ。 こちらを使うとより効率よく「穴」の位置を特定できるようだ。
追記:2/7
FIEMAP ioctl を使ってファイルのエクステントを取得するプログラムを書いてみた(fiemap.c)。 x86-64/Fedora 13 の ext3 ファイルシステム上のファイルは問題なく動作している。 少なくとも ext3 上では疎なファイルの穴も確認できる。
4KBブロックで1論理ブロック目と3論理ブロック目が物理ブロックに割り当てられ、2論理ブロック目が穴になっているファイルの場合は以下のように見える。
$ ./fiemap sparse-file.dump FILE: # of extents=2, flags=1 Extent: 0 logical= 0, phy= 41221619712, len= 4096, flags=1000 Extent: 1 logical= 8192, phy= 41221623808, len= 4096, flags=1001
エクステントのフラグの意味は以下のようになっている。
FIEMAP_EXTENT_LAST | 0x0001 | Last extent in file. |
FIEMAP_EXTENT_UNKNOWN | 0x0002 | Data location unknown. |
FIEMAP_EXTENT_DELALLOC | 0x0004 | Location still pending. Sets EXTENT_UNKNOWN. |
FIEMAP_EXTENT_ENCODED | 0x0008 | Data can not be read while fs is unmounted. |
FIEMAP_EXTENT_DATA_ENCRYPTED | 0x0080 | Data is encrypted by fs. Sets EXTENT_NO_BYPASS. |
FIEMAP_EXTENT_NOT_ALIGNED | 0x0100 | Extent offsets may not be block aligned. |
FIEMAP_EXTENT_DATA_INLINE | 0x0200 | Data mixed with metadata. Sets EXTENT_NOT_ALIGNED. |
FIEMAP_EXTENT_DATA_TAIL | 0x0400 | Multiple files in block. Sets EXTENT_NOT_ALIGNED. |
FIEMAP_EXTENT_UNWRITTEN | 0x0800 | Space allocated, but no data (i.e. zero). |
FIEMAP_EXTENT_MERGED | 0x1000 | File does not natively support extents. Result merged for efficiency. |
FIEMAP_EXTENT_SHARED | 0x2000 | Space shared with other files. |
FIBMAP ioctl は実行に root 権限を必要としたが、FIEMAP ioctl はユーザ権限で実行可能。 使い勝手は FIEMAP ioctl の方がよさそうだ。
追記:2012/4/28
Linux で疎なファイル(sparse file)を使うのページにまとめた。