147 lines
4.7 KiB
Markdown
147 lines
4.7 KiB
Markdown
|
|
# Инструкция по восстановлению удаленных файлов и защите от повторных удалений
|
|||
|
|
|
|||
|
|
## 📋 Что было сделано:
|
|||
|
|
|
|||
|
|
1. ✅ Создан скрипт для настройки Nextcloud (`fix_nextcloud_settings.php`)
|
|||
|
|
2. ✅ Создан скрипт для восстановления файлов (`restore_all_deleted_files.php`)
|
|||
|
|
3. ✅ Создан скрипт для регулярной индексации (`nextcloud_scan_files.sh`)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Порядок выполнения:
|
|||
|
|
|
|||
|
|
### Шаг 1: Настройка Nextcloud (защита от удалений)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /var/www/fastuser/data/www/crm.clientright.ru
|
|||
|
|
php fix_nextcloud_settings.php
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Что делает:**
|
|||
|
|
- Отключает `DeleteOrphanedItems` (главная причина удалений)
|
|||
|
|
- Включает `readonly` для External Storage
|
|||
|
|
- Увеличивает retention корзины до 365 дней
|
|||
|
|
- Создает скрипт для регулярной индексации
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Шаг 2: Восстановление файлов (сначала проверка)
|
|||
|
|
|
|||
|
|
**Сначала проверка (dry-run):**
|
|||
|
|
```bash
|
|||
|
|
php restore_all_deleted_files.php --dry-run
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Это покажет, сколько файлов будет восстановлено без реального восстановления.
|
|||
|
|
|
|||
|
|
**Ограничение количества (для теста):**
|
|||
|
|
```bash
|
|||
|
|
php restore_all_deleted_files.php --dry-run 100
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Восстановление всех файлов:**
|
|||
|
|
```bash
|
|||
|
|
php restore_all_deleted_files.php
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Восстановление с ограничением (для безопасности):**
|
|||
|
|
```bash
|
|||
|
|
php restore_all_deleted_files.php "" 1000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Восстановление только файлов проекта:**
|
|||
|
|
```bash
|
|||
|
|
php restore_all_deleted_files.php "" "" "crm2/CRM_Active_Files/Documents/Project/"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Шаг 3: Настройка регулярной индексации
|
|||
|
|
|
|||
|
|
**Добавить в crontab:**
|
|||
|
|
```bash
|
|||
|
|
crontab -e
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Добавить строку:**
|
|||
|
|
```
|
|||
|
|
0 */6 * * * /var/www/fastuser/data/www/crm.clientright.ru/nextcloud_scan_files.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Это будет сканировать файлы каждые 6 часов.
|
|||
|
|
|
|||
|
|
**Или сканировать только внешнее хранилище (быстрее):**
|
|||
|
|
Отредактируйте `nextcloud_scan_files.sh` и раскомментируйте строку:
|
|||
|
|
```bash
|
|||
|
|
docker exec -u www-data nextcloud-fresh php occ files:scan --path="/crm"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 Статистика удалений:
|
|||
|
|
|
|||
|
|
- **Всего delete markers:** ~25,200
|
|||
|
|
- **Пик удалений:** 1 ноября 2025, 09:00 утра (7,080 файлов)
|
|||
|
|
- **Причина:** DeleteOrphanedItems в Nextcloud
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚠️ ВАЖНО:
|
|||
|
|
|
|||
|
|
1. **Сначала настройте Nextcloud** (Шаг 1), чтобы предотвратить новые удаления
|
|||
|
|
2. **Проверьте dry-run** перед массовым восстановлением
|
|||
|
|
3. **Восстанавливайте постепенно** (по 1000-5000 файлов за раз)
|
|||
|
|
4. **Проверяйте логи** после восстановления
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 Проверка статуса:
|
|||
|
|
|
|||
|
|
**Проверить статус задач Nextcloud:**
|
|||
|
|
```bash
|
|||
|
|
docker exec -u www-data nextcloud-fresh php occ background-job:list
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Проверить настройки External Storage:**
|
|||
|
|
```bash
|
|||
|
|
docker exec -u www-data nextcloud-fresh php occ files_external:list
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Проверить retention корзины:**
|
|||
|
|
```bash
|
|||
|
|
docker exec -u www-data nextcloud-fresh php occ config:app:get files trashbin_retention_obligation
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Проверить логи восстановления:**
|
|||
|
|
```bash
|
|||
|
|
ls -lh /var/www/fastuser/data/www/crm.clientright.ru/restore_log_*.json
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🛡️ Защита от повторных удалений:
|
|||
|
|
|
|||
|
|
После выполнения всех шагов система будет защищена:
|
|||
|
|
|
|||
|
|
1. ✅ DeleteOrphanedItems отключен
|
|||
|
|
2. ✅ External Storage в режиме readonly
|
|||
|
|
3. ✅ Retention корзины увеличен до 365 дней
|
|||
|
|
4. ✅ Регулярная индексация файлов настроена
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 Логи:
|
|||
|
|
|
|||
|
|
- Логи восстановления: `restore_log_YYYY-MM-DD_HH-MM-SS.json`
|
|||
|
|
- Логи индексации: `/var/log/nextcloud_scan.log`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🆘 Если что-то пошло не так:
|
|||
|
|
|
|||
|
|
1. Проверьте логи восстановления
|
|||
|
|
2. Проверьте доступность Docker контейнера Nextcloud
|
|||
|
|
3. Проверьте права доступа к S3
|
|||
|
|
4. Проверьте логи Nextcloud: `docker logs nextcloud-fresh`
|
|||
|
|
|