Proxmox - Passthrough ổ cứng vào VM
Nếu chúng ta muốn tăng dung lượng lưu trữ dữ liệu cho VM trong Proxmox thì ngoài việc mua thêm ổ cứng và cắm vào PC, chúng ta sẽ phải cấu hình ở trên Proxmox để passthrough được ổ cứng đó vào VM mà chúng ta cần tăng dung lượng.
Trong bài viết này, tôi sẽ chia sẻ lại cách tôi passthrough ổ cứng gắn trong (Internal HDD/SSD kết nối thông qua cổng SATA/NVMe) vào VM Proxmox.
1, List ra các ổ cứng đã nhận trên Proxmox
Vào Shell của Proxmox và sử dụng lệnh sau:
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'
Output của lệnh này sẽ hiện ra các ổ cứng đang có trên Proxmox:
root@kimpa-proxmox:~# 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 MOUNTPOINTS DEVICE-ID(S)
sda 8:0 0 5.5T 0 disk /dev/disk/by-id/ata-TOSHIBA_HDWG460_34D0A062AB5C /dev/disk/by-id/wwn-0x5000039d28cbbd3a
nvme0n1 259:0 0 465.8G 0 disk /dev/disk/by-id/nvme-Samsung_SSD_980_500GB_S78GNL0XB23998E_1 /dev/disk/by-id/nvme-Samsung_SSD_980_500GB_S78GNL0XB23998E /dev/disk/by-id/nvme-eui.002538db41a0bf1b
Ví dụ ở trên, tôi có 2 ổ cứng bao gồm 1 SSD NVMe có dung lượng là 465GB và 1 HDD SATA có dung lượng là 5.5TB. Tôi muốn passthrough HDD SATA có dung lượng là 5.5TB vào VM XPenology → Tôi sẽ note lại MOUNTPOINTS này /dev/disk/by-id/ata-TOSHIBA_HDWG460_34D0A062AB5C
.
2, Passthrough ổ cứng vào VM
Để passthrough ổ cứng vào VM, sử dụng lệnh sau:
qm set {vmid} [OPTIONS]
{vmid}
là ID của VM cần passthrough[OPTIONS]
là vị trí ổ cứng trong VM kèm với MOUNTPOINTS đã lấy thông tin ở phần trước
Ví dụ, trong VM XPenology (vmID là 100) của tôi đã dùng 2 cổng sata0
và sata1
.

Do đó, tôi sẽ passthrough ổ cứng mới vào vị trí sata3
bằng lệnh sau:
root@kimpa-proxmox:~# qm set 100 -sata3 /dev/disk/by-id/ata-TOSHIBA_HDWG460_34D0A062AB5C
update VM 100: -sata3 /dev/disk/by-id/ata-TOSHIBA_HDWG460_34D0A062AB5C
Sau khi thực hiện, kiểm tra lại thì thấy ổ cứng mới đã được passthrough vào vị trí sata3
:

3, Passthrough Serial Number của ổ cứng vào VM
Đối với một số VM đặc thù (ví dụ như XPenology) sẽ yêu cầu Serial Number của ổ cứng thì mới nhận diện và sử dụng được thì chúng ta sẽ phải thêm một bước passthrough Serial Number của ổ cứng vào VM.
Đầu tiên, cài đặt lshw để lấy thông tin Serial Number của ổ cứng:
apt install lshw
Tiếp theo, lấy Serial Number bằng lệnh:
lshw -C disk
Note lại Serial Number (mục serial
) của ổ cứng cần passthrough, ví dụ của tôi sẽ là:
root@kimpa-proxmox:~# lshw -C disk
*-disk
description: ATA Disk
product: TOSHIBA HDWG460
vendor: Toshiba
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/sda
version: 0601
serial: 34D0A062AB5C
size: 5589GiB (6001GB)
configuration: ansiversion=5 logicalsectorsize=512 sectorsize=4096
Tiếp theo, chỉnh sửa file cấu hình của máy ảo /etc/pve/qemu-server/{vmid}.conf
, trong đó {vmid}
là ID của máy ảo.
Trong file /etc/pve/qemu-server/{vmid}.conf
, chúng ta sẽ tìm đến dòng chứa thông tin ổ cứng đã passthrough ở phần trước:
sata3: /dev/disk/by-id/ata-TOSHIBA_HDWG460_34D0A062AB5C,size=5860522584K
Và thêm thông tin ,serial="Serial_Number_Của_Ổ_Cứng"
đã note lại ở bước trước:
sata3: /dev/disk/by-id/ata-TOSHIBA_HDWG460_34D0A062AB5C,size=5860522584K,serial=34D0A062AB5C
Ví dụ tôi đã edit file config của VM XPenology (vmID là 100) để thêm thông tin Serial Number của ổ cứng:
root@kimpa-proxmox:~# cat /etc/pve/qemu-server/100.conf
## XPenology
#
#- Luu tru NAS
boot: order=sata1;sata0;ide2;net0
cores: 2
cpu: x86-64-v2-AES
ide2: none,media=cdrom
memory: 4096
meta: creation-qemu=9.0.2,ctime=1738489297
name: kimpa-xpenology
net0: e1000=BC:24:11:19:8E:8A,bridge=vmbr0,firewall=1
numa: 0
onboot: 1
ostype: l26
sata0: local-lvm:vm-100-disk-0,size=50G
sata1: local-lvm:vm-100-disk-1,size=1000M
sata3: /dev/disk/by-id/ata-TOSHIBA_HDWG460_34D0A062AB5C,size=5860522584K,serial=34D0A062AB5C
scsihw: virtio-scsi-single
smbios1: uuid=dbd09b42-e7f2-46d2-a8f3-3a9d20f32218
sockets: 1
vmgenid: ac939c79-ae9d-4321-a8f9-b22293d15a7d
Cuối cùng, reboot lại VM và truy cập VM để kiểm tra thông tin ổ cứng đã được nhận:

Cảm ơn các bạn đã đọc bài viết của tôi!
Kim,
15/02/2025