From 0d556f01c400eaaeecf85f809d0ceef2792c2074 Mon Sep 17 00:00:00 2001 From: MacRimi Date: Tue, 4 Mar 2025 19:07:23 +0100 Subject: [PATCH] Update --- .../docs/storage/disk-passthrough-vm/page.tsx | 66 ++++++++++-------- web/public/disk/disk-assigment.png | Bin 0 -> 28373 bytes 2 files changed, 38 insertions(+), 28 deletions(-) create mode 100644 web/public/disk/disk-assigment.png diff --git a/web/app/docs/storage/disk-passthrough-vm/page.tsx b/web/app/docs/storage/disk-passthrough-vm/page.tsx index fb377f4..8aa3b47 100644 --- a/web/app/docs/storage/disk-passthrough-vm/page.tsx +++ b/web/app/docs/storage/disk-passthrough-vm/page.tsx @@ -2,65 +2,75 @@ import { Steps } from "@/components/ui/steps" import CopyableCode from "@/components/CopyableCode" export const metadata = { - title: "Disk Passthrough to a VM | ProxMenux Documentation", - description: "Step-by-step guide to configure disk passthrough to a virtual machine in Proxmox VE using ProxMenux.", + title: "Import Disk Image to a VM | ProxMenux Documentation", + description: "Step-by-step guide to import a disk image into a virtual machine in Proxmox VE using ProxMenux.", } -export default function DiskPassthroughVM() { +export default function ImportDiskImageVM() { return (
-

Disk Passthrough to a VM

+

Import Disk Image to a VM

- This guide explains how to assign physical disks to virtual machines (VMs) in Proxmox VE using ProxMenux. - Disk passthrough allows a VM to have direct access to a physical disk, providing improved performance and compatibility for certain applications. + This guide explains how to import a disk image into a virtual machine (VM) in Proxmox VE using ProxMenux. + The script simplifies the process by scanning for available disk images and allowing users to attach them to VMs without manual configuration.

Overview

The script automates the following steps:

    -
  1. Lists available physical disks on the Proxmox host, excluding the system disk.
  2. +
  3. Scans for disk images (.img, .qcow2, .vmdk) in /var/lib/vz/template/images/.
  4. Displays a list of available virtual machines (VMs) for selection.
  5. -
  6. Allows the user to select multiple disks to assign to a VM.
  7. -
  8. Ensures selected disks are not already in use by another VM.
  9. -
  10. Configures the selected disks for passthrough to the chosen VM.
  11. +
  12. Allows users to choose one or multiple disk images for import.
  13. +
  14. Provides storage volume options for placing the imported disk.
  15. +
  16. Offers an interface choice (SATA, SCSI, VirtIO, or IDE) for each imported disk.
  17. +
  18. Imports and attaches the selected disk images to the chosen VM.

Implementation Steps

- - Disk Selection Menu -

The script scans the system and displays a list of available physical disks, excluding the system disk.

+ +

Ensure that the disk images you want to import are placed in /var/lib/vz/template/images/.

-

The user selects the virtual machine (VM) to which the disk(s) will be assigned.

+

Select the VM where the disk image(s) will be imported.

- -

The script performs the following actions:

+ +

Choose the Proxmox storage volume where the imported disk(s) will be placed.

+
+ +

Select one or more disk images to import from the list of detected compatible images.

+
+ +

For each selected image:

    -
  • Ensures the selected disk is not in use by another VM.
  • -
  • Provides an interface choice (SATA, SCSI, VirtIO, or IDE).
  • -
  • Automatically configures the disk passthrough and assigns it to the VM.
  • +
  • Choose the interface type (SATA, SCSI, VirtIO, or IDE).
  • +
  • Optionally enable SSD emulation (for non-VirtIO interfaces).
  • +
  • Decide whether to make the disk bootable.
- -

The script verifies the operation and confirms the successful disk passthrough.

+ +

The script will import each selected disk image and display real-time progress updates.

+
+ +

After the import is complete, the script attaches the disks to the VM and applies the selected settings.

Expected Results

Important Considerations

diff --git a/web/public/disk/disk-assigment.png b/web/public/disk/disk-assigment.png new file mode 100644 index 0000000000000000000000000000000000000000..9bf015c193e7c365b60b9c20b30eb06dea957bd8 GIT binary patch literal 28373 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 K2