Nextcloud

年末なのでNextcloudグループフォルダーのゴミ箱をgroupfolder:expireで大掃除しよう!

2022年もあと1ヶ月となってきましたね。
ついつい場所を取らないので削除するのを忘れてしまうデジタルのゴミ箱ですが、あなたのNextcloudのゴミ箱にも削除したファイルが溜まっていませんか?年末ということでNextcloudのゴミ箱も大掃除しましょう。

Nextcloudにはゴミ箱機能があります。そのゴミ箱にも2種類あり、個人領域用のゴミ箱とグループフォルダー用のゴミ箱とあります。

ゴミ箱アプリ名
個人領域用ゴミ箱Deleted files(デフォルトで有効)
グループフォルダー用ゴミ箱Group foldersを有効にすれば自動的に有効

今回は個人領域用のゴミ箱ではなくて、グループフォルダーのゴミ箱についてです。

■ 1. グループフォルダーの歴史

グループフォルダー機能は、2018年からある機能です。グループフォルダーは、これまでビジネスで使われてきたようなファイルサーバーの共有フォルダーのような機能を持っています。グループ内で共有する1つのフォルダーを用意することができ、複数人で読み書きできます。

グループフォルダー

これにより、これまでNextcloudでできなかったファイルサーバーの共有フォルダーのようなファイル共有ができるようになりました。

■ 2. グループフォルダーのゴミ箱

Windowsファイルサーバーを使った共有フォルダーを使うとボリュームシャドウコピーを使わない限りゴミ箱機能はありません。Nextcloudのようなブラウザー上で操作するファイル管理ツールでは、操作をミスすることもありますので、共有フォルダーのように間違えて削除してしまうと一発アウトな仕様はとても危険です。

そこで、グループフォルダーにはゴミ箱機能があります。グループフォルダー内のファイルを削除するとゴミ箱に入り、操作ミスの場合には元に戻すことが可能です。

■ 3. グループフォルダーのゴミ箱は自動削除じゃなかった(過去形)

しかし、このゴミ箱のファイルは削除されない限り減ることがありませんでした。Windowsのエクスプローラーのゴミ箱も削除しない限り、ゴミ箱内のファイルが削除されることはありません。

そういう意味では、自動削除されない挙動はあながち悪いわけではありません。しかし、利用者がゴミ箱を意識してない場合や知らない場合にはファイルが残り続けて、ディスクを圧迫することなります。

しかし、グループフォルダーのゴミ箱の自動削除は長い間実装されておらず、コミュニティーでも待望されていました。

■ 4. ゴミ箱の自動が実装されました

2021年11月のNextcloud 23でようやく実装されました。

しかし、この実装にはバグがあり ?Nextcloud 24で修正されました。

Nextcloud 24でゴミ箱の自動削除がちゃんと動くようになりました。
なんと4年越しです。

■ 5. ゴミ箱のファイル自動削除を使う

ようやく実装されたゴミ箱のファイル自動削除ですが、実はデフォルトでは実行されません。
なんで?という感じなのですが、現状の実装ではそうなっています。

5-1. コマンドを確認

公式ドキュメントを確認しましょう。以下のURLからコマンドの説明を見ることができます。

nextcloud/groupfolders: ??‍?‍?‍? Admin-configured folders shared by everyone in a group.

https://github.com/nextcloud/groupfolders#command-line-configuration-via-occ

occコマンドのサブコマンドでgroupfolders:expireを指定します。
helpを見てみます。オプションは特にないようです

$ sudo -u nginx php /var/www/html/nextcloud/occ groupfolder:expire -h
Description:
  Trigger expiry of versions and trashbin for files stored in group folders

Usage:
  groupfolders:expire [options]

Options:
      --output[=OUTPUT]  Output format (plain, json or json_pretty, default is plain) [default: "plain"]
  -h, --help             Display this help message
  -q, --quiet            Do not output any message
  -V, --version          Display this application version
      --ansi             Force ANSI output
      --no-ansi          Disable ANSI output
  -n, --no-interaction   Do not ask any interactive question
      --no-warnings      Skip global warnings, show command output only
  -v|vv|vvv, --verbose   Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

5-2. 自動的に実行するようにする

弊社の検証で以下の作業はNextcloudのジョブで自動的に実行されるのが確認されましたので不要となります(2022/12/13 追記)

自動的には実行されませんので、cronで実行するようにします。
今回は、nextcloud_expire_groupfolder-trash というファイル名でcronファイルを作成します
(2022/12/13 削除)

$ sudo vi /etc/cron.d/nextcloud_expire_groupfolder-trash(2022/12/13 削除)

ファイル内には以下のように記載しました。
毎日朝3時15分にグループフォルダーの自動削除を実行します。
PHPの実行ユーザーがnginxなのでnginxで実行しています
(2022/12/13 削除)

# expire Groupfolder trash
15 3 * * * nginx php /var/www/html/nextcloud/occ groupfolder:expire(2022/12/13 削除)

5-3. ゴミ箱の削除の閾値を調整する

これで削除されるようになった!のは間違いないのですが、削除されていないように見える時があります。
これはグループフォルダーのゴミ箱のファイル削除が、一般ユーザーのゴミ箱の削除のポリシーと同じルールで削除されるためです。ルール設定については以下のURLを後確認ください。

Deleted Items (trash bin) — Nextcloud latest Administration Manual latest documentation https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/trashbin_configuration.html

ここでは設定の詳細な説明はしませんが、90日以上経過した古いファイルを自動的に削除するにはNextcloudのconfig.phpへ以下のように設定します。

'trashbin_retention_obligation' => 'auto, 90',  

6. 実際に設定してみた結果

とある私が管理しているサーバーで実際に設定してみました。
マスクしすぎでよく分からない画像ですが、65GBあったゴミ箱ファイルが62MBまで減りました。