Proxmox VEでVMやLXCを削除するとディスクごと削除される仕様になっている。ディスクを消さずにVMやLXCを削除し、後で構築orリストアしたLXCやVMにアタッチして使いたいと思うことがあったのでその時実施した手順をメモする。
「大容量のディスク」を作成しておりそのディスクだけバックアップ対象外にしている状況かつ、そのVM or LXCを「大容量のディスク」を保持しながら削除して、バックアップからリストアして保持していた「大容量のディスク」をリスト後のVM or LXCにアタッチしたいなどのシチュエーションが考えられる。
Web GUIのみではできない操作もあるためCLIも使う。というかわざわざスクショ貼るのが面倒なので基本的にここではCLIのコマンドをペタペタ貼っていく。
前提条件
私の利用環境に準拠しVMのディスクやLXCのマウントポイントとなるファイルシステムはいずれもZFSとする。
構成は以下図のような形でLXCやvmにディスクをアタッチしている状態。
LXC
LXCを削除するとrootfsやその他マウントポイントで利用しているファイルシステム消されてしまう。マウントポイントはもしかしたらバックアップから除外しつつも保持して既存のLXCは削除したいという時があるかもしれない。その場合は以下のように名前を変えてLXCを削除することでファイルシステムを保持することができる。
- 対象のLXCをバックアップ(マウントポイント除外)
- 対象のLXCのマウントポイントに利用しているホスト側のファイルシステムの名称を変更
- 対象のLXCを削除
- LXCをリストア
- LXCに名前を変えていたマウントポイントをマウントさせる
今回利用するLXCは以下のような構成。mp0はバックアップから除外している。rootfsはバックアップ対象外にすることができない。
arch: amd64
cores: 2
features: nesting=1
hostname: test-lxc
memory: 2048
mp0: data-pool:subvol-101-disk-0,mp=/share/data-pool,size=28000G
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=66:7A:D6:50:EE:1F,ip=dhcp,type=veth
ostype: debian
rootfs: os-pool:subvol-101-disk-0,size=16G
swap: 512
Code language: plaintext (plaintext)
対象のLXCをバックアップ(マウントポイント除外)
とりあえず対象のLXCをバックアップしておく。その際にリスト後にそのまま使いたいマウントポイントは除外する。
対象のLXCのマウントポイントに利用しているファイルシステムの名称をホスト側で変更
zfs listコマンドで確認すると現状以下のようなファイルシステムがある。
NAME USED AVAIL REFER MOUNTPOINT
data-pool/subvol-101-disk-0 4.99G 12.3T 4.99G /data-pool/subvol-101-disk-0
os-pool/subvol-101-disk-0 667M 15.3G 667M /os-pool/subvol-101-disk-0
Code language: plaintext (plaintext)
zfs renameコマンドで対象のファイルシステムの名前を変えておく
zfs rename data-pool/subvol-101-disk-0 data-pool/temp-subvol-101-disk-0
Code language: Bash (bash)
zfs renameにて名前が変わった事を確認する
NAME USED AVAIL REFER MOUNTPOINT
data-pool/temp-subvol-101-disk-0 4.99G 12.3T 4.99G /data-pool/temp-subvol-101-disk-0
os-pool/subvol-101-disk-0 667M 15.3G 667M /os-pool/subvol-101-disk-0
対象のLXCを削除
LXCを削除する
pct destroy 101
Code language: Bash (bash)
lxcをリストア
pct restore 101 pve-bk:backup/vzdump-lxc-101-2024_04_30-03_23_20.tar.zst -storage os-pool
Code language: Bash (bash)
リストアすると以下のようになった。
arch: amd64
cores: 2
features: nesting=1
hostname: test-lxc
memory: 2048
mp0: os-pool:subvol-101-disk-1,mp=/share/data-pool,size=28000G
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=66:7A:D6:50:EE:1F,ip=dhcp,type=veth
ostype: debian
rootfs: os-pool:subvol-101-disk-0,size=16G
swap: 512
Code language: plaintext (plaintext)
LXCをリストアすると構成に含まれていたバックアップから除外していたマウントポイントも一応作成される(バックアップしてないので中身は空)が、それは削除する。多分/etc/pve/lxcの中の設定ファイルを直接編集したあとにzfsのコマンド叩いてもいいけど、せっかくpctというLXCの設定を操作するためのコマンドが用意されてるのでコマンドでやっていく。
pct set 101 --delete mp0
pct set 101 --delete unused0
Code language: Bash (bash)
これは設定から削除されてるだけで、zfsのファイルシステムは残ってるのでそっちも消す。
LXCに名前を変えていたマウントポイントをマウントさせる
とりあえず名前を変えて退避させてたファイルシステムの名前をリストアしたLXCから参照するのに適した前に変更。ここはリストア時のvmidに応じて変えよう。変更したらpctコマンドでマウントする。
zfs rename data-pool/temp-subvol-101-disk-0 data-pool/subvol-101-disk-0
pct set 101 --mp0 volume=data-pool:subvol-101-disk-0,mp=/share/data-pool,size=28000G
Code language: Bash (bash)
VM
VMもLXCと同じくProxmoxVE上で削除すると使ってたディスクもろとも消される。先程と似たような手順でディスクを保持しながらVMを削除可能。efiディスクは大した容量じゃないので無視。
- 対象のVMをバックアップ
- 対象のVMで使っているzvolの名称を変更
- 対象のVMを削除
- VMをリストア
- VMに名前を変えていたzvolを割り当てる
今回利用するVMは以下のような構成。ディスクはすべてバックアップ対象外
agent: 1
bios: ovmf
boot: order=scsi0;ide2;net0
cores: 4
cpu: host
efidisk0: os-pool:vm-107-disk-1,efitype=4m,pre-enrolled-keys=1,size=1M
ide2: local:iso/bodhi-7.0.0-64.iso,media=cdrom,size=1260336K
machine: q35
memory: 4096
meta: creation-qemu=8.1.5,ctime=1713363308
name: test-vm
net0: virtio=BC:24:11:BA:9D:9F,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: os-pool:vm-107-disk-0,backup=0,iothread=1,size=32G,ssd=1
scsi1: data-pool:vm-107-disk-0,backup=0,iothread=1,size=64G
scsihw: virtio-scsi-single
smbios1: uuid=40c42dc7-9b5d-4742-a228-ea7eb65305a7
sockets: 1
vga: qxl
vmgenid: d28e3075-bd42-4f6d-b175-00633b6d184d
Code language: plaintext (plaintext)
対象のVMをバックアップ
VMの設定のみのバックアップなのですぐに終わった。
対象のVMで使っているzvolの名称を変更
以下2つのzvolの名前を変更
NAME USED AVAIL REFER MOUNTPOINT
data-pool/vm-107-disk-0 571M 12.4T 571M -
os-pool/vm-107-disk-0 4.03G 280G 4.03G -
Code language: plaintext (plaintext)
zfs renameで変える
zfs rename data-pool/vm-107-disk-0 data-pool/temp-vm-107-disk-0
zfs rename os-pool/vm-107-disk-0 os-pool/temp-vm-107-disk-0
変わったことを確認
NAME USED AVAIL REFER MOUNTPOINT
data-pool/temp-vm-107-disk-0 571M 12.4T 571M -
os-pool/temp-vm-107-disk-0 4.03G 280G 4.03G -
対象のVMを削除
qm destroy 107
Code language: Bash (bash)
VMをリストア
qmrestore pve-bk:backup/vzdump-qemu-107-2024_05_18-19_59_45.vma.zst 107
Code language: Bash (bash)
リストアすると以下のようになった。コメントアウトされてる箇所は、バックアップしなかったディスク。
#scsi0%3A os-pool%3Avm-107-disk-0,backup=0,iothread=1,size=32G,ssd=1
#scsi1%3A data-pool%3Avm-107-disk-0,backup=0,iothread=1,size=64G
agent: 1
bios: ovmf
boot: order=scsi0;ide2;net0
cores: 4
cpu: host
efidisk0: os-pool:vm-107-disk-0,efitype=4m,pre-enrolled-keys=1,size=1M
ide2: local:iso/bodhi-7.0.0-64.iso,media=cdrom,size=1260336K
machine: q35
memory: 4096
meta: creation-qemu=8.1.5,ctime=1713363308
name: test-vm
net0: virtio=BC:24:11:BA:9D:9F,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsihw: virtio-scsi-single
smbios1: uuid=40c42dc7-9b5d-4742-a228-ea7eb65305a7
sockets: 1
vga: qxl
vmgenid: 53de54f9-7285-4a44-9f72-3deb93513bb2
Code language: plaintext (plaintext)
VMに名前を変えていたzvolを割り当てる
データセットの名前をもとに戻す。ただ、そのままバックアップしたefiディスクがどうもリストアしたときにもとも使ってた名前で命名されてしまったようなので、os-poolに入れてたブートディスクは連番をずらすことにした。
zfs rename os-pool/temp-vm-107-disk-0 os-pool/vm-107-disk-1
zfs rename data-pool/temp-vm-107-disk-0 data-pool/vm-107-disk-0
vmの設定ファイルは以下のように修正。とりあえず記述されてる行となぜかコロンが%3Aに置き換わってるのを戻し、コメントアウトは解除する。たぶん記述してる行は戻す必要性はない。
agent: 1
bios: ovmf
boot: order=scsi0;ide2;net0
cores: 4
cpu: host
efidisk0: os-pool:vm-107-disk-0,efitype=4m,pre-enrolled-keys=1,size=1M
ide2: local:iso/bodhi-7.0.0-64.iso,media=cdrom,size=1260336K
machine: q35
memory: 4096
meta: creation-qemu=8.1.5,ctime=1713363308
name: test-vm
net0: virtio=BC:24:11:BA:9D:9F,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: os-pool:vm-107-disk-0,backup=0,iothread=1,size=32G,ssd=1
scsi1: data-pool:vm-107-disk-0,backup=0,iothread=1,size=64G
scsihw: virtio-scsi-single
smbios1: uuid=40c42dc7-9b5d-4742-a228-ea7eb65305a7
sockets: 1
vga: qxl
vmgenid: 53de54f9-7285-4a44-9f72-3deb93513bb2
Code language: plaintext (plaintext)
これで作業完了である。vmが正常に起動し、なかのファイルも確認できた。