クラウドでcppcryptfsを標準マウントすると長いファイル名のオプションが有効だとフォルダを開く時にすごく重くなる
これは長いファイル名オプションで作成したファイルの復号化にはgocryptfs.longname.xxx.nameというファイルが必要なためフォルダを開く際にこのファイルをダウンロードする必要があるためだ
このファイル自体は小さいのだがファイル数が多くなってくるとクラウドサービスによっては同時接続数や接続待ち時間などの制限がネックになり
結果としてフォルダを開く時間が長くなりIOエラー(タイムアウト)になりやすいのだと思う
フォルダを開くのに重くならないようにするには
①ファイル名を短くしてnameファイルを作らないようにする
②rclone側のマウントオプションでキャッシュの有効期限を長くする
この2択だと思うが①のファイル名を短くするはそもそもcppcryptfsの売りの一つでもある長いファイル名オプションが意味を成さなくなるので却下で
そうなると②だけどキャッシュの有効期限を長くすることで前述nameファイルが残る(DLし直さなくて済む)のでフォルダを開くのがスムーズになる
ただし弊害もあって特にpcloudのように --poll-interval オプションに対応してない場合は深刻
--poll-interval は決められた時間ごとにフォルダの更新状況を取得するオプション
これに対応してないとどうなるかというと
フォルダ内容の更新時間が --dir-cache-time に応じて決まるのでこの時間を長く設定してしまうとファイルを特定のフォルダにアップロードしても
更新時間が来るまでそのフォルダの内容が更新されずファイルが見つからないといった状況になる
逆に --dir-cache-time を短く設定すると頻繁にキャッシュタイムアウトとなりフォルダを開くたびに再度nameファイルをDLが行われるので結果フォルダを開くのが重くなるというジレンマ
つまり --dir-cache-time の設定は
頻繁にファイルをアップロードするなら短く
たまにしかアップロードしないなら長く設定する
いずれにしてもフォルダ内容が更新されたらキャッシュを破棄してからフォルダを開き直すため重くなるのは避けられない模様
※これは前述のように--poll-interval非対応のサービスの場合の話で対応している場合はまた違った使い心地になるのだろう
妥協案としてキャッシュ時間を長く設定してフォルダキャッシュを強制的に更新
rclone mount コマンドで --rc オプションを使用
rclone rc vfs/refresh dir=cpp recursive=true コマンドでリセット
ディレクトリのキャッシュファイルをフォルダが更新されたときにのみリセットするコマンドが有効である
このコマンド実行にはマウントオプションの設定が必要で以下は一例
rlocne mount pcloud: Y: -v ^
--vfs-cache-mode full ^
--vfs-cache-max-size 3G ^
--vfs-cache-max-age 720h ^
--vfs-read-chunk-size 64M ^
--vfs-read-chunk-size-limit 256M ^
--dir-cache-time 168h ^
--poll-interval 15s ^
--vfs-read-ahead 0 ^
--volname "pcloud" ^
--rc
※ --rc オプションを付けるとhttp経由でのコマンドを受け付けるようになる(受付先IPアドレスは localhost:5572)
以後 rclone rc コマンドでマウントドライブに対し様々な操作ができるようなる
ファイルをアップロードしフォルダの更新が必要になったら
rclone rc vfs/refresh dir=cpp recursive=true
で一旦リセットしcppcryptfsの標準マウントのフォルダを開き直す事でフォルダ内容の更新ができる
※cppcryptfsではnameファイルの中身が必要なため結局DLし直す必要がある
ただしキャッシュ時間を長くしてもフォルダ更新が必要になった際にすぐキャッシュを捨てて更新することができるようになるのでまあ一種の妥協案






コメントを残す