Files
wikipedia/HomeLab/guide-nfs-omv-pve-pbs.md
T

325 lines
12 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.
# Гайд: Разшаривание NFS на OMV и подключение к PVE + PBS
> Инфраструктура: OMV 8 (192.168.1.73), Proxmox VE, Proxmox Backup Server (отдельная VM/CT)
---
## 1. Настройка NFS-шары на OMV
### 1.1. Через веб-интерфейс
**Services → NFS → Settings**
- [x] Enable NFS v4
- [x] Enable async (повышает производительность)
- Порт: 2049 (по умолчанию)
- Apply
**Services → NFS → Shares → Add**
| Поле | Значение |
|------|---------|
| Shared folder | `/путь/к/шаре` (создать заранее через Storage → Shared Folders) |
| Client | `192.168.1.0/24` — вся локальная сеть |
| Options | `rw,subtree_check,no_root_squash` |
> **`no_root_squash` критически важен для LXC**: без него клиентский root внутри контейнера будет преобразован в nobody и не сможет писать в шару.
**Применить**: кнопка `Apply` (галочка) вверху.
### 1.2. Через CLI — проверка
```bash
# Убедиться, что NFS запущен
systemctl status nfs-server
# Просмотреть экспорты
showmount -e localhost
# Или файл конфигурации
cat /etc/exports
# Пример содержимого:
# /srv/mergerfs/pool/backup 192.168.1.0/24(rw,subtree_check,no_root_squash,sync)
```
> **Важно**: после каждого Apply в веб-UI OMV переписывает `/etc/exports`. Ручные правки там не переживают следующего Apply.
---
## 2. Подключение NFS к PVE и проброс в LXC
### 2.1. Создание PVE Storage для NFS
**Datacenter → Storage → Add → NFS**
| Поле | Значение |
|------|---------|
| ID | `nfs-omv` (произвольное имя) |
| Server | `192.168.1.73` |
| Export | Путь из `/etc/exports` на OMV (например `/export/backup`) |
| Content | Выбрать, для чего это хранилище: `Container template`, `ISO image`, `VZDump backup file`, `Container`, `Snippets` |
**Через CLI** (альтернатива):
```bash
pvesm add nfs nfs-omv --server 192.168.1.73 --path /mnt/pve/nfs-omv --export /export/backup
```
**Проверка**:
```bash
pvesm status | grep nfs-omv
# Должно показать storage nfs-omv online
```
> **Ограничение**: PVE NFS storage не позволяет пробросить NFS-шару напрямую в LXC как bind mount. Для LXC нужен ручной mount на **хосте** PVE, потом `mp0` проброс.
---
### 2.2. Монтирование NFS на хосте PVE (для LXC)
Создаём точку монтирования на **хосте Proxmox**:
```bash
# Создать директорию
mkdir -p /mnt/nfs-omv-backup
# Монтировать (проверка)
mount -t nfs 192.168.1.73:/export/backup /mnt/nfs-omv-backup -o rw,vers=4,hard,timeo=600,rsize=1048576,wsize=1048576,no_root_squash
# Проверить
ls -la /mnt/nfs-omv-backup
df -h /mnt/nfs-omv-backup
```
> **Варианты опций**:
> - `vers=4` — NFSv4 (безопаснее, быстрее)
> - `vers=3` — NFSv3 (если v4 не работает)
> - `hard` — процессы ждут восстановления соединения (vs `soft` — таймаут с ошибкой)
> - `no_root_squash` — root на LXC может писать как root
> - `rsize,wsize=1048576` — максимальный размер блока (1 МБ) для производительности
Если шару надо использовать как хранилище **CT templates** или **VZDump backup**, лучше сначала смонтировать, потом добавить через `pvesm add dir`:
```bash
pvesm add dir nfs-omv-lxc --path /mnt/nfs-omv-backup --content vztmpl,backup,snippets
```
#### 2.2.1. Автомонтирование (fstab)
Добавить в `/etc/fstab` на **хосте PVE**:
```bash
# OMV NFS share — для проброса в LXC
192.168.1.73:/export/backup /mnt/nfs-omv-backup nfs4 rw,hard,timeo=600,rsize=1048576,wsize=1048576,_netdev 0 0
```
Проверка автомонтирования:
```bash
umount /mnt/nfs-omv-backup
mount -a
df -h | grep nfs
```
> **`_netdev`** — система не пытается монтировать NFS до поднятия сети.
---
### 2.3. Проброс NFS-шары в LXC контейнер
Редактировать конфиг контейнера `/etc/pve/lxc/<CT_ID>.conf`:
```bash
# Синтаксис: mp0: /путь/на/хосте,mp=/путь/в/LXC
mp0: /mnt/nfs-omv-backup,mp=/mnt/backup
```
**Через CLI**:
```bash
pct set <CT_ID> -mp0 /mnt/nfs-omv-backup,mp=/mnt/backup
```
**В веб-интерфейсе PVE**: выбрать контейнер → Resources → Add → Mount Point.
**Проверка внутри LXC**:
```bash
pct enter <CT_ID>
ls -la /mnt/backup
touch /mnt/backup/test-root && rm /mnt/backup/test-root
```
> Если `touch` выдаёт `Permission denied` — на OMV включено `root_squash` (сменить на `no_root_squash`).
---
### 2.4. Полный пример: LXC с backup-шара
```bash
# Хост PVE: монтируем NFS
mkdir -p /mnt/nfs-omv-backup
echo '192.168.1.73:/export/backup /mnt/nfs-omv-backup nfs4 rw,hard,timeo=600,_netdev 0 0' >> /etc/fstab
mount -a
# Пробрасываем в LXC (ID = 200)
pct set 200 -mp0 /mnt/nfs-omv-backup,mp=/mnt/backup
# Внутри LXC: проверяем
pct enter 200
df -h | grep /mnt/backup
```
---
## 3. Подключение NFS к PBS (Proxmox Backup Server)
### 3.1. Вариант A: Через веб-интерфейс PBS
**Server → Storage → Add → NFS**
| Поле | Значение |
|------|---------|
| Server | `192.168.1.73` (OMV) |
| Export | `/export/backup` или путь из OMV |
| Content | `backup` (основное) |
| Node | выбрать текущую ноду PBS |
| Enable | [x] |
**Важно для NFS на PBS:**
- PBS хранит данные в собственной структуре (`.chunk` +datastore). **Не надо** указывать уже существующую директорию с файлами — PBS создаст свою иерархию.
- NFS-шара НЕ может одновременно быть datastore PBS **и** использоваться для чего-то другого (в PBS своя структура хранения).
### 3.2. Вариант B: Через CLI на PBS
```bash
pvesm add nfs pbs-nfs-omv \
--server 192.168.1.73 \
--export /export/pbs-datastore \
--content backup
```
**Проверка:**
```bash
pvesm status | grep pbs-nfs-omv
# Должно показать status: available
```
### 3.3. Настройка бэкапа на NFS datastore
После добавления storage в PBS:
1. **В PVE**: Datacenter → Backup → Add
- Storage: выбрать `pbs-nfs-omv` (имя storage в PBS)
- Schedule: по необходимости
- Selection Mode: Include/Exclude
- Compression: ZSTD (рекомендуется)
- Encryption: по желанию
- Enable: [x]
2. **Или ручной бэкап через CLI на PVE**:
```bash
# Полный бэкап VM 100 в PBS-storage
vzdump 100 --mode snapshot --compress zstd --storage pbs-nfs-omv
# Или с указанием PBS напрямую
proxmox-backup-client backup \
--backup-id "vm-100" \
--backup-type "qemu" \
--repository 192.168.1.73:datastore:pbs-nfs-omv
```
### 3.4. Особенности NFS c PBS
| Аспект | Комментарий |
|--------|------------|
| **Производительность** | NFS добавляет latency — для PBS лучше локальный диск (ZFS/SATA SSD) |
| **Надёжность** | `soft,timeo=600` на PBS клиенте — при временной потере NFS бэкап упадёт с ошибкой, а не зависнет (`hard`) |
| **GC (Garbage Collection)** | PBS периодически чистит expired backup snapshots. Убедиться, что NFS шара смонтирована **с опцией `rw`** |
| **Verification** | PBS verifying jobs будут читать данные бэкапов — NFS latency замедлит. Нормально для периодических verify |
| **Multi-node access** | PBS поддерживает кластер — NFS datastore доступен всем нодам |
**Рекомендуемый fstab на PBS** (с `soft` для бэкапов):
```bash
192.168.1.73:/export/pbs-datastore /mnt/datastore nfs4 soft,timeo=600,retrans=2,rsize=1048576,wsize=1048576,_netdev 0 0
```
---
## 4. Проверка работоспособности
### 4.1. Доступность NFS
```bash
# С любого узла (PVE, PBS, LXC)
showmount -e 192.168.1.73
# Должен показать:
# Export list for 192.168.1.73:
# /export/backup 192.168.1.0/24
```
### 4.2. Монтирование
```bash
# На PVE хосте
mount | grep nfs
df -h | grep nfs
```
### 4.3. Проброс в LXC
```bash
pct enter <CT_ID>
df -h | grep /mnt/backup # Должна быть видна шара
touch /mnt/backup/test && rm /mnt/backup/test # root должен писать
```
### 4.4. Бэкап через PBS
```bash
# В PVE сделать пробный бэкап на PBS storage
vzdump <VM_ID> --mode snapshot --compress zstd --storage pbs-nfs-omv
# Убедиться, что exit code = 0
```
---
## 5. Типовые ошибки и решения
| Проблема | Причина | Решение |
|----------|---------|---------|
| `mount.nfs: access denied by server` | IP клиента не в списке Client NFS шары | Проверить OMV NFS Share → Client |
| `Permission denied` при записи из LXC | `root_squash` на OMV | Включить `no_root_squash` в Options NFS шары |
| LXC не стартует с mp0 | Путь на хосте не смонтирован | `mount -a`, проверить `fstab` |
| PBS: datastore недоступен | NFS шара упала | `systemctl restart proxmox-backup` |
| NFS mount зависает (`hung` | Потеря сети, опция `hard` | `umount -f /mnt/nfs-...` или `soft` опция |
| LXC: mount inside container readonly | LXC не имеет `privileged: 1` | Использовать привилегированный контейнер или настроить device cgroup |
---
## 6. Сводная схема
```
OMV (192.168.1.73)
├── NFS export: /export/backup (no_root_squash, rw)
│
├── PVE host
│ ├── mount /mnt/nfs-omv-backup
│ ├── pvesm dir → templates/snippets
│ └── mp0 проброс → LXC контейнер /mnt/backup
│
├── PBS node
│ ├── mount /mnt/datastore (export: /export/pbs-datastore)
│ ├── pvesm add nfs pbs-nfs-omv
│ └── datastore для backup/verify/GC
│
└── Другие клиенты (RPi5, VM)
└── mount -t nfs 192.168.1.73:/export/backup /mnt/shared
```
## 7. Ограничения и рекомендации
- **NFS → PBS**: для продакшена используйте локальные SSD/NVMe, NFS добавляет latency и риск потери связи во время бэкапа
- **no_root_squash**: безопасно только в доверенной подсети (192.168.1.0/24)
- **Автомонтирование**: `_netdev` обязателен, иначе система может зависнуть при загрузке до поднятия сети
- **PBS datastore**: выделите отдельную NFS-шару для PBS — не смешивайте с общими файлами
- **Бэкап конфига OMV**: `omv-confbackup` сохраняет настройки NFS-шар