Nextcloudのトラブルシュート - ファイル管理情報を再構築する手順

2022-10-10
  • B!

Nextcloud

Nextcloudは格納しているファイル情報を全てDBで管理している。もしも、何らかの障害でファイル管理情報の再構築が必要な場合の手順を書いておく。
ストレージに保存している実ファイルの存在を再スキャンして、DBを再構築する。

プレビュー画像のみを再構築する場合

プレビュー画像を一度全部削除して再構築する手順。
data/appdata_xxxxxxxxxx/preview フォルダの中身を削除。※x_xxxxxxxxxxはインストール先の環境でランダムな文字列。

プレビューファイルのエントリー情報をDBから削除
$ mysql -u dbadmin -p
Password: *********
mysql> use nextcloud;

## プレビュー画像の枚数
mysql> SELECT COUNT(*) FROM oc_filecache WHERE path LIKE "appdata_xxxxxxxxx/preview/%";
+----------+
| COUNT(*) |
+----------+
|   606125 |
+----------+
1 row in set (0.45 sec)


## プレビュー画像のエントリーだけ削除
mysql> DELETE FROM oc_filecache WHERE path LIKE "appdata_xxxxxxxxx/preview/%”;
Query OK, 718612 rows affected (12 min 25.21 sec)

## ゴミファイルがあると、先に確認した枚数よりも多い行が削除対象となる。

ストレージ内のファイルエントリーを再構築

Nextcloudの画面にファイルが表示されなかったり、実ファイルがないのに画面に表示されている場合は次のような手順を使う。プレビュー画像は削除して再生成させる。

## 同じくMySQLで
mysql> DELETE FROM oc_filecache;

## シェルに戻り
% php ./occ files:scan —all -vvv
% php ./occ files:cleanup
もしもfiles:scanコマンドがファイルロックエラーを表示して作業ができない場合
## メンテモードに入る
% php ./occ maintenance:mode --on

## MySQLに入り、ファイルロック情報のエントリーを消す
mysql> use nextcloud;
mysql> delete from oc_file_locks where 1;

## メンテモード解除
% php ./occ maintenance:mode --off