Passthrough Physical Disk to Virtual Machine (VM): Difference between revisions
(Formatted to add link to tutorial and Disk Recovery Tools - I have a failed disk in a cluster I can't get access to. How do recover the data without taking the proxmox host out of service? Repair the disk from inside the kvm vm) |
(→Identify Disk: add example of using lsblk to find disk by-id and a simple short list of devices) |
||
Line 39: | Line 39: | ||
</pre> | </pre> | ||
=== List disk by-id with lsblk === | |||
lsblk is installed. | |||
<pre> | |||
lsblk |awk 'NR==1{print $0" DEVICE-ID(S)"}NR>1{dev=$1;printf $0" ";system("find /dev/disk/by-id -lname \"*"dev"\" -printf \" %p\"");print "";}'|grep -v -E 'part|lvm' | |||
</pre> | |||
<pre> | |||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT DEVICE-ID(S) | |||
sda 8:0 0 7.3T 0 disk /dev/disk/by-id/wwn-0x5000c500c35cd719 /dev/disk/by-id/ata-ST8000DM004-2CX188_ZCT1DNY1 | |||
sdb 8:16 1 29G 0 disk /dev/disk/by-id/usb-Generic_STORAGE_DEVICE-0:0 | |||
sdc 8:32 0 931.5G 0 disk /dev/disk/by-id/usb-JMicron_Generic_0123456789ABCDEF-0:0 | |||
sdd 8:48 0 1.8T 0 disk /dev/disk/by-id/wwn-0x5000c500661eeebd /dev/disk/by-id/ata-ST2000DX001-1CM164_Z1E783H2 | |||
</pre> | |||
[https://unix.stackexchange.com/questions/387855/make-lsblk-list-devices-by-id make-lsblk-list-devices-by-id] | |||
== Short List == | |||
<pre> | |||
find /dev/disk/by-id/ -type l|xargs -I{} ls -l {}|grep -v -E '[0-9]$' |sort -k11|cut -d' ' -f9,10,11 | |||
</pre> | |||
<pre> | |||
/dev/disk/by-id/ata-ST8000DM004-2CX188_ZCT1DNY1 -> ../../sda | |||
/dev/disk/by-id/wwn-0x5000c500c35cd719 -> ../../sda | |||
/dev/disk/by-id/usb-Generic_STORAGE_DEVICE-0:0 -> ../../sdb | |||
/dev/disk/by-id/usb-JMicron_Generic_0123456789ABCDEF-0:0 -> ../../sdc | |||
/dev/disk/by-id/ata-ST2000DX001-1CM164_Z1E783H2 -> ../../sdd | |||
/dev/disk/by-id/wwn-0x5000c500661eeebd -> ../../sdd | |||
</pre> | |||
== Update Configuration == | == Update Configuration == |
Revision as of 21:41, 22 November 2020
By adding the raw physical device to the Virtual machine, you can test installers and other disk repair tools that work with disk controllers like ddrescue, gnu ddrescue, Clonezilla, Ubuntu Rescue Remix.
NOTE: This guide only works for Virtual Machines, not for Container. For that see https://forum.proxmox.com/threads/container-with-physical-disk.42280/#post-203292
As the disk is attached to the physical and virtual host, this will also prevent Virtual Machine live migration. A second side effect is host system IO wait, when running ddrescue, other vm's running on the host can stutter.
Attach Pass Through Disk
Identify Disk
Before adding a physical disk to host make note of vendor, serial so that you'll know which disk to share in /dev/disk/by-id/
lshw on pve host after adding. note use apt-get install lshw if lshw is not already installed.
lshw -class disk -class storage ... *-disk description: ATA Disk product: ST3000DM001-1CH1 vendor: Seagate physical id: 0.0.0 bus info: scsi@3:0.0.0 logical name: /dev/sda version: CC27 serial: Z1F41BLC size: 2794GiB (3TB) configuration: ansiversion=5 sectorsize=4096 ...
- device names like /dev/sdc should never be used as those can change. instead use /dev/disk/by-id . check by listing all of that directory then look for the disk added by matching serial number from lshw and the physical disk :
ls -l /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC lrwxrwxrwx 1 root root 9 Jan 21 10:10 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC -> ../../sda
or try
ls -l /dev/disk/by-id | grep Z1F41BLC
List disk by-id with lsblk
lsblk is installed.
lsblk |awk 'NR==1{print $0" DEVICE-ID(S)"}NR>1{dev=$1;printf $0" ";system("find /dev/disk/by-id -lname \"*"dev"\" -printf \" %p\"");print "";}'|grep -v -E 'part|lvm'
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT DEVICE-ID(S) sda 8:0 0 7.3T 0 disk /dev/disk/by-id/wwn-0x5000c500c35cd719 /dev/disk/by-id/ata-ST8000DM004-2CX188_ZCT1DNY1 sdb 8:16 1 29G 0 disk /dev/disk/by-id/usb-Generic_STORAGE_DEVICE-0:0 sdc 8:32 0 931.5G 0 disk /dev/disk/by-id/usb-JMicron_Generic_0123456789ABCDEF-0:0 sdd 8:48 0 1.8T 0 disk /dev/disk/by-id/wwn-0x5000c500661eeebd /dev/disk/by-id/ata-ST2000DX001-1CM164_Z1E783H2
Short List
find /dev/disk/by-id/ -type l|xargs -I{} ls -l {}|grep -v -E '[0-9]$' |sort -k11|cut -d' ' -f9,10,11
/dev/disk/by-id/ata-ST8000DM004-2CX188_ZCT1DNY1 -> ../../sda /dev/disk/by-id/wwn-0x5000c500c35cd719 -> ../../sda /dev/disk/by-id/usb-Generic_STORAGE_DEVICE-0:0 -> ../../sdb /dev/disk/by-id/usb-JMicron_Generic_0123456789ABCDEF-0:0 -> ../../sdc /dev/disk/by-id/ata-ST2000DX001-1CM164_Z1E783H2 -> ../../sdd /dev/disk/by-id/wwn-0x5000c500661eeebd -> ../../sdd
Update Configuration
qm set 592 -scsi2 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC update VM 592: -scsi2 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC
Check Configuration File
grep Z1F41BLC /etc/pve/qemu-server/592.conf scsi2: /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC,size=2930266584K
Stop and Restart KVM Virtual Machine
You may need to configure the guest operating system now that the disk is available.
Tutorial
[ https://dannyda.com/2020/08/26/how-to-passthrough-hdd-ssd-physical-disks-to-vm-on-proxmox-vepve/ Example with screenshots ]
Disk Recovery Tools
- Ubuntu Rescue Remix - [ http://www.geekyprojects.com/storage/how-to-recover-data-even-when-hard-drive-is-damaged/ how to use Ubuntu Rescue Remix and Ddrescue ]
- ddrescue
- gnu ddrescue
- Clonezilla
- TestDisk
- PhotoRec
- Recuva
- Foremost
- Parted Magic
- SpinRite - Low Cost Commercial - Smartctl tutoral on proxmox planned