Proxmox legt alle LXC oder KVM Verzeichnisse in virtual Disks. Leider ist es im Vergleich zu den LXC Disks, nicht trivial eine virtuelle Festplatte einer KVM auf dem Trägersystem zu mounten. Am einfachsten ist es wenn die virtual Disk im Format RAW liegt, da hier die Daten blank in der Datei liegen.
Wenn man die VM-ID der virtuellen Maschine nicht weiß kann man sich eine Übersicht anzeigen lassen:
root@pve:/# qm list
VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID
200 btrfs-test stopped 2048 32.00 0
201 testsystem stopped 3092 32.00 0
202 testsystem2 stopped 3092 32.00 0
In diesen Fall will ich eine virtuelle Platte von 201 testsystem1
auf meinem Host mounten.
Sollte das Verzeichnis für die virtuelle Platte nicht bekannt sein, so am besten die Config aufzeigen lassen.
root@pve:/# qm config 201
balloon: 1024
bootdisk: virtio0
cores: 1
ide2: local:iso/ubuntu-16.04.2-server-amd64.iso,media=cdrom
memory: 3092
name: testsystem
net0: virtio=E6:E2:D2:5A:D9:81,bridge=vmbr0
net1: virtio=A2:55:91:18:5B:BA,bridge=vmbr0
numa: 0
ostype: l26
scsihw: virtio-scsi-pci
smbios1: uuid=a2666325-fb1d-46cd-a346-dea4f5f415f1
sockets: 1
virtio0: vdisk:201/vm-201-disk-1.raw,size=32G
virtio1: vdisk:201/vm-201-disk-2.raw,size=32G
virtio2: vdisk:201/vm-201-disk-3.raw,size=32G
Hier ist sichtbar, dass sich die virtuellen Festplatten unter im Storage vdisk
im Ordner 201
befindet.
Die Konfiguration des Storages liegt unter /etc/pve/storage.cfg
.
dir: vdisk
path /vdisk
content vztmpl,rootdir,backup,images,iso
maxfiles 2
shared 0
Die Pathvariable zeigt an, dass der Storage „vdisk“ dem Verzeichnis /vdisk
entspricht.
Zuerst muss überprüft werden, wieviele Loopdevices schon benutzt werden. Proxmox nutzt für jeden laufenden Container bereits ein Loop.
Welche Devices in Benutzung sind, kann folgendermaßen angezeigt werden:
root@pve:~# losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 1 0 /vdisk/images/111/vm-111-disk-1.raw 0
/dev/loop4 0 0 1 0 /vdisk/images/101/vm-101-disk-1.raw 0
/dev/loop0 0 0 1 0 /vdisk/images/103/vm-103-disk-1.raw 0
/dev/loop3 0 0 1 0 /images/100/vm-100-disk-1.raw 0
Nun kann ein neues loop Device erzeugt werden.
losetup /dev/loop5[Nummer richtet sich danach welche Devices schon belegt sind] [Verzeichnis des RAW Files]
Dies wird anschließend mit losetup
auch angezeigt:
root@pve:~# losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 1 0 /vdisk/images/111/vm-111-disk-1.raw 0
/dev/loop4 0 0 1 0 /vdisk/images/101/vm-101-disk-1.raw 0
/dev/loop0 0 0 1 0 /vdisk/images/103/vm-103-disk-1.raw 0
/dev/loop5 0 0 0 0 /vdisk/images/201/vm-201-disk-1.raw 0
/dev/loop3 0 0 1 0 /images/100/vm-100-disk-1.raw 0
In welcher Partition das LVM liegt, erkennt man an der Ausgabe von fdisk
.
root@pve:~# fdisk -l /dev/loop5
Disk /dev/loop5: 32 GiB, 34359738368 bytes, 67108864 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x36711dec
Device Boot Start End Sectors Size Id Type
/dev/loop5p1 * 2048 999423 997376 487M 83 Linux
/dev/loop5p2 1001470 67106815 66105346 31.5G 5 Extended
/dev/loop5p5 1001472 67106815 66105344 31.5G 8e Linux LVM
Hier erkennt man bei /dev/loop5p5
die Linux LVM
Partition.
Sollten weitere Partitionen vor dem LVM liegen, wie Boot Partitionen muss ein weiteres Loop Device für die genaue Adressierung der LVM Partition angelegt werden.
Sollte nur das LVM auf der Platte sein, kann der Schritt mit dem Offset übersprungen werden.
Loopdevice mit Offset
Hierzu benötigt man die Sektorgröße und die entsprechenden Sektoren, welche mit fdisk
angezeigt wurden.
Die Sektorgröße erkennt man an:
Sector size (logical/physical): 512 bytes / 512 bytes
Die belegten Sektoren werden hier angezeigt:
/dev/loop5p5 1001472 67106815 66105344 31.5G 8e Linux LVM
Die niedrigere Zahl bezeichnet den Startsektor, gut zu erkennen in der vollständigen fdisk
Tabelle.
Nun die Erstellung des weiternen Loops:
losetup -o $(([Startsektor LVM]*[Sektorgröße])) /dev/loop6[Zielloopdevice] /dev/loop5[Quellloopdevice]
In diesem Fall:
losetup -o $((512753664)) /dev/loop6[Zielloopdevice] /dev/loop5[Quellloopdevice]
Anschließen sieht man dieses Device mit dem entsprechenden Offset.
root@pve:~# losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 1 0 /vdisk/images/111/vm-111-disk-1.raw 0
/dev/loop6 0 512753664 0 0 /dev/loop5 0
/dev/loop4 0 0 1 0 /vdisk/images/101/vm-101-disk-1.raw 0
/dev/loop0 0 0 1 0 /vdisk/images/103/vm-103-disk-1.raw 0
/dev/loop5 0 0 0 0 /vdisk/images/201/vm-201-disk-1.raw 0
/dev/loop3 0 0 1 0 /images/100/vm-100-disk-1.raw 0
LVM hinzufügen
Das LVM lässt sich nur nicht direkt mounten. Dies schlägt mit folgender Fehlermeldung fehl:
root@pve:~# mount /dev/loop6 /mnt/
mount: wrong fs type, bad option, bad superblock on /dev/loop6,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
Hier muss das LVM erst hinzugefügt werden.
Dazu erstmal ein VolumeGroup Suchlauf durchführen mit vgscan
.
Hier erscheint nun eine weiterte VolumeGroup zu der bereits bestehenden PVE VG.
root@pve:~# vgscan
Reading all physical volumes. This may take a while...
Found volume group "pve" using metadata type lvm2
Found volume group "testsystem-vg" using metadata type lvm2
Das LogicalVolume ist nun auch erreichbar.
root@pve:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root pve -wi-ao---- 48.77g
swap pve -wi-ao---- 6.88g
root testsystem-vg -wi------- 29.48g
swap_1 testsystem-vg -wi------- 2.00g
Um die LogicalVolumes noch mounten zu können, müssen die VolumeGroup aktiv geschalten werden.
vgchange -ay [VolumeGroupname]
Anschließend können die LogicalVolumes normal gemountet werden.
mount /dev/mapper/[gewünschte VolumeGroup] [gewünschter Mountpoint]
VolumeGroup deaktivieren und Loopdevices löschen
Zuerst müssen eventuelle Mounts noch entmounted werden. Eine Übersicht über die aktiven Mounts sieht man mit dem Befehl mount
.
Dazu einfach umount [gemountetes Verzeichnis]
.
Anschließend die VolumeGroups deaktivieren.
vgchange -an [VolumeGroup Name]
Nun sollte unter /dev/mapper
auch die LogicalVolumes nichtmehr angezeigt werden.
Jetz können auch die Loopdevices gelöscht werden. In umgekehrter Reihenfolge wie sie erstellt wurden. Zuerst das mit dem Offset.