kimpa website logo kimpa.xyz

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]
              

Ví dụ, trong VM XPenology (vmID là 100) của tôi đã dùng 2 cổng sata0sata1.

current-vm-has-used-sata0-and-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:

current-vm-has-used-sata0-sata1-and-sata-3

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:

VM-has-recieved-passthrough-HDD

Cảm ơn các bạn đã đọc bài viết của tôi!

Kim,

15/02/2025