はじめに
Linux版Dropboxがext4にしか対応しないというアナウンスが流れた。しかし、Dropboxのために今使ってるbtrfsを変えるのは癪だし、別でpartition切るのは空き作るのが辛かったり容量の管理が面倒くさい。そこで、loopbackで既存fs上にext4のファイルを作ってDropboxを動かす。タイトルはbtrfsだけど他でも流用可能。
ArchLinuxの場合で説明するが、特にArchLinux特有固有の話は無いと思われるので、他のLinuxでも問題なくできる筈である。
手順
元になるファイル作成
元になるファイルを作成する。ただし、ファイルシステムの都合上予め最大容量を決め打ちする必要がある。作り直すのは面倒くさいのでできるだけデカく作っておきたいが、無駄が多い。ので、0の羅列の場合は容量を省略できるスパースファイルとファイルシステムの透過的圧縮(使っているファイルシステムに依る。最新のext4やbtrfsは対応している)を併用する。
-
truncate -s 4G loop-dropbox
でスパースファイルを作る - 可能であれば
chattr +c loop-dropbox
でファイルに圧縮属性を付与 -
mkfs.ext4 loop-dropbox
でext4でフォーマット
マウント・コピー
最初全削除してloopbackファイルを直でマウントしたら全削除されたと判断されて全部吹き飛ばすミスをしたので(復元はしたが)、マウントしたらまずは全ファイルをrsyncする。
-
mount -o loop -t ext4 loop-dropbox Dropbox2
でマウント rsync -av Dropbox/ Dropbox2/
- dropboxを落とす
- Dropboxを削除
- Dropbox2をunmount
- Dropboxにマウント
- dropbox再起動
fstab設定
うまく動いたらmount設定をfstabに永続化しておく
/.../loop-dropbox /home/.../Dropbox ext4 loop 0 0
これでおしまい。
Thanks
大体この辺全部筆者がオリジナルで考えたかのように書いてるけど、@syuu1228 先生の技術協力によってできたものです。ありがとうございました。
btrfsの上に仮想でext4作れたりしませんかね
— ぽんこつ@本骨システム (@ponkotuy) 2018年8月31日
loopback mountなら一応出来るけれども…(なんか変な使い方になるなぁとは思う
— syuu1228 (@syuu1228) 2018年8月31日
スパースファイルもある程度有効だと思うけど、btrfsの圧縮を個別のファイルにかけられないかな…? chattr +c とかで出来るっぽいことが書いてある気がする(まぁ遅くはなるだろうが) https://t.co/gMmPAx3mzJ
— syuu1228 (@syuu1228) 2018年8月31日
余談
作者はDropboxやめてMEGAに移行したので今も動くかはわかりません! https://mega.nz/