1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Proxmox で LVM ストレージをインポートして仮想マシンを復旧してみた

Last updated at Posted at 2025-02-11

Proxmox で旧 SSD の仮想マシンを移行してみた

はじめに

Proxmox の新しい SSD をセットアップしたので、古い SSD に入っている仮想マシンをそのまま使えるように移行してみました。今回は LVM で構成されたストレージを Proxmox に認識させて、新しい SSD に移動するまでの流れ をまとめています。

作業前の準備

前提条件

  • 新しい SSD に Proxmox をインストール済み
  • 以前使用していた SSD(LVM 構成された仮想マシンディスクあり)を追加接続(データ移行後に取り外し予定)
  • 旧 SSD の /etc/pve/qemu-server/ にある .conf ファイルを事前に取得しておくこと。
    • これがないと、仮想マシンの設定が復元できません。

LVM の認識状況を確認

SSD を接続したあと、Proxmox のターミナルで LVM の状態を確認しました。

root@pve:~# pvs
  PV             VG  Fmt  Attr PSize PFree
  /dev/nvme2n1p3 pve lvm2 a--  1.45t 16.00g
root@pve:~# vgs
  VG  #PV #LV #SN Attr   VSize VFree
  pve   1  21   0 wz--n- 1.45t 16.00g
root@pve:~# lvs
  LV                      VG  Attr       LSize   Pool Origin        Data%  Meta%  Move Log Cpy%Sync Convert
  data                    pve twi-aotz--   1.31t                    31.45  1.07
  root                    pve -wi-a-----  96.00g
  snap_vm-100-disk-0_test pve Vri---tz-k   8.00g data vm-100-disk-0
  snap_vm-103-disk-0_test pve Vri---tz-k  32.00g data vm-103-disk-0
  swap                    pve -wi-a-----   8.00g
  vm-100-disk-0           pve Vwi-a-tz--   8.00g data               17.76
  vm-101-disk-0           pve Vwi-a-tz--  32.00g data               14.49
  vm-102-disk-0           pve Vwi-a-tz--  32.00g data               12.16
  vm-102-disk-1           pve Vwi-a-tz-- 100.00g data               93.64
  vm-102-disk-2           pve Vwi-a-tz-- 100.00g data               41.95
  vm-103-disk-0           pve Vwi-a-tz--  32.00g data               24.70
  vm-103-state-test       pve Vwi-a-tz--  <8.49g data               27.40
  vm-104-disk-0           pve Vwi-a-tz--  60.00g data               39.57
  vm-105-disk-0           pve Vwi-a-tz--  60.00g data               78.59
  vm-106-disk-0           pve Vwi-a-tz--  60.00g data               77.76
  vm-107-disk-0           pve Vwi-a-tz--   4.00m data               3.12
  vm-107-disk-1           pve Vwi-a-tz--  16.00g data               25.67
  vm-108-disk-0           pve Vwi-a-tz--  32.00g data               11.79
  vm-111-disk-0           pve Vwi-a-tz--  16.00g data               25.64
  vm-112-disk-0           pve Vwi-a-tz-- 100.00g data               94.31
  vm-113-disk-0           pve Vwi-a-tz-- 100.00g data               41.27

出力結果を見ると、pve という VG(ボリュームグループ)が存在し、その中に data という LVM-Thin プールと仮想マシンのディスクが格納されていることが分かりました。

1. 旧 SSD を認識させる

まずは、LVM をアクティブ化して仮想マシンのディスクを認識させます。

vgchange -ay pve
root@pve:~# vgchange -ay pve
  19 logical volume(s) in volume group "pve" now active

次に、Proxmox にストレージとして追加します。

pvesm add lvmthin old-ssd --vgname pve --thinpool data --content images,rootdir
root@pve:~# pvesm add lvmthin old-ssd --vgname pve --thinpool data --content images,rootdir

ちゃんと認識できているか確認。

lvs
root@pve:~# lvs
  LV                      VG  Attr       LSize   Pool Origin        Data%  Meta%  Move Log Cpy%Sync Convert
  data                    pve twi-aotz--   1.31t                    31.45  1.07                         
  root                    pve -wi-a-----  96.00g                                                        
  snap_vm-100-disk-0_test pve Vri---tz-k   8.00g data vm-100-disk-0                                     
  snap_vm-103-disk-0_test pve Vri---tz-k  32.00g data vm-103-disk-0                                     
  swap                    pve -wi-a-----   8.00g                                                        
  vm-100-disk-0           pve Vwi-a-tz--   8.00g data               17.76                               
  vm-101-disk-0           pve Vwi-a-tz--  32.00g data               14.49                               
  vm-102-disk-0           pve Vwi-a-tz--  32.00g data               12.16                               
  vm-102-disk-1           pve Vwi-a-tz-- 100.00g data               93.64                               
  vm-102-disk-2           pve Vwi-a-tz-- 100.00g data               41.95                               
  vm-103-disk-0           pve Vwi-a-tz--  32.00g data               24.70                               
  vm-103-state-test       pve Vwi-a-tz--  <8.49g data               27.40                               
  vm-104-disk-0           pve Vwi-a-tz--  60.00g data               39.57                               
  vm-105-disk-0           pve Vwi-a-tz--  60.00g data               78.59                               
  vm-106-disk-0           pve Vwi-a-tz--  60.00g data               77.76                               
  vm-107-disk-0           pve Vwi-a-tz--   4.00m data               3.12                                
  vm-107-disk-1           pve Vwi-a-tz--  16.00g data               25.67                               
  vm-108-disk-0           pve Vwi-a-tz--  32.00g data               11.79                               
  vm-111-disk-0           pve Vwi-a-tz--  16.00g data               25.64                               
  vm-112-disk-0           pve Vwi-a-tz-- 100.00g data               94.31                               
  vm-113-disk-0           pve Vwi-a-tz-- 100.00g data               41.27                               

2. 仮想マシンの設定ファイルを復元

取得しておいた仮想マシンの .conf ファイルを /etc/pve/qemu-server/ にコピーします。

cp  qemu-server/*.conf /etc/pve/qemu-server/
root@pve:~/qemu-server# pwd
/root/qemu-server
root@pve:~/qemu-server# ls -alF
total 67
dr-xr-xr-x 2 root www-data   13 May  5  2024 ./
drwx------ 5 root root       11 Feb 11 17:51 ../
-r--r----- 1 root www-data  389 Feb  8 00:30 101.conf
-r--r----- 1 root www-data  569 Feb  9 23:52 102.conf
-r--r----- 1 root www-data 1044 Feb 10 11:39 103.conf
-r--r----- 1 root www-data  405 Feb 10 11:19 104.conf
-r--r----- 1 root www-data  358 Feb 11 12:00 105.conf
-r--r----- 1 root www-data  358 Feb 10 10:54 106.conf
-r--r----- 1 root www-data  419 Jun 23  2024 107.conf
-r--r----- 1 root www-data  479 Feb  8 10:36 108.conf
-r--r----- 1 root www-data  308 Oct 31 21:23 111.conf
-r--r----- 1 root www-data  236 Feb  7 00:10 112.conf
-r--r----- 1 root www-data  241 May 11  2024 113.conf
root@pve:~/qemu-server# cp * /etc/pve/qemu-server/

取得しておいたコンテナの .conf ファイルを /etc/pve/lxc/ にコピーします。

cp  lxc/*.conf /etc/pve/lxc/
root@pve:~/lxc# pwd
/root/lxc
root@pve:~/lxc# ls -alF
total 18
dr-xr-xr-x 2 root www-data    4 May  5  2024 ./
drwx------ 6 root root       12 Feb 11 20:25 ../
-r--r----- 1 root www-data 1386 Feb 11 13:14 100.conf
-r--r----- 1 root www-data  680 Jun 30  2024 100.conf.BAK
root@pve:~/lxc# cp 100.conf /etc/pve/nodes/pve/lxc/

次に仮想マシン及びコンテナの .conf ファイル内のディスク情報を修正します。

例えば、/etc/pve/qemu-server/101.conf を開きます。

vi /etc/pve/qemu-server/101.conf

修正前:

sata0: local-lvm:vm-101-disk-0,size=32G

修正後:

sata0: old-ssd:vm-101-disk-0,size=32G

次に仮想マシン及びコンテナの一覧を再スキャン。

qm rescan
pct list
root@pve:~# qm rescan
rescan volumes...
root@pve:/etc/pve/nodes/pve/lxc# pct list
VMID       Status     Lock         Name
100        stopped                 freenas

これで仮想マシン及びコンテナが Proxmox の管理画面に表示されました。

image.png

3. 仮想マシン及びコンテナのディスクを新しい SSD に移動

まず、仮想マシンのディスクがどこにあるかを確認します。

qm config 101
root@pve:~# qm config 101
boot: order=sata0;ide2;net0
cores: 6
cpu: host
ide2: none,media=cdrom
memory: 32768
meta: creation-qemu=8.1.5,ctime=1716569162
name: esxi67
net0: e1000=BC:24:11:77:19:A5,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
sata0: old-ssd:vm-101-disk-0,size=32G
scsihw: virtio-scsi-single
smbios1: uuid=d7cdaa7e-7210-46da-a9f0-877fd6f93d63
sockets: 1
vmgenid: 8918c6f0-d350-46c4-9153-d81edca8e665

例:

sata0: old-ssd:vm-101-disk-0,size=32G

sata0 が対象ディスクになります。

次に、移動先のストレージを確認。

pvesm status
root@pve:~# pvesm status
Name             Type     Status           Total            Used       Available        %
local             dir     active      6105437568             128      6105437440    0.00%
local-zfs     zfspool     active      6105437652              96      6105437556    0.00%
old-ssd       lvmthin     active      1407217664       442569955       964647708   31.45%

local-zfs が ZFS ストレージとして認識されていることを確認。

仮想マシンを ZFS (local-zfs) に移動します。

qm move_disk 101 sata0 local-zfs
root@pve:~# qm move_disk 101 sata0 local-zfs
create full clone of drive sata0 (old-ssd:vm-101-disk-0)
transferred 0.0 B of 32.0 GiB (0.00%)
transferred 327.7 MiB of 32.0 GiB (1.00%)
省略
transferred 32.0 GiB of 32.0 GiB (100.00%)
transferred 32.0 GiB of 32.0 GiB (100.00%)

移動後、設定ファイルも更新されている。

root@pve:~# cat /etc/pve/qemu-server/101.conf | grep local-zfs
sata0: local-zfs:vm-101-disk-0,size=32G

他の仮想ディスクも同様に移動。

root@pve:~# cat /etc/pve/qemu-server/102.conf | grep old-ssd
scsi0: old-ssd:vm-102-disk-0,iothread=1,size=32G
scsi1: old-ssd:vm-102-disk-1,iothread=1,size=100G
scsi2: old-ssd:vm-102-disk-2,iothread=1,size=100G
root@pve:~# qm move_disk 102 scsi0 local-zfs
root@pve:~# qm move_disk 102 scsi1 local-zfs
root@pve:~# qm move_disk 102 scsi2 local-zfs
scsi0: local-zfs:vm-102-disk-0,iothread=1,size=32G
scsi1: local-zfs:vm-102-disk-1,iothread=1,size=100G
scsi2: local-zfs:vm-102-disk-2,iothread=1,size=100G
root@pve:~# cat /etc/pve/qemu-server/103.conf
boot: order=scsi0;ide2;net0
cores: 4
cpu: host
ide2: local:iso/rhel-9.3-x86_64-dvd.iso,media=cdrom,size=10282112K
memory: 4096
meta: creation-qemu=8.1.5,ctime=1718764876
name: RHEL9
net0: virtio=BC:24:11:21:8F:33,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
parent: test
scsi0: local-zfs:vm-103-disk-0,iothread=1,size=32G
scsihw: virtio-scsi-single
smbios1: uuid=1f382653-2a46-4dcd-99e5-a3048eabca96
sockets: 1
unused0: old-ssd:vm-103-disk-0
vmgenid: eb08fd42-3ea7-409e-93bf-a22e188e1b3a

[test]
boot: order=scsi0;ide2;net0
cores: 4
cpu: host
ide2: local:iso/rhel-9.3-x86_64-dvd.iso,media=cdrom,size=10282112K
memory: 4096
meta: creation-qemu=8.1.5,ctime=1718764876
name: RHEL9
net0: virtio=BC:24:11:21:8F:33,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
runningcpu: host,+kvm_pv_eoi,+kvm_pv_unhalt
runningmachine: pc-i440fx-9.0+pve0
scsi0: old-ssd:vm-103-disk-0,iothread=1,size=32G
scsihw: virtio-scsi-single
smbios1: uuid=1f382653-2a46-4dcd-99e5-a3048eabca96
snaptime: 1738383007
sockets: 1
vmgenid: eb08fd42-3ea7-409e-93bf-a22e188e1b3a
vmstate: old-ssd:vm-103-state-test
root@pve:~# qm move_disk 103 scsi0 local-zfs
moving disk with snapshots, snapshots will not be moved!
create full clone of drive scsi0 (old-ssd:vm-103-disk-0)
transferred 0.0 B of 32.0 GiB (0.00%)
transferred 327.7 MiB of 32.0 GiB (1.00%)

スナップショットを移動しようとすると、以下のようにエラーが出力されます。

root@pve:~# qm move_disk 103 vmstate local-zfs
400 Parameter verification failed.
disk: value 'vmstate' does not have a value in the enumeration 'ide0, ide1, ide2, ide3, scsi0, scsi1, scsi2, scsi3, scsi4, scsi5, scsi6, scsi7, scsi8, scsi9, scsi10, scsi11, scsi12, scsi13, scsi14, scsi15, scsi16, scsi17, scsi18, scsi19, scsi20, scsi21, scsi22, scsi23, scsi24, scsi25, scsi26, scsi27, scsi28, scsi29, scsi30, virtio0, virtio1, virtio2, virtio3, virtio4, virtio5, virtio6, virtio7, virtio8, virtio9, virtio10, virtio11, virtio12, virtio13, virtio14, virtio15, sata0, sata1, sata2, sata3, sata4, sata5, efidisk0, tpmstate0, unused0, unused1, unused2, unused3, unused4, unused5, unused6, unused7, unused8, unused9, unused10, unused11, unused12, unused13, unused14, unused15, unused16, unused17, unused18, unused19, unused20, unused21, unused22, unused23, unused24, unused25, unused26, unused27, unused28, unused29, unused30, unused31, unused32, unused33, unused34, unused35, unused36, unused37, unused38, unused39, unused40, unused41, unused42, unused43, unused44, unused45, unused46, unused47, unused48, unused49, unused50, unused51, unused52, unused53, unused54, unused55, unused56, unused57, unused58, unused59, unused60, unused61, unused62, unused63, unused64, unused65, unused66, unused67, unused68, unused69, unused70, unused71, unused72, unused73, unused74, unused75, unused76, unused77, unused78, unused79, unused80, unused81, unused82, unused83, unused84, unused85, unused86, unused87, unused88, unused89, unused90, unused91, unused92, unused93, unused94, unused95, unused96, unused97, unused98, unused99, unused100, unused101, unused102, unused103, unused104, unused105, unused106, unused107, unused108, unused109, unused110, unused111, unused112, unused113, unused114, unused115, unused116, unused117, unused118, unused119, unused120, unused121, unused122, unused123, unused124, unused125, unused126, unused127, unused128, unused129, unused130, unused131, unused132, unused133, unused134, unused135, unused136, unused137, unused138, unused139, unused140, unused141, unused142, unused143, unused144, unused145, unused146, unused147, unused148, unused149, unused150, unused151, unused152, unused153, unused154, unused155, unused156, unused157, unused158, unused159, unused160, unused161, unused162, unused163, unused164, unused165, unused166, unused167, unused168, unused169, unused170, unused171, unused172, unused173, unused174, unused175, unused176, unused177, unused178, unused179, unused180, unused181, unused182, unused183, unused184, unused185, unused186, unused187, unused188, unused189, unused190, unused191, unused192, unused193, unused194, unused195, unused196, unused197, unused198, unused199, unused200, unused201, unused202, unused203, unused204, unused205, unused206, unused207, unused208, unused209, unused210, unused211, unused212, unused213, unused214, unused215, unused216, unused217, unused218, unused219, unused220, unused221, unused222, unused223, unused224, unused225, unused226, unused227, unused228, unused229, unused230, unused231, unused232, unused233, unused234, unused235, unused236, unused237, unused238, unused239, unused240, unused241, unused242, unused243, unused244, unused245, unused246, unused247, unused248, unused249, unused250, unused251, unused252, unused253, unused254, unused255'
root@pve:~# cat /etc/pve/qemu-server/104.conf | grep old-ssd
scsi0: old-ssd:vm-104-disk-0,size=60G
root@pve:~# qm move_disk 104 scsi0 local-zfs
root@pve:~# cat /etc/pve/qemu-server/104.conf | grep local-zfs
scsi0: local-zfs:vm-104-disk-0,size=60G
root@pve:~# cat /etc/pve/qemu-server/105.conf | grep old-ssd
sata0: old-ssd:vm-105-disk-0,size=60G
root@pve:~# qm move_disk 105 sata0 local-zfs
root@pve:~# cat /etc/pve/qemu-server/105.conf | grep local-zfs
sata0: local-zfs:vm-105-disk-2,size=60G
root@pve:~# cat /etc/pve/qemu-server/106.conf | grep old-ssd
sata0: old-ssd:vm-106-disk-0,size=60G
root@pve:~# qm move_disk 106 sata0 local-zfs
root@pve:~# cat /etc/pve/qemu-server/106.conf | grep local-zfs
sata0: local-zfs:vm-106-disk-0,size=60G
root@pve:~# cat /etc/pve/qemu-server/107.conf | grep old-ssd
efidisk0: old-ssd:vm-107-disk-0,size=4M
scsi0: old-ssd:vm-107-disk-1,size=16G
root@pve:~# qm move_disk 107 scsi0 local-zfs
root@pve:~# qm move_disk 107 efidisk0 local-zfs
root@pve:~# cat /etc/pve/qemu-server/107.conf | grep local-zfs
efidisk0: local-zfs:vm-107-disk-1,size=1M
scsi0: local-zfs:vm-107-disk-0,size=16G
root@pve:~# cat /etc/pve/qemu-server/108.conf | grep old-ssd
scsi0: old-ssd:vm-108-disk-0,iothread=1,size=32G
root@pve:~# qm move_disk 108 scsi0 local-zfs
root@pve:~# cat /etc/pve/qemu-server/108.conf | grep local-zfs
scsi0: local-zfs:vm-108-disk-0,iothread=1,size=32G
root@pve:~# cat /etc/pve/qemu-server/111.conf | grep old-ssd
scsi0: old-ssd:vm-111-disk-0,size=16G
root@pve:~# qm move_disk 111 scsi0 local-zfs
root@pve:~# cat /etc/pve/qemu-server/111.conf | grep local-zfs
scsi0: local-zfs:vm-111-disk-0,size=16G
root@pve:~# cat /etc/pve/qemu-server/112.conf | grep old-ssd
scsi0: old-ssd:vm-112-disk-0,size=100G
root@pve:~# qm move_disk 112 scsi0 local-zfs
root@pve:~# cat /etc/pve/qemu-server/112.conf | grep local-zfs
scsi0: local-zfs:vm-112-disk-0,size=100G
root@pve:~# cat /etc/pve/qemu-server/113.conf | grep old-ssd
scsi0: old-ssd:vm-113-disk-0,size=100G
root@pve:~# qm move_disk 113 scsi0 local-zfs
root@pve:~# cat /etc/pve/qemu-server/113.conf | grep local-zfs
scsi0: local-zfs:vm-113-disk-0,size=100G

コンテナも同様に移動。

pct move_volume 100 rootfs local-zfs
root@pve:/etc/pve/nodes/pve/lxc# pct move_volume 100 rootfs local-zfs
Number of files: 27,231 (reg: 21,495, dir: 2,449, link: 3,257, special: 30)
Number of created files: 27,230 (reg: 21,495, dir: 2,448, link: 3,257, special: 30)
Number of deleted files: 0
Number of regular files transferred: 21,488
Total file size: 920,958,659 bytes
Total transferred file size: 916,768,694 bytes
Literal data: 916,768,694 bytes
Matched data: 0 bytes
File list size: 786,393
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 918,639,104
Total bytes received: 433,492

sent 918,639,104 bytes  received 433,492 bytes  87,530,723.43 bytes/sec
total size is 920,958,659  speedup is 1.00

この作業を仮想マシン及びコンテナごとに繰り返します。

4. 起動確認

インポートした仮想マシンが起動することを確認します。

5. 旧 SSD を取り外す準備

すべてのデータを移行したら、LVM を無効化します。

vgchange -an pve
root@pve:/etc/pve/nodes/pve/lxc# vgchange -an pve
  0 logical volume(s) in volume group "pve" now active

これで旧 SSD を物理的に取り外せます。

補足: config.db を移行する方法

⚠ この方法では仮想マシンの設定だけでなく、データストアやその他の設定情報も復元されるため、慎重に実行してください!

1. 旧 SSD のルートパーティションを確認

lsblk -o NAME,FSTYPE,MOUNTPOINT,SIZE

例:

NAME        FSTYPE      MOUNTPOINT  SIZE
sdb                    
├─sdb1      vfat                   512M
├─sdb2      ext4                   1.0G
└─sdb3      LVM2_member            1.5T
  ├─pve-root ext4                   96G
  ├─pve-swap swap                    8G
  ├─pve-data thin-pool             1.31T

pve-root が旧 SSD のルートパーティションなので、これをマウント。

2. 旧 SSD のルートをマウント

mkdir -p /mnt/old-ssd
mount /dev/mapper/pve-root /mnt/old-ssd

3. クラスターファイルシステムを安全にコピーするため、サービスを停止

systemctl stop pve-cluster
systemctl stop pvedaemon

4. config.db をコピー

cp -p /mnt/old-ssd/var/lib/pve-cluster/config.db /var/lib/pve-cluster/config.db

5. クラスターファイルシステムを再起動

systemctl start pvedaemon
systemctl start pve-cluster

⚠ 注意:

  • この方法では仮想マシンの設定だけでなく、データストアやその他の設定情報も復元されるため、慎重に実行!
  • 既存の config.db をバックアップ (config.db.bak など) してから作業することを推奨。

まとめ

  1. Proxmox で旧 SSD の LVM をアクティブ化し、ストレージを追加
  2. 事前に取得した /etc/pve/qemu-server/.conf ファイルをコピーして仮想マシンを復元
  3. 仮想マシンとコンテナを認識させ、ディスクを新 SSD (rpool) に移動
  4. 旧 SSD を無効化し、取り外し

これで、旧 SSD をそのまま認識し、新 SSD にデータを移行できました!

もし同じような状況に遭遇したら、ぜひ試してみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?