hack のためのネタ帳, etc,,,

経緯

Linux で、フォルダ単位で暗号化したいなと思ったときに、encfs を使えば良いんだけど、LUKS 使うと鍵の管理に柔軟性が出るので、どうにか出来ないかというのが発端。
LUSK 自体は dd で適当なサイズのファイル作って loop device として扱えば問題ないんだけど、ファイルシステムのサイズを使用中の容量に応じてフレキシブルかつ自動的に伸縮してもらいたい。
そこで、sparse file を discard (trim) 対応の状態で loop device としてぶら下げられれば良いんじゃね?と思った。

で、やってみると、sparse file にしとけば、とりあえず growable にはなるので、使用中の容量に応じて sparse file が成長する、つまり thin provisioning 的な運用は可能。
ところが、loop device が以下のような状態なので trim を受け付けてくれず、sparse file の shrink が出来ない。
$ cat /sys/block/loop0/queue/discard_max_bytes
0

で、loop device をどうにかして discard 対応に出来んのん?って思いググったところ以下のような記事を見つけた。 Linux 3.2 の以下のパッチで loop device が discard 対応したんだそうな。 手順見ると、losetup した段階で何の細工もせずに loop0 が discard 対応してようにしか見えない。
しかし、うちの環境は Linux 3.2 以降なのにそうならないのでしばらく悩んだ。

原因

HDD 上に sparse file 置いて loop0 にぶら下げると discard 対応にならないんだけど、
discard 有効にした SSD 上の btrfs 上に sparse file 置いて、loop0 にぶら下げると、discard 対応になった。

と言うことで、どうも、sparse file が置いてある filesystem が discard 対応か否かがポイントっぽい雰囲気。

さて、データの倉庫として使うために HDD 上に置きたかったので、これでは解決になりそうにないのだが、どうしたものか?

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます