Nextcloudが Internal Server Error を返すようになって困った

NextcloudのWeb版にアクセスすると Internal Server Error が帰ってくるようになっていました．

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

別のユーザで試すとログイン画面は表示されて認証機能は動作します．しかしログイン後同じように Internal Server Error このときAndroid版アプリでは普通に利用できていそうです．

よくあるのがサポート対象外になったレガシーなアプリを導入すると同じような状態になることがあります．
しかし，前回利用できていたときと現在の間に特にディストリビューション, Nextcloud, Nextcloudアプリ共にアップデートはしていないはずです．

ログを確認するとhttpdのaccess/errorのlogは特に問題なさそう．
nextcloud.logでそれらしいのは file_put_contents failed でしょうか?

logはNextcloudの設定ファイルの config.php で確認できる．

$ grep log config/config.php
'log_type' => 'file',
'logfile' => '/var/log/nextcloud.log',
'loglevel' => 0,
$ tail -f /var/log/nextcloud.log | jq .

errorっぽいところ?

{
"reqId": "DVQsgBekfOCY3dvjYO6w",
"level": 3,
"time": "2021-01-18T14:59:53+00:00",
"remoteAddr": "180.131.110.140",
"user": "matoken",
"app": "core",
"method": "GET",
"url": "/index.php/apps/files/",
"message": {
"Exception": "OCP\\Files\\GenericFileException",
"Message": "file_put_contents failed",
"Code": 0,
"Trace": [
{

まずは手動でファイルとデータベースのバックアップを取っておきます．

バックアップ例

$ sudo -u www-data php /var/www/files.matoken.org/occ maintenance:mode --on (1)
$ sudo -u www-data tar cvf - ${NEXTCLOUD_PATH} | xz > ${BACKUP_PATH}/nextcloud-`date +%F_%T`.tar.xz (2)
$ sudo -u www-data tar cvf - ${NEXTCLOUD_DATA_PATH} | xz > ${BACKUP_PATH}/nextcloud-data-`date +%F_%T`.tar.xz (3)
$ mysqldump --opt --all-databases --events | xz > ${BACKUP_PATH}/nextcloud-`date +%F_%T`.sql.xz (4)
$ sudo -u www-data php /var/www/files.matoken.org/occ maintenance:mode --off (5)

1 | メンテナンスモードにする
2 | Nextcloud自体のバックアップ
3 | Nextcloudデータのバックアップ
4 | データベースのバックアップ
5 | メンテンスモードを終了

occ の maintenance:repair コマンドを試します．

$ sudo -u www-data php ${NEXTCLOUD_PATH}/occ maintenance:repair
- Repair MySQL collation
- All tables already have the correct collation -> nothing to do
- Repair mime types
: 以下略

コマンド終了後webを再読込するとエラーは解消されました． :)

しかしファイルの一覧が表示されません．最新ファイルは表示されるのでそのファイルを確認すると表示されます．

次に occ files:scan を試してみました．

$ sudo -u www-data php ${NEXTCLOUD_PATH}/occ files:scan --all
Starting scan for user 1 out of 7 (user1)
: ※省略
+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 20752 | 34164 | 00:04:33 |
+---------+-------+--------------+

これでは変わらなかったようです．多分必要なかった．

次に occ files:scan-app-data を試します．

$ sudo -u www-data php ${NEXTCLOUD_PATH}/occ files:scan-app-data
Scanning AppData for files

+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 84 | 97 | 00:00:01 |
+---------+-------+--------------+

これが当たりだったようで復活しました!

ログを見るとこの問題が発生している間も他のNextcloudアプリは動作していたようだし，Androidアプリ版ではファイルの自動アップロードも動いていたようなので恐らくNextcloud Web版の部分が壊れていたのではないかと思います．

しかし治ったのはいいけどなぜこれが起こったかが謎なのが気持ち悪いです……．

環境

$ sudo -u www-data php /var/www/files.matoken.org/occ -V
Nextcloud 20.0.5
$ dpkg-query -W php mariadb-server
mariadb-server 1:10.3.27-0+deb10u1