vault backup: 2026-10-14 20:24:34
This commit is contained in:
@@ -0,0 +1,325 @@
|
||||
# Гайд: Разшаривание 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-шар
|
||||
Reference in New Issue
Block a user