mirror of
https://github.com/ventoy/Ventoy.git
synced 2025-08-28 00:11:15 +00:00
add support for linux vdisk(vhd/vdi/raw)
This commit is contained in:
@@ -252,7 +252,11 @@ function distro_specify_initrd_file_phase2 {
|
||||
if [ "$grub_platform" != "pc" ]; then
|
||||
vt_add_replace_file 0 "minimal\\x86_64\\rootfs.xz"
|
||||
fi
|
||||
|
||||
elif [ -f (loop)/arch/boot/x86_64/archiso.img ]; then
|
||||
vt_linux_specify_initrd_file /arch/boot/x86_64/archiso.img
|
||||
if [ "$grub_platform" != "pc" ]; then
|
||||
vt_add_replace_file 0 "EFI\\archiso\\archiso.img"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -440,6 +444,7 @@ function uefi_windows_menu_func {
|
||||
}
|
||||
|
||||
function uefi_linux_menu_func {
|
||||
|
||||
if [ "$ventoy_compatible" = "NO" ]; then
|
||||
|
||||
if [ "$ventoy_fs_probe" = "udf" ]; then
|
||||
@@ -493,6 +498,12 @@ function uefi_linux_menu_func {
|
||||
elif [ -f (loop)/boot/initramfs_x86_64.img ]; then
|
||||
vt_add_replace_file $vtindex "boot\\initramfs_x86_64.img"
|
||||
fi
|
||||
elif [ -d (loop)/parabola ]; then
|
||||
if [ -f (loop)/parabola/boot/x86_64/parabola.img ]; then
|
||||
vt_add_replace_file $vtindex "EFI\\parabola\\parabola.img"
|
||||
elif [ -f (loop)/boot/initramfs_x86_64.img ]; then
|
||||
vt_add_replace_file $vtindex "boot\\initramfs_x86_64.img"
|
||||
fi
|
||||
elif [ -f (loop)/EFI/BOOT/initrd.gz ]; then
|
||||
vt_add_replace_file $vtindex "EFI\\BOOT\\initrd.gz"
|
||||
elif [ -f (loop)/loader/entries/thinstation.conf ]; then
|
||||
@@ -508,7 +519,7 @@ function uefi_linux_menu_func {
|
||||
fi
|
||||
elif [ -d (loop)/EFI/BOOT/entries ]; then
|
||||
if [ -f (loop)/parabola/boot/x86_64/parabolaiso.img ]; then
|
||||
vt_add_replace_file 0 "EFI\\parabolaiso\\parabolaiso.img"
|
||||
vt_add_replace_file 0 "EFI\\parabolaiso\\parabolaiso.img"
|
||||
fi
|
||||
elif [ -e (loop)/syslinux/alt0/full.cz ]; then
|
||||
vt_add_replace_file 0 "EFI\\BOOT\\full.cz"
|
||||
@@ -646,9 +657,7 @@ function legacy_windows_menu_func {
|
||||
ventoy_debug_pause
|
||||
|
||||
if [ -n "$vtoy_chain_mem_addr" ]; then
|
||||
linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} ibft mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
set gfxmode=1920x1080,1366x768,1024x768,800x600,auto
|
||||
terminal_output gfxterm
|
||||
linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} ibft mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
boot
|
||||
else
|
||||
echo "chain empty failed"
|
||||
@@ -900,9 +909,7 @@ function wim_common_menuentry {
|
||||
|
||||
if [ -n "$vtoy_chain_mem_addr" ]; then
|
||||
if [ "$grub_platform" = "pc" ]; then
|
||||
linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
set gfxmode=1920x1080,1366x768,1024x768,800x600,auto
|
||||
terminal_output gfxterm
|
||||
linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
else
|
||||
ventoy_cli_console
|
||||
chainloader ${vtoy_path}/ventoy_x64.efi env_param=${env_param} isoefi=${LoadIsoEfiDriver} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
@@ -945,7 +952,6 @@ function efi_unsupport_menuentry {
|
||||
common_unsupport_menuentry
|
||||
}
|
||||
|
||||
|
||||
function vhd_common_menuentry {
|
||||
|
||||
if [ "$VTOY_VHD_NO_WARNING" != "1" ]; then
|
||||
@@ -959,17 +965,14 @@ function vhd_common_menuentry {
|
||||
fi
|
||||
|
||||
vt_chosen_img_path vt_chosen_path vt_chosen_size
|
||||
vt_patch_vhdboot ${vt_chosen_path}
|
||||
vt_patch_vhdboot $vt_chosen_path
|
||||
|
||||
ventoy_debug_pause
|
||||
|
||||
if [ -n "$vtoy_vhd_buf_addr" ]; then
|
||||
if [ "$grub_platform" = "pc" ]; then
|
||||
linux16 $vtoy_path/memdisk iso raw
|
||||
initrd16 mem:${vtoy_vhd_buf_addr}:size:${vtoy_vhd_buf_size}
|
||||
|
||||
set gfxmode=1920x1080,1366x768,1024x768,800x600,auto
|
||||
terminal_output gfxterm
|
||||
initrd16 mem:${vtoy_vhd_buf_addr}:size:${vtoy_vhd_buf_size}
|
||||
boot
|
||||
else
|
||||
ventoy_cli_console
|
||||
@@ -978,7 +981,7 @@ function vhd_common_menuentry {
|
||||
ventoy_gui_console
|
||||
fi
|
||||
else
|
||||
echo "Failed to boot vhd file"
|
||||
echo "Please put the right ventoy_vhdboot.img file to the 1st partition"
|
||||
ventoy_pause
|
||||
fi
|
||||
}
|
||||
@@ -987,6 +990,68 @@ function vhd_unsupport_menuentry {
|
||||
common_unsupport_menuentry
|
||||
}
|
||||
|
||||
function vtoyboot_common_func {
|
||||
set efigrubpart=0
|
||||
set vtoysupport=0
|
||||
|
||||
vt_get_vtoy_type ${1} vtoytype parttype efigrubpart
|
||||
|
||||
if vt_str_begin $vtoytype vhd; then
|
||||
set vtoysupport=1
|
||||
elif [ "$vtoytype" = "raw" ]; then
|
||||
set vtoysupport=1
|
||||
fi
|
||||
|
||||
if [ $vtoysupport -eq 1 ]; then
|
||||
if [ "$grub_platform" = "pc" ]; then
|
||||
if [ "$parttype" = "gpt" -a $efigrubpart -eq 0 ]; then
|
||||
echo "The OS in the vdisk was created in UEFI mode, but current is Legacy BIOS mode."
|
||||
echo "虚拟磁盘内的系统是在UEFI模式下创建的,而当前系统是Legacy BIOS模式,可能无法正常启动。"
|
||||
ventoy_pause
|
||||
fi
|
||||
else
|
||||
if [ "$parttype" = "mbr" ]; then
|
||||
echo "The OS in the vdisk was created in Legacy BIOS mode, but current is UEFI mode."
|
||||
echo "虚拟磁盘内的系统是在Legacy BIOS模式下创建的,而当前系统是UEFI模式,可能无法正常启动。"
|
||||
ventoy_pause
|
||||
fi
|
||||
fi
|
||||
|
||||
vt_img_sector ${1}
|
||||
vt_raw_chain_data ${1}
|
||||
|
||||
ventoy_debug_pause
|
||||
|
||||
if [ -n "$vtoy_chain_mem_addr" ]; then
|
||||
if [ "$grub_platform" = "pc" ]; then
|
||||
vt_acpi_param ${vtoy_chain_mem_addr} 512
|
||||
linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} sector512 mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
boot
|
||||
else
|
||||
ventoy_cli_console
|
||||
chainloader ${vtoy_path}/ventoy_x64.efi sector512 env_param=${ventoy_env_param} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
boot
|
||||
ventoy_gui_console
|
||||
fi
|
||||
else
|
||||
echo "chain empty failed!"
|
||||
ventoy_pause
|
||||
fi
|
||||
else
|
||||
echo "Unsupported vtoy type $vtoytype"
|
||||
ventoy_pause
|
||||
fi
|
||||
}
|
||||
|
||||
function vtoy_common_menuentry {
|
||||
vt_chosen_img_path vt_chosen_path vt_chosen_size
|
||||
vtoyboot_common_func ${vtoy_iso_part}${vt_chosen_path}
|
||||
}
|
||||
|
||||
function vtoy_unsupport_menuentry {
|
||||
common_unsupport_menuentry
|
||||
}
|
||||
|
||||
#
|
||||
#============================================================#
|
||||
# IMG file boot process #
|
||||
@@ -1228,10 +1293,11 @@ function img_common_menuentry {
|
||||
ventoy_img_memtest86
|
||||
fi
|
||||
else
|
||||
vt_linux_chain_data ${vtoy_iso_part}${vt_chosen_path}
|
||||
if [ "$grub_platform" = "pc" ]; then
|
||||
img_unsupport_tip
|
||||
else
|
||||
vt_linux_chain_data ${vtoy_iso_part}${vt_chosen_path}
|
||||
linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} sector512 mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
boot
|
||||
else
|
||||
chainloader ${vtoy_path}/ventoy_x64.efi sector512 env_param=${env_param} isoefi=${LoadIsoEfiDriver} FirstTry=${FirstTryBootFile} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
boot
|
||||
fi
|
||||
@@ -1355,6 +1421,7 @@ else
|
||||
set gfxpayload=keep
|
||||
fi
|
||||
|
||||
|
||||
if [ "$vtoy_display_mode" = "CLI" ]; then
|
||||
terminal_output console
|
||||
elif [ "$vtoy_display_mode" = "serial" ]; then
|
||||
@@ -1382,14 +1449,14 @@ fi
|
||||
export theme
|
||||
export gfxmode
|
||||
export vtoydev
|
||||
export vtoy_path
|
||||
export vtdebug_flag
|
||||
export vtoy_iso_part
|
||||
export vtoy_efi_part
|
||||
export VENTOY_VERSION
|
||||
export VTOY_CUR_VIDEO_MODE
|
||||
|
||||
|
||||
|
||||
|
||||
#colect all image files (iso files)
|
||||
set ventoy_img_count=0
|
||||
vt_list_img $vtoy_iso_part ventoy_img_count
|
||||
|
Reference in New Issue
Block a user