Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> เครื่องเสมือน

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

วิธีบูทจาก USB drive ใน VirtualBox - Tutorial

อัปเดต: 12 กุมภาพันธ์ 2024

ใน VirtualBox เมื่อสร้าง VM ใหม่ ปกติมี "สอง" ตัวเลือกสำหรับเริ่ม guest OS บูทจาก ISO image (เทียบเท่า CD/DVD) หรือบูทจาก virtual hard disk แต่ถ้าคุณมี OS บน USB drive และอยากใช้เป็น start media ล่ะ?

มีหลายเหตุผลที่อยากทำเช่นนี้ เช่น OS อาจไม่มีในรูปแบบ ISO เรียบง่าย หรือคุณไม่มี source ISO มีแค่ final artifact คือ partition table และ data บน external drive วันนี้ผมจะแสดงวิธีบูทจาก USB drive ที่ bootable ได้ และรัน OS ใดๆ ที่อยู่บนที่นั่น เราจะใช้ Linux เป็น platform เลือก ติดตามมา

Raw disk option และคำเตือนใหญ่ๆ

VirtualBox รองรับการบูทจาก "raw" devices กล่าวคือ คุณสามารถ config ให้ storage device ที่มีอยู่ internal หรือ external เป็น raw device และบูทจากมันได้ อาจเป็น OS ใดๆ รวมถึง dual-boot หรือ multi-boot setups ทางเทคนิค คุณแม้แต่จะ map OS drive ของคุณ (ใน Windows อาจเป็น partition ที่ C:\ อยู่) และ launch มัน และที่นี่คืออันตรายใหญ่ของ raw devices มันง่ายเกินไปที่จะ misconfigure disk หนึ่งตัวอักษรผิด และคุณอาจ destroy existing disks และ data ที่เก็บอยู่อย่างไม่สามารถกู้คืนได้ ดังนั้นคุณต้องระมัดระวังมากเมื่อลอง raw device functionality ผมมีเพื่อนที่ทำลายแล็ปท็อปแบบนี้ จริงๆ เตือนแล้วนะ ต่อไปครับ

สร้าง disk file และ map ไป raw device

คำสั่งต่อไปนี้จะสร้าง raw disk:

sudo VBoxManage createmedium disk --filename=[file.vmdk] --format=VMDK --variant=RawDisk --property RawDrive=[device]

เรามีอะไรบ้าง?

สององค์ประกอบสำคัญที่สุดคือ:

  • filename - นี่คือไฟล์ (ในรูปแบบ VDMK) ที่ VirtualBox จะรู้จัก raw device
  • RawDrive - นี่คือ raw device จริงที่เราต้องการ map ไป filename

ตำแหน่งของไฟล์บนดิสก์ไม่สำคัญนัก แตการระบุ raw device ที่ถูกต้องสำคัญมาก ใน Linux คุณตรวจสอบ device list ด้วย fdisk คุณต้องรู้ hard disk notation และขนาดที่ถูกต้อง เริ่มด้วย fdisk -l เพื่อดู local devices ทั้งหมด จะแสดง loopback devices (เช่น snaps) ด้วย จากนั้นเมื่อเข้าใจ storage topology แล้ว สามารถ narrow down ได้ เช่น:

sudo fdisk -l /dev/nvme*

Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: Samsung SSD 980 1TB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 16384 bytes / 131072 bytes
Disklabel type: gpt
Disk identifier: C096EC37-7278-4E24-98C6-6A3906628E91

Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 1050623 1048576 512M EFI System
/dev/nvme0n1p2 1050624 4550655 3500032 1.7G Linux filesystem
/dev/nvme0n1p3 4550656 1953523711 1948973056 929.3G Linux filesystem

และคล้ายกัน:

sudo fdisk -l /dev/sdb
Disk /dev/sdb: 14.91 GiB, 16008609792 bytes, 31266816 sectors
Disk model: Cruzer Switch
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: gpt
Disk identifier: A674DC54-3E17-4C42-8B62-90E4DCE4AEB3
...

ในกรณีนี้ fdisk พิมพ์ disk model info ซึ่งมีประโยชน์มาก ทำให้ identify และแยก external USB thumb drives จาก internal hard disks ที่คุณอาจอยากหลีกเลี่ยงได้ง่าย บาง distro ยังมี GUI สำหรับดู device info:

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

ตัวอย่าง หาก thumb drive ของคุณ map ไป /dev/sdb (ใน Linux) คุณสามารถรัน raw device mapping command ได้ดังนี้:

sudo VBoxManage createmedium disk --filename=./Rdisk.vmdk --format=VMDK --variant=RawDisk --property RawDrive=/dev/sdb

นี่คือจุดที่ต้องระมัดระวังมาก เพราะต้องระบุ USB drive ให้ถูกต้อง หาก map device ผิด อาจมีปัญหาและ data loss ภายหลัง

sudo VBoxManage createmedium disk --filename=./Rdisk.vmdk --format=VMDK --variant=RawDisk --property RawDrive=/dev/sdb
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Medium created. UUID: 041a84a8-9d9a-4ae3-a4a1-5393a24f6f7d

เมื่อคำสั่งเสร็จ ให้ launch VirtualBox

เพิ่ม disk ใหม่เข้าไปในรายการ storage devices ที่พร้อมใช้งาน

ขั้นตอนต่อไปคือ attach disk ที่สร้างใหม่ สามารถทำผ่าน Hard Disk Selector tool ใน VirtualBox คลิก Tools > Media > Add หาไฟล์ VMDK และเพิ่ม แต่รอ คุณต้องมี permissions ที่ถูกต้อง เพื่อทำได้ แม้คุณจะ add disk ได้ VM อาจยังไม่ launch และอาจเจอ errors หลายอย่าง เราจะจัดการเรื่องนี้ทีละอย่าง ตอนนี้สมมติ permissions ถูกต้อง

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

เมื่อเพิ่ม disk แล้ว เปิด VM settings คลิก Storage โดย default จะมี SATA controller assigned แล้ว พร้อม disk หนึ่งตัว (VDI) เลือกมัน คลิกไอคอน + สีน้ำเงิน เพื่อเพิ่ม disk และเลือกไฟล์ VMDK หากไม่มี SATA controller ให้คลิกไอคอน + สีเขียว เพิ่ม SATA controller แล้วคลิก + สีเขียว อีกครั้งเพื่อเพิ่ม disk ในตัวอย่างด้านล่าง "final" setup ของผมมี 2 assigned disks Windows 11 (VDI format) และ Rdisk.vmdk (VMDK format) ผมลบ default virtual optical drive เพราะจะไม่บูทจาก ISO

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

สิ่งที่ผมอยากทำคือ: ผมสร้าง Windows 11 installation media ด้วย Rufus tool ยอดเยี่ยม ที่ customize installation experience ได้ เช่น ลบ nonsense บางอย่างที่มักเห็นระหว่าง Windows setup แต่ Rufus เขียน media + config เฉพาะ external devices ไม่สร้าง ISO files

ดังนั้น เพื่อทดสอบว่า Rufus ทำงานได้ ผมต้องบูท USB device ที่ไหนสักแห่ง ดูผลลัพธ์ ผมทำได้บน physical box แตไม่ใช่ easy option เสมอไป โดยเฉพาะหากต้อง format disk และ install ระบบ แทนที่จะ VM เป็น substitute สำหรับทดสอบ แตต้องบูทจาก USB drive แทน virtual CD (ISO file)

ดังนั้น ในตัวอย่างข้างต้น VM ของผมมี Windows disk (ว่าง) บวก attached raw device ซึ่งใช้เฉพาะระหว่างการติดตั้ง ทางเทคนิค คุณอาจมี multiple bootable disks attached และต้องแน่ใจว่า boot ในลำดับที่ถูกต้องใน BIOS ของ machine

Possible errors

เมื่อสร้าง raw disk ใหม่ permissions จะเป็น 0600 และ ownership root:root ใน Linux หมายความว่าคุณไม่สามารถ access ไฟล์นี้ได้ ไม่ถึงกับใช้ใน VirtualBox คุณต้องเปลี่ยน permissions โดยเพิ่ม rwx สำหรับ other users หรือเปลี่ยน ownership (ดีกว่า) เช่น:

sudo chown roger:roger file.vdmk

หรืออาจเป็น:

sudo chown roger:vboxusers file.vdmk

แต่นี้ยังไม่พอ คุณจะเจอ VERR_ACCESS_DENIED error:

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

Permission problem accessing the file for the medium 'path-to-your-vmdk-file' (VERR_ACCESS_DENIED).

Result Code: VBOX_E_FILE_ERROR (0X80BB0004)
Component: MediumWrap
Interface: IMedium {ad47ad09-787b-44ab-b343-a082a3f2dfb1}
Callee: IVirtualBox {7682d5eb-f00e-44f1-8ca2-99d08b1cd607}
Callee RC: VBOX_E_OBJECT_NOT_FOUND (0X80BB0001)

เหตุผลคือ แม้ user ของคุณ setup ถูกต้อง และเป็นสมาชิก vboxusers group คุณยังต้อง allow user เข้าถึง raw devices (disk group) แยกต่างหาก ทำได้โดย:

sudo usermod -a -G disk $USER

หลังจากนี้ logout และ login ใหม่เพื่อให้การเปลี่ยนแปลงมีผล มีวิธีทำโดยไม่ logout แต่นี้คือวิธีง่ายที่สุดสำหรับคนส่วนใหญ่ ทางเลือกอื่นทั้งใน Windows และ Linux คือ start VirtualBox ด้วย administrative privileges แต่ไม่ใช่ smart idea โดยทั่วไป เพราะทุกอย่างที่คุณทำ รวมถึง errors จะ reflect ระดับ permissions ที่สูงขึ้น

Boot และ test

ตอนนี้เราแก้ไข issues ทั้งหมดแล้ว มาดูว่าทุกอย่างทำงาน จริงๆ ผมเห็น customized boot screen ซึ่งบ่งบอกว่า Rufus ทำงานอยู่แล้ว และใน setup phase ผมเห็น hard disks ทั้งสอง ตัวเล็กที่เป็น raw device (USB drive) มี 2 partitions ไม่ใช่ installation target (ดังนั้นจึงมี risk ของ raw devices ใน VirtualBox) และ drive 1 เป็น virtual disk 100GB ว่าง ไม่มี partition table ยังไงก็ต้องระมัดระวังมากเมื่อมีมากกว่าหนึ่งตัวเลือก

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

บูท VirtualBox จาก USB Drive: คู่มือขั้นตอนละเอียด

Two drives: drive 0 คือ USB drive 16GB มี 2 partitions ไม่ใช่ installation target (ดังนั้น risk ที่เป็นไปได้ของ raw devices ใน VirtualBox); drive 1 คือ virtual disk 100GB ว่าง ไม่มี partition table ยังคงต้องระมัดระวังมากเมื่อมีมากกว่าหนึ่ง option

ข้อสรุป

ตอนนี้คุณ master tutorial นี้แล้ว คุณสามารถเริ่มเล่นจริงได้ ทดสอบ multi-disk setups ลองบูท OS ที่มีอยู่บน external (และอาจเป็น internal) devices คุณยังสามารถสร้าง multi-boot USB devices และตรวจสอบว่าทำงานถูกต้องใน VirtualBox ก่อนลองจริงบน physical hardware ในทุกกรณี ต้องระมัดระวัง เพราะ raw disk functionality แบก isolation boundary ระหว่าง physical host และ virtual guest

หวังว่ามีประโยชน์ ขั้นตอนแรกของการใช้ raw devices ใน VirtualBox คือระบุ storage medium ที่ถูกต้อง หากคุณไม่รู้วิธีหรือไม่แน่ใจ หยุดทันที จากนั้นเมื่อขั้นตอนนี้เสร็จ คุณต้องสร้าง vmdk file และ map ไป device ที่ถูกต้อง ต่อมา อาจมี permission problems และสุดท้าย attach disk และ boot VM จาก USB drive นั่นคือทั้งหมดสำหรับวันนี้ หากมีคำถาม VirtualBox อื่นๆ ส่งมาหาผม ผมอาจสร้าง fresh, raw guide ใหม่ๆ ที่นี่และนั่น แล้วพบกันใหม่

ขอแสดงความนับถือ