OSXでループバックデバイスっぽいことをする
OS Xではあまり馴染みがないかもしれませんが、ループバックデバイスっぽいことができます。
前提
今回入れたもの
- FUSE for OS X 2.8.2
- fuse-ext2 0.0.7
- e2fspros 1.42.13
- archivemount 0.8.3
ext4を内包するファイルを使ったループバック
OSXだとデフォルトでHFS(+)ですが、後からサイズ変更する方法がわからなかったので、資料があるext系のファイルシステムで試しました。 FUSE for OS Xは以下のサイトからインストーラをダウンロードしてインストールします。
途中、インストールするコンポーネントの選択画面が出ます。MacFUSE Compatibility Layerにチェックを入れます。
fuse-ext2も同様に以下のサイトからインストーラをダウンロードしてインストールします。
extを操作するためのコマンドラインツールをインストールします。
$ brew install e2fsprogs
適当なサイズの入れ物を作る。見ての通り小さすぎるとジャーナルできないらしい。 ブロックサイズやinodeの数は自動的に計算されますが、後から変更できないっぽいので、サイズやinode数は適宜調整します。 今回はとにかく作ったものです。
最初にext4のファイルシステムを内包した空のファイル(image.bin)を作ります。
$ cd <作業フォルダ, イメージ格納先> $ gtruncate -s 1MB image.bin $ <e2fsprosインストール先(/usr/local/Cellar/e2fspros/あたりなはず)>/sbin/mkfs.ext4 -F image.bin mke2fs 1.42.13 (17-May-2015) Filesystem too small for a journal Creating filesystem with 976 1k blocks and 128 inodes Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done
作ったファイルをマウントして使います。
$ mkdir <マウント先> $ fuse-ext2 -o rw+ image.bin <マウント先> $ ls volume lost+found
lost+foundは消しても良いはずです(ファイルシステムを作るときに見つかったデータとかだったと思う)。
もっとサイズが必要になったら拡張ができます。
$ umount <マウント先> $ <e2fsprogs>/sbin/resize2fs image.bin 50M resize2fs 1.42.13 (17-May-2015) Resizing the filesystem on image.bin to 51200 (1k) blocks. The filesystem on image.bin is now 51200 (1k) blocks long. $ fuse-ext2 -o rw+ image.bin <マウント先>
圧縮ファイルをマウントする
領域サイズを調整するのが面倒だし、普段使わないので多少スピードが遅くなっても容量を節約したい場合、archivemountを使うと、圧縮ファイルtar.gzをマウントできるようになります。書き換えもできます。
$ brew install homebrew/fuse/archivemount $ touch dummy $ tar czvf image.tar.gz dummy $ rm dummy $ archivemount image.tar.gz <マウント先>
使い終わったらアンマウントすると圧縮ファイルの内容が更新されます。
$ umount <マウント先>
リンク先にあるように、archivemountはアンマウント時に圧縮ファイルが2つできます。そのため十分なファイルサイズが必要になります。-o nobackupオプションでバックアップが自動削除されますが、一時的には2つ分の容量を消費するようです。