НИИКН: восстановление AIO, план миграции Groupfolders, запуск rsync

- NC AIO контейнеры восстановлены, Talk signaling работает
- Исправлена ссылка AIO auto-login (192.168.1.200:8080)
- Бот переименован в "НИИКН помощник", SSH доступ настроен
- Очищена корзина admin (2.2 TB), расширен диск ncdata до 4.4 TB
- Запущен rsync groupfolders VM100→VM108 (~2.8 TB, ~4ч)
- Добавлен полный план миграции с правами и ACL

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Claude Code
2026-03-03 20:58:36 +00:00
parent 02fb6328cc
commit 41f46e3ac2
2 changed files with 279 additions and 2 deletions

View File

@@ -0,0 +1,215 @@
# Миграция Groupfolders: VM 100 → VM 108
> **Дата:** 03.03.2026
> **Статус:** Подготовлено, ожидает увеличения диска
---
## Источник: VM 100 (Cloud-NIIKN, старый NC)
- IP: 192.168.1.245
- NC data: `/mnt/nc-data/` (4.1 TB диск sdb, занято 3.7 TB)
- SSH: root, ключ niikn-helper@clawdbot-1 (добавлен 03.03.2026)
- Groupfolders path: `/mnt/nc-data/__groupfolders/`
### Данные
| ID | Путь | Название | Размер |
|----|------|----------|--------|
| 1 | `__groupfolders/1/` | Общий ресурс | 1.5 TB |
| 2 | `__groupfolders/2/` | ГИКЭ_ВОКН_Москва | 1.2 TB |
| — | `__groupfolders/versions/` | Версии файлов | 84 GB |
| — | `__groupfolders/trash/` | Корзина | 7.6 GB |
| — | `__groupfolders/onlyoffice/` | OnlyOffice locks | 213 MB |
| **Итого** | | | **~2.8 TB** |
### Права (oc_group_folders_groups)
| Папка | Группа | Permissions | Расшифровка |
|-------|--------|-------------|-------------|
| 1 (Общий ресурс) | НИИКН | 23 | read, write, share |
| 1 (Общий ресурс) | admin | 31 | read, write, share, delete |
| 1 (Общий ресурс) | Редактирование | 31 | read, write, share, delete |
| 2 (ГИКЭ_ВОКН_Москва) | Фотофиюксация ВОКН Москва | 23 | read, write, share |
| 2 (ГИКЭ_ВОКН_Москва) | admin | 31 | read, write, share, delete |
| 2 (ГИКЭ_ВОКН_Москва) | test | 23 | read, write, share |
| 2 (ГИКЭ_ВОКН_Москва) | ДКН | 23 | read, write, share |
### Управление (oc_group_folders_manage)
| Папка | Тип | Управляющий |
|-------|-----|-------------|
| 1 | group | admin |
| 2 | group | admin |
### ACL (oc_group_folders_acl) — Advanced Permissions
| Папка/FileID | Тип | Пользователь | Mask | Permissions |
|--------------|-----|-------------|------|-------------|
| 523107 | user | ulyanova140@gmail.com | 31 | 31 (full) |
| 2171076 | user | maksimmaul@gmail.com | 0 | 0 (deny) |
| 3381694 | user | admin | 0 | 0 (deny) |
| 1227009 | user | ccpupt@mail.ru | 15 | 15 |
| 3684395 | user | aan@labexp.ru | 13 | 13 |
| 1345540 | user | op.shishova@yandex.ru | 31 | 31 (full) |
| 1345540 | user | 19761113@mail.ru | 31 | 31 (full) |
| 1345628 | user | 19761113@mail.ru | 31 | 31 (full) |
| 1345628 | user | op.shishova@yandex.ru | 31 | 31 (full) |
| 1345628 | user | admin | 31 | 31 (full) |
> **Примечание:** ACL привязаны к fileid, которые на новом NC будут другими. ACL нужно будет переназначить после `files:scan` по путям файлов.
### Настройки папок (oc_group_folders)
| folder_id | mount_point | quota | acl |
|-----------|-------------|-------|-----|
| 1 | Общий ресурс | -3 (unlimited) | 1 (enabled) |
| 2 | ГИКЭ_ВОКН_Москва | -4 (unlimited) | 1 (enabled) |
---
## Приёмник: VM 108 (Nextclaud-AIO, новый NC)
- IP: 192.168.1.200
- NC data: `/mnt/ncdata/` (sdb1, 3.9 TB, занято 3.1 TB, **свободно 626 GB**)
- Groupfolders app: **установлен** (v20.1.12)
- Группы: НИИКН, admin, Редактирование, Фотофиюксация ВОКН Москва, ДКН, test — **все есть**
- Текущие External Storage (ID 4, 5) нужно удалить перед миграцией
---
## План миграции
### Шаг 0: Увеличить диск
- Пользователь увеличивает `/mnt/ncdata` (sdb1) минимум на 3 TB
- После увеличения: `resize2fs /dev/sdb1`
### Шаг 1: Копирование данных (10-15 часов)
```bash
# На VM 108:
rsync -avP --info=progress2 \
root@192.168.1.245:/mnt/nc-data/__groupfolders/ \
/mnt/ncdata/data/__groupfolders/
# Исправить владельца
chown -R www-data:www-data /mnt/ncdata/data/__groupfolders/
```
### Шаг 2: Удалить External Storage
```bash
docker exec -u www-data nextcloud-aio-nextcloud php occ files_external:delete 4
docker exec -u www-data nextcloud-aio-nextcloud php occ files_external:delete 5
```
### Шаг 3: Создать Groupfolders
```bash
# Создать папки (ID будут 1 и 2 если первые)
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:create "Общий ресурс"
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:create "ГИКЭ_ВОКН_Москва"
# Назначить группы с правами
# Папка 1 — Общий ресурс
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 1 НИИКН write share
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 1 admin write share delete
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 1 Редактирование write share delete
# Папка 2 — ГИКЭ_ВОКН_Москва
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 2 "Фотофиюксация ВОКН Москва" write share
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 2 admin write share delete
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 2 test write share
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:group 2 ДКН write share
# Включить ACL
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:acl 1 true
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:acl 2 true
# Управление — admin
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:manage 1 group admin
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:manage 2 group admin
# Квоты unlimited
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:quota 1 unlimited
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:quota 2 unlimited
```
### Шаг 4: Сканирование файлов
```bash
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:scan 1
docker exec -u www-data nextcloud-aio-nextcloud php occ groupfolders:scan 2
```
### Шаг 5: Восстановить ACL по путям
ACL привязаны к fileid. После scan fileid будут другие. Ниже — маппинг путей для восстановления.
**Папка 1 (Общий ресурс):**
| Путь внутри папки | Пользователь | Mask | Permissions | Смысл |
|-------------------|-------------|------|-------------|-------|
| `Казань/ТОМ 2 УТВЕРЖДАЕМАЯ ЧАСТЬ ВЫВОДЫ` | maksimmaul@gmail.com | 0 | 0 | запрет |
| `.stfolder` | admin | 0 | 0 | запрет |
| `2024/Вологда_2024/Дополнительная фотофиксация (Интерьер)/12) 31. Ледник И.П,Дружининского из деревни Окуловской` | ccpupt@mail.ru | 15 | 15 | r/w/delete (no share) |
| `2025/Иркутск_2025/Выписки ЕГРН` | aan@labexp.ru | 13 | 13 | r/delete (no write/share) |
**Папка 2 (ГИКЭ_ВОКН_Москва):**
| Путь внутри папки | Пользователь | Mask | Permissions | Смысл |
|-------------------|-------------|------|-------------|-------|
| `Образцы актов` | op.shishova@yandex.ru | 31 | 31 | полный доступ |
| `Образцы актов` | 19761113@mail.ru | 31 | 31 | полный доступ |
| `/` (корень папки) | 19761113@mail.ru | 31 | 31 | полный доступ |
| `/` (корень папки) | op.shishova@yandex.ru | 31 | 31 | полный доступ |
| `/` (корень папки) | admin | 31 | 31 | полный доступ |
**Скрипт восстановления ACL** (выполнить после scan):
```bash
# Получить новые fileid по путям и вставить ACL
docker exec nextcloud-aio-database psql -U oc_nextcloud -d nextcloud_database -c "
-- ACL для папки 1 (Общий ресурс)
INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions)
SELECT fc.fileid, 'user', 'maksimmaul@gmail.com', 0, 0
FROM oc_filecache fc WHERE fc.path = '__groupfolders/1/Казань/ТОМ 2 УТВЕРЖДАЕМАЯ ЧАСТЬ ВЫВОДЫ';
INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions)
SELECT fc.fileid, 'user', 'ccpupt@mail.ru', 15, 15
FROM oc_filecache fc WHERE fc.path LIKE '__groupfolders/1/2024/Вологда_2024/Дополнительная фотофиксация%Ледник%';
INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions)
SELECT fc.fileid, 'user', 'aan@labexp.ru', 13, 13
FROM oc_filecache fc WHERE fc.path = '__groupfolders/1/2025/Иркутск_2025/Выписки ЕГРН';
-- ACL для папки 2 (ГИКЭ_ВОКН_Москва) — корень
INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions)
SELECT fc.fileid, 'user', '19761113@mail.ru', 31, 31
FROM oc_filecache fc WHERE fc.path = '__groupfolders/2';
INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions)
SELECT fc.fileid, 'user', 'op.shishova@yandex.ru', 31, 31
FROM oc_filecache fc WHERE fc.path = '__groupfolders/2';
INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions)
SELECT fc.fileid, 'user', 'admin', 31, 31
FROM oc_filecache fc WHERE fc.path = '__groupfolders/2';
-- ACL для папки 2 — Образцы актов
INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions)
SELECT fc.fileid, 'user', 'op.shishova@yandex.ru', 31, 31
FROM oc_filecache fc WHERE fc.path = '__groupfolders/2/Образцы актов';
INSERT INTO oc_group_folders_acl (fileid, mapping_type, mapping_id, mask, permissions)
SELECT fc.fileid, 'user', '19761113@mail.ru', 31, 31
FROM oc_filecache fc WHERE fc.path = '__groupfolders/2/Образцы актов';
"
```
---
## Оценки
| Параметр | Значение |
|----------|----------|
| Объём данных | ~2.8 TB |
| Нужно свободного места | ≥3 TB на ncdata |
| Время rsync | 10-15 часов |
| Время настройки | ~30 мин |
| Downtime NC | 0 (NC работает во время копирования) |