Proxmox RAW-virtual Disk mit LVM mounten

Datum

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.

Autor
Kategorien Linux, Proxmox

PRTG Map