docs(proxmox): cum se converteste un linked clone in full clone pe local-zfs

`qm move-disk <vmid> <disk> local-zfs --delete 1` esueaza intotdeauna pentru
zvol-uri: PVE respinge mutarea pe acelasi storage, iar conditia din
Qemu.pm:4688 e mereu adevarata fiindca numele volumului n-are sufix de format.
Nici storage-ul `local` nu e ruta de ocolire — n-are `images` in content.

Documentata metoda care functioneaza (zfs send/recv local + swap de volid),
asa cum a fost aplicata pe VM 303.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MoFGxftQw92PX4Sdkn94pv
This commit is contained in:
Marius
2026-08-11 00:57:29 +03:00
parent 318de18e15
commit f48120e46b

View File

@@ -107,6 +107,38 @@ rpool/data # ZFS pool pentru VM/LXC
/var/lib/vz/template/cache/ # LXC templates
```
### ⚠️ Linked clone → full clone: `qm move-disk` NU merge pe `local-zfs`
Un VM clonat din template rămâne **linked clone** (`zfs list -o name,origin` arată un
`origin`), iar template-ul sursă nu poate fi șters cât timp există. Metoda evidentă —
`qm move-disk <vmid> virtio0 local-zfs --delete 1`**eșuează întotdeauna**. PVE respinge
mutarea pe același storage (`/usr/share/perl5/PVE/API2/Qemu.pm:4688`):
```perl
die "you can't move to the same storage with same format\n"
if $oldstoreid eq $storeid && (!$format || !$oldfmt || $oldfmt eq $format);
```
Pentru zvol-uri `$oldfmt` e mereu `undef` (numele n-are sufix `.raw`), deci condiția e
adevărată indiferent de parametri. Nici storage-ul `local` nu e o rută de ocolire — are
`content iso,vztmpl,backup`, fără `images`.
**Ce funcționează** (aplicat pe VM 303 în 2026-08-11, ~8 min downtime pentru 64 GB): backup
`vzdump` întâi, apoi ștergerea snapshot-urilor VM-ului (blochează detașarea sursei), oprire
curată, și copie ZFS locală cu swap de volid în `/etc/pve/qemu-server/<vmid>.conf`:
```bash
zfs snapshot rpool/data/vm-303-disk-1@fullclone
zfs send rpool/data/vm-303-disk-1@fullclone | zfs recv rpool/data/vm-303-disk-2
zfs destroy rpool/data/vm-303-disk-2@fullclone
zfs destroy rpool/data/vm-303-disk-1@fullclone
zfs set refreservation=none rpool/data/vm-303-disk-2 # local-zfs e sparse 1
```
`zfs send` fără `-i` produce un flux complet, deci datasetul rezultat nu are `origin`.
În config, discul vechi se lasă ca `unusedN` — rollback prin swap invers, ~1 minut. Ambele
discuri trebuie tratate, inclusiv `efidisk0`.
## Comenzi Utile Proxmox
### Gestiune VM-uri