Files
knowledge-base/projects/niikn/groupfolders-migration.md
Claude Code 41f46e3ac2 НИИКН: восстановление 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>
2026-03-03 20:58:36 +00:00

216 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Миграция 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 работает во время копирования) |