diff --git a/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.c b/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.c
index dc73764d..857e7415 100644
--- a/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.c
+++ b/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.c
@@ -53,15 +53,27 @@ ventoy_sector_flag *g_sector_flag = NULL;
 UINT32 g_sector_flag_num = 0;
 static grub_env_get_pf grub_env_get = NULL;
 
+EFI_FILE_OPEN g_original_fopen = NULL;
+EFI_FILE_CLOSE g_original_fclose = NULL;
+EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME g_original_open_volume = NULL;
+
+ventoy_grub_param_file_replace *g_file_replace_list = NULL;
+ventoy_efi_file_replace g_efi_file_replace;
+
+CHAR16 gFirstTryBootFile[256] = {0};
+
 CONST CHAR16 gIso9660EfiDriverPath[] = ISO9660_EFI_DRIVER_PATH;
 
 /* Boot filename */
+UINTN gBootFileStartIndex = 1;
 CONST CHAR16 *gEfiBootFileName[] = 
 {
+    L"@",
     EFI_REMOVABLE_MEDIA_FILE_NAME,
     L"\\EFI\\BOOT\\GRUBX64.EFI",
     L"\\EFI\\BOOT\\BOOTx64.EFI",
     L"\\EFI\\BOOT\\bootx64.efi",
+    L"\\efi\\boot\\bootx64.efi",
 };
 
 /* EFI block device vendor device path GUID */
@@ -886,6 +898,7 @@ static int ventoy_update_image_location(ventoy_os_param *param)
 STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
 {   
     UINT32 i = 0;
+    UINT32 old_cnt = 0;
     UINTN size = 0;
     UINT8 chksum = 0;
     CHAR16 *pPos = NULL;
@@ -915,8 +928,33 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
         gLoadIsoEfi = TRUE;
     }
 
+    pPos = StrStr(pCmdLine, L"FirstTry=@");
+    if (pPos)
+    {
+        pPos += StrLen(L"FirstTry=");
+        for (i = 0; i < ARRAY_SIZE(gFirstTryBootFile); i++, pPos++)
+        {
+            if (*pPos != L' ' && *pPos != L'\t' && *pPos)
+            {
+                gFirstTryBootFile[i] = (*pPos == '@') ? '\\' : *pPos;
+            }
+            else
+            {
+                break;
+            }
+        }
+
+        gEfiBootFileName[0] = gFirstTryBootFile;
+        gBootFileStartIndex = 0;
+    }
+
     debug("cmdline:<%s>", pCmdLine);
 
+    if (gFirstTryBootFile[0])
+    {
+        debug("First Try:<%s>", gFirstTryBootFile);
+    }
+
     pPos = StrStr(pCmdLine, L"env_param=");
     if (!pPos)
     {
@@ -926,6 +964,18 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
     pGrubParam = (ventoy_grub_param *)StrHexToUintn(pPos + StrLen(L"env_param="));
     grub_env_get = pGrubParam->grub_env_get;
 
+    g_file_replace_list = &pGrubParam->file_replace;
+    old_cnt = g_file_replace_list->old_file_cnt;
+    debug("file replace: magic:0x%x virtid:%u name count:%u <%a> <%a> <%a> <%a>",
+        g_file_replace_list->magic,
+        g_file_replace_list->new_file_virtual_id,
+        old_cnt,
+        old_cnt > 0 ? g_file_replace_list->old_file_name[0] : "",
+        old_cnt > 1 ? g_file_replace_list->old_file_name[1] : "",
+        old_cnt > 2 ? g_file_replace_list->old_file_name[2] : "",
+        old_cnt > 3 ? g_file_replace_list->old_file_name[3] : ""
+        );
+
     pPos = StrStr(pCmdLine, L"mem:");
     g_chain = (ventoy_chain_head *)StrHexToUintn(pPos + 4);
 
@@ -970,8 +1020,85 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
     return EFI_SUCCESS;
 }
 
+EFI_STATUS EFIAPI ventoy_wrapper_file_open
+(
+    EFI_FILE_HANDLE This, 
+    EFI_FILE_HANDLE *New,
+    CHAR16 *Name, 
+    UINT64 Mode, 
+    UINT64 Attributes
+)
+{
+    UINT32 i = 0;
+    UINT32 j = 0;
+    UINT64 Sectors = 0;
+    EFI_STATUS Status = EFI_SUCCESS;
+    CHAR8 TmpName[256];
+    ventoy_virt_chunk *virt = NULL;
+
+    Status = g_original_fopen(This, New, Name, Mode, Attributes);
+    if (EFI_ERROR(Status))
+    {
+        return Status;
+    }
+
+    if (g_file_replace_list && g_file_replace_list->magic == GRUB_FILE_REPLACE_MAGIC &&
+        g_file_replace_list->new_file_virtual_id < g_virt_chunk_num)
+    {
+        AsciiSPrint(TmpName, sizeof(TmpName), "%s", Name);
+        for (j = 0; j < 4; j++)
+        {
+            if (0 == AsciiStrCmp(g_file_replace_list[i].old_file_name[j], TmpName))
+            {
+                g_original_fclose(*New);
+                *New = &g_efi_file_replace.WrapperHandle;
+                ventoy_wrapper_file_procotol(*New);
+
+                virt = g_virt_chunk + g_file_replace_list->new_file_virtual_id;
+
+                Sectors = (virt->mem_sector_end - virt->mem_sector_start) + (virt->remap_sector_end - virt->remap_sector_start);
+                
+                g_efi_file_replace.BlockIoSectorStart = virt->mem_sector_start;
+                g_efi_file_replace.FileSizeBytes = Sectors * 2048;
+
+                if (gDebugPrint)
+                {
+                    debug("## ventoy_wrapper_file_open <%s> BlockStart:%lu Sectors:%lu Bytes:%lu", Name,
+                        g_efi_file_replace.BlockIoSectorStart, Sectors, Sectors * 2048);
+                    sleep(3);
+                }
+                
+                return Status;
+            }
+        }
+    }
+
+    return Status;
+}
+
+EFI_STATUS EFIAPI ventoy_wrapper_open_volume
+(
+    IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL     *This,
+    OUT EFI_FILE_PROTOCOL                 **Root
+)
+{
+    EFI_STATUS Status = EFI_SUCCESS;
+    
+    Status = g_original_open_volume(This, Root);
+    if (!EFI_ERROR(Status))
+    {
+        g_original_fopen = (*Root)->Open;
+        g_original_fclose = (*Root)->Close;
+        (*Root)->Open = ventoy_wrapper_file_open;
+    }
+
+    return Status;
+}
+
+
 EFI_STATUS EFIAPI ventoy_boot(IN EFI_HANDLE ImageHandle)
 {
+    UINTN t = 0;
     UINTN i = 0;
     UINTN j = 0;
     UINTN Find = 0;
@@ -982,78 +1109,99 @@ EFI_STATUS EFIAPI ventoy_boot(IN EFI_HANDLE ImageHandle)
     EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *pFile = NULL;
     EFI_DEVICE_PATH_PROTOCOL *pDevPath = NULL;
 
-    Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiSimpleFileSystemProtocolGuid, 
+    for (t = 0; t < 3; t++)
+    {
+        Count = 0;
+        Handles = NULL;
+
+        Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiSimpleFileSystemProtocolGuid, 
                                      NULL, &Count, &Handles);
-    if (EFI_ERROR(Status))
-    {
-        return Status;
-    }
-
-    debug("ventoy_boot fs count:%u", Count);
-
-    for (i = 0; i < Count; i++)
-    {
-        Status = gBS->HandleProtocol(Handles[i], &gEfiSimpleFileSystemProtocolGuid, (VOID **)&pFile);
         if (EFI_ERROR(Status))
         {
-            continue;
+            return Status;
         }
 
-        Status = gBS->OpenProtocol(Handles[i], &gEfiDevicePathProtocolGuid, 
-                                   (VOID **)&pDevPath,
-                                   ImageHandle,
-                                   Handles[i],
-                                   EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-        if (EFI_ERROR(Status))
-        {
-            debug("Failed to open device path protocol %r", Status);
-            continue;
-        }
+        debug("ventoy_boot fs count:%u", Count);
 
-        debug("Handle:%p FS DP: <%s>", Handles[i], ConvertDevicePathToText(pDevPath, FALSE, FALSE));
-        if (CompareMem(gBlockData.Path, pDevPath, gBlockData.DevicePathCompareLen))
+        for (i = 0; i < Count; i++)
         {
-            debug("Not ventoy disk file system");
-            continue;
-        }
-
-        for (j = 0; j < ARRAY_SIZE(gEfiBootFileName); j++)
-        {
-            Status = ventoy_load_image(ImageHandle, pDevPath, gEfiBootFileName[j], 
-                                       StrSize(gEfiBootFileName[j]), &Image);
-            if (EFI_SUCCESS == Status)
+            Status = gBS->HandleProtocol(Handles[i], &gEfiSimpleFileSystemProtocolGuid, (VOID **)&pFile);
+            if (EFI_ERROR(Status))
             {
+                continue;
+            }
+
+            debug("FS:%u Protocol:%p  OpenVolume:%p", i, pFile, pFile->OpenVolume);
+
+            Status = gBS->OpenProtocol(Handles[i], &gEfiDevicePathProtocolGuid, 
+                                       (VOID **)&pDevPath,
+                                       ImageHandle,
+                                       Handles[i],
+                                       EFI_OPEN_PROTOCOL_GET_PROTOCOL);
+            if (EFI_ERROR(Status))
+            {
+                debug("Failed to open device path protocol %r", Status);
+                continue;
+            }
+
+            debug("Handle:%p FS DP: <%s>", Handles[i], ConvertDevicePathToText(pDevPath, FALSE, FALSE));
+            if (CompareMem(gBlockData.Path, pDevPath, gBlockData.DevicePathCompareLen))
+            {
+                debug("Not ventoy disk file system");
+                continue;
+            }
+
+            for (j = gBootFileStartIndex; j < ARRAY_SIZE(gEfiBootFileName); j++)
+            {
+                Status = ventoy_load_image(ImageHandle, pDevPath, gEfiBootFileName[j], 
+                                           StrSize(gEfiBootFileName[j]), &Image);
+                if (EFI_SUCCESS == Status)
+                {
+                    break;
+                }
+                debug("Failed to load image %r <%s>", Status, gEfiBootFileName[j]);
+            }
+
+            if (j >= ARRAY_SIZE(gEfiBootFileName))
+            {
+                continue;
+            }
+
+            Find++;
+            debug("Find boot file, now try to boot .....");
+            ventoy_debug_pause();
+
+            if (gDebugPrint)
+            {
+                gST->ConIn->Reset(gST->ConIn, FALSE);
+                //ventoy_wrapper_system();
+            }
+
+            if (g_file_replace_list && g_file_replace_list->magic == GRUB_FILE_REPLACE_MAGIC)
+            {
+                g_original_open_volume = pFile->OpenVolume;
+                pFile->OpenVolume = ventoy_wrapper_open_volume;
+            }
+            
+            Status = gBS->StartImage(Image, NULL, NULL);
+            if (EFI_ERROR(Status))
+            {
+                debug("Failed to start image %r", Status);
+                sleep(3);
+                gBS->UnloadImage(Image);
                 break;
             }
-            debug("Failed to load image %r <%s>", Status, gEfiBootFileName[j]);
         }
 
-        if (j >= ARRAY_SIZE(gEfiBootFileName))
-        {
-            continue;
-        }
+        FreePool(Handles);
 
-        Find++;
-        debug("Find boot file, now try to boot .....");
-        ventoy_debug_pause();
-
-        if (gDebugPrint)
+        if (Find == 0)
         {
-            gST->ConIn->Reset(gST->ConIn, FALSE);
-        }
-        
-        Status = gBS->StartImage(Image, NULL, NULL);
-        if (EFI_ERROR(Status))
-        {
-            debug("Failed to start image %r", Status);
-            sleep(3);
-            gBS->UnloadImage(Image);
-            break;
+            debug("Fs not found, now wait and retry...");
+            sleep(2);
         }
     }
 
-    FreePool(Handles);
-
     if (Find == 0)
     {
         return EFI_NOT_FOUND;
@@ -1190,9 +1338,21 @@ EFI_STATUS EFIAPI VentoyEfiMain
         Status = ventoy_boot(ImageHandle);
         if (EFI_NOT_FOUND == Status)
         {
-            gST->ConOut->OutputString(gST->ConOut, L"No bootfile found for UEFI!\r\n");
-            gST->ConOut->OutputString(gST->ConOut, L"Maybe the image does not support " VENTOY_UEFI_DESC  L"!\r\n");
-            sleep(300);
+            if (!gLoadIsoEfi)
+            {
+                gLoadIsoEfi = TRUE;
+                ventoy_find_iso_disk_fs(ImageHandle);
+                ventoy_load_isoefi_driver(ImageHandle);
+
+                Status = ventoy_boot(ImageHandle);
+            }
+
+            if (EFI_NOT_FOUND == Status)
+            {
+                gST->ConOut->OutputString(gST->ConOut, L"No bootfile found for UEFI!\r\n");
+                gST->ConOut->OutputString(gST->ConOut, L"Maybe the image does not support " VENTOY_UEFI_DESC  L"!\r\n");
+                sleep(60);
+            }
         }
 
         ventoy_clean_env();
diff --git a/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.h b/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.h
index 00986319..eb22e772 100644
--- a/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.h
+++ b/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.h
@@ -205,6 +205,7 @@ typedef struct vtoy_block_data
 #define ISO9660_EFI_DRIVER_PATH  L"\\ventoy\\iso9660_x64.efi"
 
 #define debug(expr, ...) if (gDebugPrint) VtoyDebug("[VTOY] "expr"\r\n", ##__VA_ARGS__)
+#define trace(expr, ...) VtoyDebug("[VTOY] "expr"\r\n", ##__VA_ARGS__)
 #define sleep(sec) gBS->Stall(1000000 * (sec))
 
 #define ventoy_debug_pause() \
@@ -219,9 +220,32 @@ if (gDebugPrint) \
 typedef const char * (*grub_env_get_pf)(const char *name);
 
 #pragma pack(1)
+
+#define GRUB_FILE_REPLACE_MAGIC  0x1258BEEF
+
+typedef struct ventoy_efi_file_replace
+{
+    UINT64 BlockIoSectorStart;
+
+    UINT64 CurPos;
+    UINT64 FileSizeBytes;
+
+    EFI_FILE_PROTOCOL  WrapperHandle;
+}ventoy_efi_file_replace;
+
+typedef struct ventoy_grub_param_file_replace
+{
+    UINT32 magic;
+    char   old_file_name[4][256];
+    UINT32 old_file_cnt;
+    UINT32 new_file_virtual_id;
+}ventoy_grub_param_file_replace;
+
 typedef struct ventoy_grub_param
 {
     grub_env_get_pf grub_env_get;
+
+    ventoy_grub_param_file_replace file_replace;
 }ventoy_grub_param;
 
 typedef struct ventoy_ram_disk
@@ -233,8 +257,44 @@ typedef struct ventoy_ram_disk
 #pragma pack()
 
 
+typedef struct well_known_guid 
+{
+	EFI_GUID *guid;
+	const char *name;
+}well_known_guid;
+
+typedef struct ventoy_system_wrapper
+{
+    EFI_LOCATE_PROTOCOL NewLocateProtocol;
+    EFI_LOCATE_PROTOCOL OriLocateProtocol;
+
+    EFI_HANDLE_PROTOCOL NewHandleProtocol;
+    EFI_HANDLE_PROTOCOL OriHandleProtocol;
+    
+    EFI_OPEN_PROTOCOL NewOpenProtocol;
+    EFI_OPEN_PROTOCOL OriOpenProtocol;
+} ventoy_system_wrapper;
+
+#define ventoy_wrapper(bs, wrapper, func, newfunc) \
+{\
+    wrapper.Ori##func = bs->func;\
+    wrapper.New##func = newfunc;\
+    bs->func = wrapper.New##func;\
+}
+
+extern ventoy_efi_file_replace g_efi_file_replace;
 extern BOOLEAN gDebugPrint;
 VOID EFIAPI VtoyDebug(IN CONST CHAR8  *Format, ...);
+EFI_STATUS EFIAPI ventoy_wrapper_system(VOID);
+EFI_STATUS EFIAPI ventoy_wrapper_file_procotol(EFI_FILE_PROTOCOL *File);
+EFI_STATUS EFIAPI ventoy_block_io_read 
+(
+    IN EFI_BLOCK_IO_PROTOCOL          *This,
+    IN UINT32                          MediaId,
+    IN EFI_LBA                         Lba,
+    IN UINTN                           BufferSize,
+    OUT VOID                          *Buffer
+);
 
 #endif
 
diff --git a/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.inf b/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.inf
index 98f999ad..1db9b218 100644
--- a/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.inf
+++ b/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.inf
@@ -28,6 +28,7 @@
 [Sources]
   Ventoy.h
   Ventoy.c
+  VentoyDebug.c
 
 [Packages]
   MdePkg/MdePkg.dec
@@ -42,6 +43,7 @@
 [Guids]
   gShellVariableGuid
   gEfiVirtualCdGuid
+  gEfiFileInfoGuid
   
 [Protocols]
   gEfiLoadedImageProtocolGuid
@@ -49,3 +51,30 @@
   gEfiDevicePathProtocolGuid
   gEfiSimpleFileSystemProtocolGuid
   gEfiRamDiskProtocolGuid
+  gEfiAbsolutePointerProtocolGuid
+  gEfiAcpiTableProtocolGuid
+  gEfiBlockIo2ProtocolGuid
+  gEfiBusSpecificDriverOverrideProtocolGuid
+  gEfiComponentNameProtocolGuid
+  gEfiComponentName2ProtocolGuid
+  gEfiDriverBindingProtocolGuid
+  gEfiDiskIoProtocolGuid
+  gEfiDiskIo2ProtocolGuid
+  gEfiGraphicsOutputProtocolGuid
+  gEfiHiiConfigAccessProtocolGuid
+  gEfiHiiFontProtocolGuid
+  gEfiLoadFileProtocolGuid
+  gEfiLoadFile2ProtocolGuid
+  gEfiLoadedImageProtocolGuid
+  gEfiLoadedImageDevicePathProtocolGuid
+  gEfiPciIoProtocolGuid
+  gEfiSerialIoProtocolGuid
+  gEfiSimpleTextInProtocolGuid
+  gEfiSimpleTextInputExProtocolGuid
+  gEfiSimpleTextOutProtocolGuid
+  
+  
+  
+  
+  
+  
diff --git a/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/VentoyDebug.c b/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/VentoyDebug.c
new file mode 100644
index 00000000..4c595b46
--- /dev/null
+++ b/EDK2/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/VentoyDebug.c
@@ -0,0 +1,325 @@
+/******************************************************************************
+ * Ventoy.c
+ *
+ * Copyright (c) 2020, longpanda <admin@ventoy.net>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <Uefi.h>
+#include <Library/DebugLib.h>
+#include <Library/PrintLib.h>
+#include <Library/UefiLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DevicePathLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiApplicationEntryPoint.h>
+#include <Protocol/LoadedImage.h>
+#include <Guid/FileInfo.h>
+#include <Guid/FileSystemInfo.h>
+#include <Protocol/BlockIo.h>
+#include <Protocol/RamDisk.h>
+#include <Protocol/SimpleFileSystem.h>
+#include <Ventoy.h>
+
+STATIC ventoy_system_wrapper g_system_wrapper;
+
+static struct well_known_guid g_efi_well_known_guids[] = 
+{
+	{ &gEfiAbsolutePointerProtocolGuid, "AbsolutePointer" },
+	{ &gEfiAcpiTableProtocolGuid, "AcpiTable" },
+	{ &gEfiBlockIoProtocolGuid, "BlockIo" },
+	{ &gEfiBlockIo2ProtocolGuid, "BlockIo2" },
+	{ &gEfiBusSpecificDriverOverrideProtocolGuid, "BusSpecificDriverOverride" },
+	{ &gEfiComponentNameProtocolGuid, "ComponentName" },
+	{ &gEfiComponentName2ProtocolGuid, "ComponentName2" },
+	{ &gEfiDevicePathProtocolGuid, "DevicePath" },
+	{ &gEfiDriverBindingProtocolGuid, "DriverBinding" },
+	{ &gEfiDiskIoProtocolGuid, "DiskIo" },
+	{ &gEfiDiskIo2ProtocolGuid, "DiskIo2" },
+	{ &gEfiGraphicsOutputProtocolGuid, "GraphicsOutput" },
+	{ &gEfiHiiConfigAccessProtocolGuid, "HiiConfigAccess" },
+	{ &gEfiHiiFontProtocolGuid, "HiiFont" },
+	{ &gEfiLoadFileProtocolGuid, "LoadFile" },
+	{ &gEfiLoadFile2ProtocolGuid, "LoadFile2" },
+	{ &gEfiLoadedImageProtocolGuid, "LoadedImage" },
+	{ &gEfiLoadedImageDevicePathProtocolGuid, "LoadedImageDevicePath"},
+	{ &gEfiPciIoProtocolGuid, "PciIo" },
+	{ &gEfiSerialIoProtocolGuid, "SerialIo" },
+	{ &gEfiSimpleFileSystemProtocolGuid, "SimpleFileSystem" },
+	{ &gEfiSimpleTextInProtocolGuid, "SimpleTextInput" },
+	{ &gEfiSimpleTextInputExProtocolGuid, "SimpleTextInputEx" },
+	{ &gEfiSimpleTextOutProtocolGuid, "SimpleTextOutput" },
+};
+
+STATIC CHAR8 gEfiGuidName[128];
+
+static const char * ventoy_get_guid_name(EFI_GUID *guid)
+{
+    UINTN i;
+
+    for (i = 0; i < ARRAY_SIZE(g_efi_well_known_guids); i++)
+    {
+        if (CompareGuid(g_efi_well_known_guids[i].guid, guid))
+        {
+            return g_efi_well_known_guids[i].name;
+        }
+    }
+
+    AsciiSPrint(gEfiGuidName, sizeof(gEfiGuidName), "%g", guid);
+    return gEfiGuidName;
+}
+
+EFI_STATUS EFIAPI
+ventoy_wrapper_fs_open(EFI_FILE_HANDLE This, EFI_FILE_HANDLE *New, CHAR16 *Name, UINT64 Mode, UINT64 Attributes)
+{
+    (VOID)This;
+    (VOID)New;
+    (VOID)Name;
+    (VOID)Mode;
+    (VOID)Attributes;
+    return EFI_SUCCESS;
+}
+
+EFI_STATUS EFIAPI
+ventoy_wrapper_file_open_ex(EFI_FILE_HANDLE This, EFI_FILE_HANDLE *New, CHAR16 *Name, UINT64 Mode, UINT64 Attributes, EFI_FILE_IO_TOKEN *Token)
+{
+	return ventoy_wrapper_fs_open(This, New, Name, Mode, Attributes);
+}
+
+EFI_STATUS EFIAPI
+ventoy_wrapper_file_delete(EFI_FILE_HANDLE This)
+{
+    (VOID)This;
+	return EFI_SUCCESS;
+}
+
+EFI_STATUS EFIAPI
+ventoy_wrapper_file_set_info(EFI_FILE_HANDLE This, EFI_GUID *Type, UINTN Len, VOID *Data)
+{
+	return EFI_SUCCESS;
+}
+
+EFI_STATUS EFIAPI
+ventoy_wrapper_file_flush(EFI_FILE_HANDLE This)
+{
+    (VOID)This;
+	return EFI_SUCCESS;
+}
+
+/* Ex version */
+EFI_STATUS EFIAPI
+ventoy_wrapper_file_flush_ex(EFI_FILE_HANDLE This, EFI_FILE_IO_TOKEN *Token)
+{
+    (VOID)This;
+    (VOID)Token;
+	return EFI_SUCCESS;
+}
+
+
+EFI_STATUS EFIAPI
+ventoy_wrapper_file_write(EFI_FILE_HANDLE This, UINTN *Len, VOID *Data)
+{
+    (VOID)This;
+    (VOID)Len;
+    (VOID)Data;
+
+	return EFI_WRITE_PROTECTED;
+}
+
+EFI_STATUS EFIAPI
+ventoy_wrapper_file_write_ex(IN EFI_FILE_PROTOCOL *This, IN OUT EFI_FILE_IO_TOKEN *Token)
+{
+	return ventoy_wrapper_file_write(This, &(Token->BufferSize), Token->Buffer);
+}
+
+
+static EFI_STATUS EFIAPI
+ventoy_wrapper_file_close(EFI_FILE_HANDLE This)
+{
+    (VOID)This;
+    return EFI_SUCCESS;
+}
+
+
+static EFI_STATUS EFIAPI
+ventoy_wrapper_file_set_pos(EFI_FILE_HANDLE This, UINT64 Position)
+{
+    (VOID)This;
+    
+    g_efi_file_replace.CurPos = Position;
+    return EFI_SUCCESS;
+}
+
+static EFI_STATUS EFIAPI
+ventoy_wrapper_file_get_pos(EFI_FILE_HANDLE This, UINT64 *Position)
+{
+    (VOID)This;
+
+    *Position = g_efi_file_replace.CurPos;
+
+    return EFI_SUCCESS;
+}
+
+
+static EFI_STATUS EFIAPI
+ventoy_wrapper_file_get_info(EFI_FILE_HANDLE This, EFI_GUID *Type, UINTN *Len, VOID *Data)
+{
+    EFI_FILE_INFO *Info = (EFI_FILE_INFO *) Data;
+
+    debug("ventoy_wrapper_file_get_info ... %u", *Len);
+
+    if (!CompareGuid(Type, &gEfiFileInfoGuid))
+    {
+        return EFI_INVALID_PARAMETER;
+    }
+
+    if (*Len == 0)
+    {
+        *Len = 384;
+        return EFI_BUFFER_TOO_SMALL;
+    }
+
+    ZeroMem(Data, sizeof(EFI_FILE_INFO));
+
+    Info->Size = sizeof(EFI_FILE_INFO);
+    Info->FileSize = g_efi_file_replace.FileSizeBytes;
+    Info->PhysicalSize = g_efi_file_replace.FileSizeBytes;
+    Info->Attribute = EFI_FILE_READ_ONLY;
+    //Info->FileName = EFI_FILE_READ_ONLY;
+
+    *Len = Info->Size;
+    
+    return EFI_SUCCESS;
+}
+
+static EFI_STATUS EFIAPI
+ventoy_wrapper_file_read(EFI_FILE_HANDLE This, UINTN *Len, VOID *Data)
+{
+    EFI_LBA Lba;
+    UINTN ReadLen = *Len;
+    
+    (VOID)This;
+
+    debug("ventoy_wrapper_file_read ... %u", *Len);
+
+    if (g_efi_file_replace.CurPos + ReadLen > g_efi_file_replace.FileSizeBytes)
+    {
+        ReadLen = g_efi_file_replace.FileSizeBytes - g_efi_file_replace.CurPos;
+    }
+
+    Lba = g_efi_file_replace.CurPos / 2048 + g_efi_file_replace.BlockIoSectorStart;
+
+    ventoy_block_io_read(NULL, 0, Lba, ReadLen, Data);
+
+    *Len = ReadLen;
+
+    g_efi_file_replace.CurPos += ReadLen;
+
+    return EFI_SUCCESS;
+}
+
+
+EFI_STATUS EFIAPI
+ventoy_wrapper_file_read_ex(IN EFI_FILE_PROTOCOL *This, IN OUT EFI_FILE_IO_TOKEN *Token)
+{
+	return ventoy_wrapper_file_read(This, &(Token->BufferSize), Token->Buffer);
+}
+
+EFI_STATUS EFIAPI ventoy_wrapper_file_procotol(EFI_FILE_PROTOCOL *File)
+{
+    File->Revision    = EFI_FILE_PROTOCOL_REVISION2;
+    File->Open        = ventoy_wrapper_fs_open;
+    File->Close       = ventoy_wrapper_file_close;
+    File->Delete      = ventoy_wrapper_file_delete;
+    File->Read        = ventoy_wrapper_file_read;
+    File->Write       = ventoy_wrapper_file_write;
+    File->GetPosition = ventoy_wrapper_file_get_pos;
+    File->SetPosition = ventoy_wrapper_file_set_pos;
+    File->GetInfo     = ventoy_wrapper_file_get_info;
+    File->SetInfo     = ventoy_wrapper_file_set_info;
+    File->Flush       = ventoy_wrapper_file_flush;
+    File->OpenEx      = ventoy_wrapper_file_open_ex;
+    File->ReadEx      = ventoy_wrapper_file_read_ex;
+    File->WriteEx     = ventoy_wrapper_file_write_ex;
+    File->FlushEx     = ventoy_wrapper_file_flush_ex;
+
+    return EFI_SUCCESS;
+}
+
+STATIC EFI_STATUS EFIAPI ventoy_handle_protocol
+(
+    IN  EFI_HANDLE                Handle,
+    IN  EFI_GUID                 *Protocol,
+    OUT VOID                    **Interface
+)
+{
+    EFI_STATUS Status = EFI_SUCCESS;
+    
+    debug("ventoy_handle_protocol:%a", ventoy_get_guid_name(Protocol)); 
+    Status = g_system_wrapper.OriHandleProtocol(Handle, Protocol, Interface);
+
+    if (CompareGuid(Protocol, &gEfiSimpleFileSystemProtocolGuid))
+    {
+        EFI_FILE_PROTOCOL *FileProtocol = NULL;
+        EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *pFile = *((EFI_SIMPLE_FILE_SYSTEM_PROTOCOL **)(Interface));
+        
+        pFile->OpenVolume(pFile, &FileProtocol);
+        
+        debug("Handle FS Protocol: %p OpenVolume:%p, FileProtocol:%p, Open:%p", 
+            pFile, pFile->OpenVolume, FileProtocol, FileProtocol->Open); 
+
+        sleep(3);
+    }
+
+    return Status;
+}
+
+STATIC EFI_STATUS EFIAPI ventoy_open_protocol
+(
+    IN  EFI_HANDLE                 Handle,
+    IN  EFI_GUID                  *Protocol,
+    OUT VOID                     **Interface, OPTIONAL
+    IN  EFI_HANDLE                 AgentHandle,
+    IN  EFI_HANDLE                 ControllerHandle,
+    IN  UINT32                     Attributes
+)
+{
+    debug("ventoy_open_protocol:%a", ventoy_get_guid_name(Protocol));
+    return g_system_wrapper.OriOpenProtocol(Handle, Protocol, Interface, AgentHandle, ControllerHandle, Attributes);
+}
+
+STATIC EFI_STATUS EFIAPI ventoy_locate_protocol
+(
+    IN  EFI_GUID   *Protocol,
+    IN  VOID       *Registration, OPTIONAL
+    OUT VOID      **Interface
+)
+{
+    debug("ventoy_locate_protocol:%a", ventoy_get_guid_name(Protocol));
+    return g_system_wrapper.OriLocateProtocol(Protocol, Registration, Interface);
+}
+
+EFI_STATUS EFIAPI ventoy_wrapper_system(VOID)
+{
+    ventoy_wrapper(gBS, g_system_wrapper, LocateProtocol, ventoy_locate_protocol);
+    ventoy_wrapper(gBS, g_system_wrapper, HandleProtocol, ventoy_handle_protocol);
+    ventoy_wrapper(gBS, g_system_wrapper, OpenProtocol,    ventoy_open_protocol);
+
+    return EFI_SUCCESS;
+}
+
diff --git a/GRUB2/grub-2.04/grub-core/fs/fat.c b/GRUB2/grub-2.04/grub-core/fs/fat.c
index 2b26a8cb..6338d49e 100644
--- a/GRUB2/grub-2.04/grub-core/fs/fat.c
+++ b/GRUB2/grub-2.04/grub-core/fs/fat.c
@@ -558,7 +558,7 @@ grub_fat_read_data (grub_disk_t disk, grub_fshelp_node_t node,
 	  if (next_cluster >= node->data->cluster_eof_mark)
 	    return ret;
 
-	  if (next_cluster < 2 || next_cluster >= node->data->num_clusters)
+	  if (next_cluster < 2 || (next_cluster - 2) >= node->data->num_clusters)
 	    {
 	      grub_error (GRUB_ERR_BAD_FS, "invalid cluster %u",
 			  next_cluster);
@@ -1409,7 +1409,7 @@ int grub_fat_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_i
                 return 0;
             }
 
-            if (next_cluster < 2 || next_cluster >= node->data->num_clusters)
+            if (next_cluster < 2 || (next_cluster - 2) >= node->data->num_clusters)
             {
                 grub_error (GRUB_ERR_BAD_FS, "invalid cluster %u", next_cluster);
                 return -1;
diff --git a/GRUB2/grub-2.04/grub-core/ventoy/ventoy.c b/GRUB2/grub-2.04/grub-core/ventoy/ventoy.c
index d79532f0..ba1ec345 100644
--- a/GRUB2/grub-2.04/grub-core/ventoy/ventoy.c
+++ b/GRUB2/grub-2.04/grub-core/ventoy/ventoy.c
@@ -65,7 +65,7 @@ grub_uint32_t g_ventoy_cpio_size = 0;
 cpio_newc_header *g_ventoy_initrd_head = NULL;
 grub_uint8_t *g_ventoy_runtime_buf = NULL;
 
-ventoy_grub_param g_grub_param;
+ventoy_grub_param *g_grub_param = NULL;
 
 ventoy_guid  g_ventoy_guid = VENTOY_GUID;
 
@@ -1085,6 +1085,8 @@ static grub_err_t ventoy_cmd_img_sector(grub_extcmd_context_t ctxt, int argc, ch
 
     grub_file_close(file);
 
+    grub_memset(&g_grub_param->file_replace, 0, sizeof(g_grub_param->file_replace));
+
     VENTOY_CMD_RETURN(GRUB_ERR_NONE);
 }
 
@@ -1109,6 +1111,33 @@ static grub_err_t ventoy_cmd_dump_img_sector(grub_extcmd_context_t ctxt, int arg
     VENTOY_CMD_RETURN(GRUB_ERR_NONE);
 }
 
+static grub_err_t ventoy_cmd_add_replace_file(grub_extcmd_context_t ctxt, int argc, char **args)
+{
+    int i;
+    ventoy_grub_param_file_replace *replace = NULL;
+    
+    (void)ctxt;
+    (void)argc;
+    (void)args;
+
+    if (argc >= 2)
+    {
+        replace = &(g_grub_param->file_replace);
+        replace->magic = GRUB_FILE_REPLACE_MAGIC;
+            
+        replace->old_name_cnt = 0;
+        for (i = 0; i < 4 && i + 1 < argc; i++)
+        {
+            replace->old_name_cnt++;
+            grub_snprintf(replace->old_file_name[i], sizeof(replace->old_file_name[i]), "%s", args[i + 1]);
+        }
+        
+        replace->new_file_virtual_id = (grub_uint32_t)grub_strtoul(args[0], NULL, 10);
+    }
+
+    VENTOY_CMD_RETURN(GRUB_ERR_NONE);
+}
+
 grub_file_t ventoy_grub_file_open(enum grub_file_type type, const char *fmt, ...)
 {
     va_list ap;
@@ -1162,10 +1191,14 @@ static int ventoy_env_init(void)
     grub_env_set("vtdebug_flag", "");
 
     ventoy_filt_register(0, ventoy_wrapper_open);
-    
-    g_grub_param.grub_env_get = grub_env_get;
-    grub_snprintf(buf, sizeof(buf), "%p", &g_grub_param);
-    grub_env_set("env_param", buf);
+
+    g_grub_param = (ventoy_grub_param *)grub_zalloc(sizeof(ventoy_grub_param));
+    if (g_grub_param)
+    {
+        g_grub_param->grub_env_get = grub_env_get;
+        grub_snprintf(buf, sizeof(buf), "%p", g_grub_param);
+        grub_env_set("env_param", buf);
+    }
 
     return 0;
 }
@@ -1204,6 +1237,9 @@ static cmd_para ventoy_cmds[] =
     { "vt_windows_reset",      ventoy_cmd_wimdows_reset, 0, NULL, "", "", NULL },
     { "vt_windows_locate_wim", ventoy_cmd_wimdows_locate_wim, 0, NULL, "", "", NULL },
     { "vt_windows_chain_data", ventoy_cmd_windows_chain_data, 0, NULL, "", "", NULL },
+
+    { "vt_add_replace_file", ventoy_cmd_add_replace_file, 0, NULL, "", "", NULL },
+
     
     { "vt_load_plugin", ventoy_cmd_load_plugin, 0, NULL, "", "", NULL },
 };
diff --git a/GRUB2/grub-2.04/include/grub/ventoy.h b/GRUB2/grub-2.04/include/grub/ventoy.h
index da696c33..1044005d 100644
--- a/GRUB2/grub-2.04/include/grub/ventoy.h
+++ b/GRUB2/grub-2.04/include/grub/ventoy.h
@@ -183,9 +183,22 @@ typedef struct ventoy_img_chunk_list
 typedef const char * (*grub_env_get_pf)(const char *name);
 
 #pragma pack(1)
+
+#define GRUB_FILE_REPLACE_MAGIC  0x1258BEEF
+
+typedef struct ventoy_grub_param_file_replace
+{
+    grub_uint32_t magic;
+    char old_file_name[4][256];
+    grub_uint32_t old_name_cnt;
+    grub_uint32_t new_file_virtual_id;
+}ventoy_grub_param_file_replace;
+
 typedef struct ventoy_grub_param
 {
     grub_env_get_pf grub_env_get;
+
+    ventoy_grub_param_file_replace file_replace;
 }ventoy_grub_param;
 
 #pragma pack()
diff --git a/IMG/cpio/ventoy/hook/alt/udev_disk_hook.sh b/IMG/cpio/ventoy/hook/alt/udev_disk_hook.sh
new file mode 100644
index 00000000..d886a245
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/alt/udev_disk_hook.sh
@@ -0,0 +1,46 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+if is_ventoy_hook_finished || not_ventoy_disk "${1:0:-1}"; then
+    exit 0
+fi
+
+ventoy_udev_disk_common_hook $* "noreplace"
+
+if ! [ -e $VTOY_DM_PATH ]; then
+    blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/')
+    mknod -m 0666 $VTOY_DM_PATH b $blkdev_num
+fi
+
+# 
+# We do a trick for ATL series here.
+# Use /dev/loop7 and wapper it as a cdrom with bind mount.
+# Then the installer will accept /dev/loop7 as the install medium.
+#
+ventoy_copy_device_mapper  /dev/loop7
+$BUSYBOX_PATH/mkdir -p /tmp/loop7/device/
+echo 5 > /tmp/loop7/device/type
+$BUSYBOX_PATH/mount --bind /tmp/loop7 /sys/block/loop7 >> $VTLOG 2>&1
+
+
+# OK finish
+set_ventoy_hook_finish
+
diff --git a/IMG/cpio/ventoy/hook/alt/ventoy-hook.sh b/IMG/cpio/ventoy/hook/alt/ventoy-hook.sh
new file mode 100644
index 00000000..3fabb01e
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/alt/ventoy-hook.sh
@@ -0,0 +1,24 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. $VTOY_PATH/hook/ventoy-os-lib.sh
+
+ventoy_systemd_udevd_work_around
+
+ventoy_add_udev_rule "$VTOY_PATH/hook/alt/udev_disk_hook.sh %k"
diff --git a/IMG/cpio/ventoy/hook/clear/disk-hook.sh b/IMG/cpio/ventoy/hook/clear/disk-hook.sh
new file mode 100644
index 00000000..8ee05793
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/clear/disk-hook.sh
@@ -0,0 +1,43 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+if is_ventoy_hook_finished; then
+    exit 0
+fi
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
+
+PATH=$VTPATH_OLD
+
+set_ventoy_hook_finish
diff --git a/IMG/cpio/ventoy/hook/clear/ventoy-hook.sh b/IMG/cpio/ventoy/hook/clear/ventoy-hook.sh
new file mode 100644
index 00000000..a73b7027
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/clear/ventoy-hook.sh
@@ -0,0 +1,22 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. $VTOY_PATH/hook/ventoy-os-lib.sh
+
+$SED "/find_and_mount_installer *$/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/clear/disk-hook.sh" -i  /init
diff --git a/IMG/cpio/ventoy/hook/debian/deepin-disk.sh b/IMG/cpio/ventoy/hook/debian/deepin-disk.sh
new file mode 100644
index 00000000..926e1a50
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/deepin-disk.sh
@@ -0,0 +1,47 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+vtmountpoint=$1
+
+if is_ventoy_hook_finished; then
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
+
+$BUSYBOX_PATH/mount -t iso9660 $VTOY_DM_PATH $vtmountpoint
+
+# OK finish
+set_ventoy_hook_finish
diff --git a/IMG/cpio/ventoy/hook/debian/deepin-hook.sh b/IMG/cpio/ventoy/hook/debian/deepin-hook.sh
new file mode 100644
index 00000000..deec6405
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/deepin-hook.sh
@@ -0,0 +1,47 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+drop_initramfs_workaround() {
+    mainfilelist=$($FIND / -name 9990-main.sh)
+    
+    echo "mainfilelist=$mainfilelist" >> $VTLOG
+    
+    if [ -z "$mainfilelist" ]; then 
+        return
+    fi
+
+    for vtfile in $mainfilelist; do
+        vtcnt=$($GREP -c 'panic.*Unable to find a medium' $vtfile)
+        if [ $vtcnt -ne 1 ]; then
+            return
+        fi
+    done
+    
+    echo "direct_hook insert ..." >> $VTLOG
+    
+    for vtfile in $mainfilelist; do
+        $SED "s#panic.*Unable to find a medium.*#$BUSYBOX_PATH/sh  $VTOY_PATH/hook/debian/deepin-disk.sh \$mountpoint; livefs_root=\$mountpoint#" -i $vtfile
+    done
+}
+
+ventoy_systemd_udevd_work_around
+ventoy_add_udev_rule "$VTOY_PATH/hook/debian/udev_disk_hook.sh %k"
+
+drop_initramfs_workaround
+
diff --git a/IMG/cpio/ventoy/hook/debian/knoppix-disk.sh b/IMG/cpio/ventoy/hook/debian/knoppix-disk.sh
new file mode 100644
index 00000000..047ea6c2
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/knoppix-disk.sh
@@ -0,0 +1,43 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
+
+if ! [ -e $VTOY_DM_PATH ]; then
+    blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/')
+    mknod -m 0666 $VTOY_DM_PATH b $blkdev_num
+fi
+
+PATH=$VTPATH_OLD
+
diff --git a/IMG/cpio/ventoy/hook/debian/knoppix-hook.sh b/IMG/cpio/ventoy/hook/debian/knoppix-hook.sh
new file mode 100644
index 00000000..b57fd15f
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/knoppix-hook.sh
@@ -0,0 +1,23 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+$SED '/^findknoppix/a\ return 0'  -i /init
+$SED '/^findknoppix/a\ trymount $ROOTDEV /mnt-system >/dev/null 2>&1'  -i /init
+$SED '/^findknoppix/a\ ROOTDEV=/dev/mapper/ventoy'  -i /init
+$SED "/^findknoppix/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/knoppix-disk.sh"  -i /init
diff --git a/IMG/cpio/ventoy/hook/debian/porteus-disk.sh b/IMG/cpio/ventoy/hook/debian/porteus-disk.sh
new file mode 100644
index 00000000..c16aa9e4
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/porteus-disk.sh
@@ -0,0 +1,77 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+
+ventoy_os_install_dmsetup_by_fuse() {
+    vtlog "ventoy_os_install_dmsetup_by_fuse $*"
+
+    mkdir -p $VTOY_PATH/mnt/fuse $VTOY_PATH/mnt/iso $VTOY_PATH/mnt/squashfs
+
+    vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
+    vtoy_fuse_iso -f $VTOY_PATH/ventoy_dm_table -m $VTOY_PATH/mnt/fuse
+
+    mount -t iso9660  $VTOY_PATH/mnt/fuse/ventoy.iso    $VTOY_PATH/mnt/iso
+    
+    sfsfile=$(ls $VTOY_PATH/mnt/iso/porteus/base/*kernel.xzm)
+    
+    mount -t squashfs $sfsfile  $VTOY_PATH/mnt/squashfs
+
+    KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/md/dm-mod.ko*)
+    vtlog "insmod $KoName"
+    insmod $KoName 
+
+    umount $VTOY_PATH/mnt/squashfs
+    umount $VTOY_PATH/mnt/iso
+    umount $VTOY_PATH/mnt/fuse
+}
+
+ventoy_os_install_dmsetup() {
+    vtlog "ventoy_os_install_dmsetup"
+    
+    if grep -q 'device-mapper' /proc/devices; then
+        vtlog "device-mapper module already loaded"
+        return;
+    fi
+    
+    vtKerVer=$(uname -r)
+    
+    ventoy_os_install_dmsetup_by_fuse $1 $vtKerVer
+}
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_os_install_dmsetup $vtdiskname
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
+
+PATH=$VTPATH_OLD
+
diff --git a/IMG/cpio/ventoy/hook/debian/porteus-hook.sh b/IMG/cpio/ventoy/hook/debian/porteus-hook.sh
new file mode 100644
index 00000000..689460ce
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/porteus-hook.sh
@@ -0,0 +1,48 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+porteus_hook() {
+    $SED "/searching *for *\$SGN *file/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/porteus-disk.sh"  -i $1
+    $SED "/searching *for *\$CFG *file/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/porteus-disk.sh"  -i $1
+}
+
+if $GREP -q exfat /proc/filesystems; then
+    vtPath=$($VTOY_PATH/tool/vtoydump -p $VTOY_PATH/ventoy_os_param)
+    
+    $GREP '`value from`' /usr/* -r | $AWK -F: '{print $1}' | while read vtline; do
+        echo "hooking $vtline ..." >> $VTLOG
+        $SED "s#\`value from\`#$vtPath#g"  -i $vtline
+    done
+
+else
+    for vtfile in '/init' '/linuxrc' ; do
+        if [ -e $vtfile ]; then
+            if ! $GREP -q ventoy $vtfile; then
+                echo "hooking $vtfile ..."  >> $VTLOG
+                porteus_hook $vtfile
+            fi
+        fi
+    done
+fi
+
+
+# replace blkid in system
+vtblkid=$($BUSYBOX_PATH/which blkid)
+$BUSYBOX_PATH/rm -f $vtblkid
+$BUSYBOX_PATH/cp -a $BUSYBOX_PATH/blkid $vtblkid
diff --git a/IMG/cpio/ventoy/hook/debian/puppy-disk.sh b/IMG/cpio/ventoy/hook/debian/puppy-disk.sh
new file mode 100644
index 00000000..6872f589
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/puppy-disk.sh
@@ -0,0 +1,48 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+if is_ventoy_hook_finished; then
+    exit 0
+fi
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
+
+if ! [ -e $VTOY_DM_PATH ]; then
+    blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/')
+    mknod -m 0666 $VTOY_DM_PATH b $blkdev_num
+fi
+
+PATH=$VTPATH_OLD
+
+set_ventoy_hook_finish
diff --git a/IMG/cpio/ventoy/hook/debian/puppy-hook.sh b/IMG/cpio/ventoy/hook/debian/puppy-hook.sh
new file mode 100644
index 00000000..69e18f3d
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/puppy-hook.sh
@@ -0,0 +1,22 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+$SED '1 apmedia=usbhd'  -i /init
+$SED "/^ *HAVE_PARTS=/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/puppy-disk.sh"  -i /init
+$SED "/^ *HAVE_PARTS=/a\ HAVE_PARTS='mapper/ventoy|iso9660'"  -i /init
diff --git a/IMG/cpio/ventoy/hook/debian/pve-disk.sh b/IMG/cpio/ventoy/hook/debian/pve-disk.sh
new file mode 100644
index 00000000..8ee05793
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/pve-disk.sh
@@ -0,0 +1,43 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+if is_ventoy_hook_finished; then
+    exit 0
+fi
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
+
+PATH=$VTPATH_OLD
+
+set_ventoy_hook_finish
diff --git a/IMG/cpio/ventoy/hook/debian/pve-hook.sh b/IMG/cpio/ventoy/hook/debian/pve-hook.sh
new file mode 100644
index 00000000..e54ab4ca
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/pve-hook.sh
@@ -0,0 +1,21 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+$SED "/\/sys\/block\/hd\*/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/pve-disk.sh"  -i /init
+$SED "s#/sys/block/hd\*#/sys/block/dm* /sys/block/hd*#"  -i /init
diff --git a/IMG/cpio/ventoy/hook/debian/slax-disk.sh b/IMG/cpio/ventoy/hook/debian/slax-disk.sh
new file mode 100644
index 00000000..0e0cbfb9
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/slax-disk.sh
@@ -0,0 +1,77 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+
+ventoy_os_install_dmsetup_by_fuse() {
+    vtlog "ventoy_os_install_dmsetup_by_fuse $*"
+
+    mkdir -p $VTOY_PATH/mnt/fuse $VTOY_PATH/mnt/iso $VTOY_PATH/mnt/squashfs
+
+    vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
+    vtoy_fuse_iso -f $VTOY_PATH/ventoy_dm_table -m $VTOY_PATH/mnt/fuse
+
+    mount -t iso9660  $VTOY_PATH/mnt/fuse/ventoy.iso    $VTOY_PATH/mnt/iso
+    mount -t squashfs $VTOY_PATH/mnt/iso/slax/01-core.sb  $VTOY_PATH/mnt/squashfs
+
+    KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/md/dm-mod.ko*)
+    vtlog "insmod $KoName"
+    insmod $KoName
+
+    umount $VTOY_PATH/mnt/squashfs
+    umount $VTOY_PATH/mnt/iso
+    umount $VTOY_PATH/mnt/fuse
+}
+
+
+ventoy_os_install_dmsetup() {
+    vtlog "ventoy_os_install_dmsetup"
+    
+    if grep -q 'device-mapper' /proc/devices; then
+        vtlog "device-mapper module already loaded"
+        return;
+    fi
+    
+    vtKerVer=$(uname -r)
+    
+    if modprobe fuse 2>>$VTLOG; then
+        ventoy_os_install_dmsetup_by_fuse $1 $vtKerVer
+    fi
+}
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_os_install_dmsetup $vtdiskname
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
+
+PATH=$VTPATH_OLD
+
diff --git a/IMG/cpio/ventoy/hook/debian/slax-hook.sh b/IMG/cpio/ventoy/hook/debian/slax-hook.sh
new file mode 100644
index 00000000..93790fa8
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/slax-hook.sh
@@ -0,0 +1,20 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+$SED "/find_data/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/slax-disk.sh"  -i /init
diff --git a/IMG/cpio/ventoy/hook/debian/tails-hook.sh b/IMG/cpio/ventoy/hook/debian/tails-hook.sh
new file mode 100644
index 00000000..dd880498
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/tails-hook.sh
@@ -0,0 +1,24 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+$SED "s#.*livefs_root=.*find_livefs.*#$BUSYBOX_PATH/mount -t iso9660 /dev/mapper/ventoy \$mountpoint; livefs_root=\$mountpoint#" -i /usr/lib/live/boot/9990-main.sh
+$SED "s#.*livefs_root=.*find_livefs.*#$BUSYBOX_PATH/mount -t iso9660 /dev/mapper/ventoy \$mountpoint; livefs_root=\$mountpoint#" -i /usr/bin/boot/9990-main.sh
+
+ventoy_systemd_udevd_work_around
+ventoy_add_udev_rule "$VTOY_PATH/hook/debian/udev_disk_hook.sh %k"
diff --git a/IMG/cpio/ventoy/hook/debian/veket-disk.sh b/IMG/cpio/ventoy/hook/debian/veket-disk.sh
new file mode 100644
index 00000000..38a9c050
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/veket-disk.sh
@@ -0,0 +1,88 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+if is_ventoy_hook_finished; then
+    exit 0
+fi
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+ventoy_os_install_dmsetup_by_fuse() {
+    vtlog "ventoy_os_install_dmsetup_by_fuse $*"
+
+    mkdir -p $VTOY_PATH/mnt/fuse $VTOY_PATH/mnt/iso $VTOY_PATH/mnt/squashfs
+
+    vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
+    vtoy_fuse_iso -f $VTOY_PATH/ventoy_dm_table -m $VTOY_PATH/mnt/fuse
+
+    mount -t iso9660  $VTOY_PATH/mnt/fuse/ventoy.iso    $VTOY_PATH/mnt/iso
+    
+    sfsfile=$(ls $VTOY_PATH/mnt/iso/adrv_veket*.sfs)
+    
+    mount -t squashfs $sfsfile  $VTOY_PATH/mnt/squashfs
+
+    KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/dax/dax.ko*)
+    vtlog "insmod $KoName"
+    insmod $KoName 
+    
+    KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/md/dm-mod.ko*)
+    vtlog "insmod $KoName"
+    insmod $KoName 
+
+    umount $VTOY_PATH/mnt/squashfs
+    umount $VTOY_PATH/mnt/iso
+    umount $VTOY_PATH/mnt/fuse
+}
+
+ventoy_os_install_dmsetup() {
+    vtlog "ventoy_os_install_dmsetup"
+    
+    if grep -q 'device-mapper' /proc/devices; then
+        vtlog "device-mapper module already loaded"
+        return;
+    fi
+    
+    vtKerVer=$(uname -r)
+    
+    ventoy_os_install_dmsetup_by_fuse $1 $vtKerVer
+}
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_os_install_dmsetup $vtdiskname
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
+
+blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/')
+mknod -m 0666 /dev/ventoy b $blkdev_num
+
+PATH=$VTPATH_OLD
+
+set_ventoy_hook_finish
diff --git a/IMG/cpio/ventoy/hook/debian/veket-hook.sh b/IMG/cpio/ventoy/hook/debian/veket-hook.sh
new file mode 100644
index 00000000..922e2366
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/debian/veket-hook.sh
@@ -0,0 +1,22 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+$SED '1 apmedia=usbhd'  -i /init
+$SED "/^ *HAVE_PARTS=/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/veket-disk.sh"  -i /init
+$SED "/^ *HAVE_PARTS=/a\ HAVE_PARTS='ventoy|iso9660'"  -i /init
diff --git a/IMG/cpio/ventoy/hook/pclos/disk_hook.sh b/IMG/cpio/ventoy/hook/pclos/disk_hook.sh
index ca91ac84..bf7cb9e6 100644
--- a/IMG/cpio/ventoy/hook/pclos/disk_hook.sh
+++ b/IMG/cpio/ventoy/hook/pclos/disk_hook.sh
@@ -64,6 +64,8 @@ ventoy_os_install_device_mapper() {
     fi
 }
 
+wait_for_usb_disk_ready
+
 vtdiskname=$(get_ventoy_disk_name)
 ventoy_os_install_device_mapper $vtdiskname
 
diff --git a/IMG/cpio/ventoy/hook/rhel7/ventoy-disk.sh b/IMG/cpio/ventoy/hook/rhel7/ventoy-disk.sh
new file mode 100644
index 00000000..ab1d4975
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/rhel7/ventoy-disk.sh
@@ -0,0 +1,44 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+if is_ventoy_hook_finished; then
+    exit 0
+fi
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
+
+PATH=$VTPATH_OLD
+
+set_ventoy_hook_finish
+
diff --git a/IMG/cpio/ventoy/hook/rhel7/ventoy-hook.sh b/IMG/cpio/ventoy/hook/rhel7/ventoy-hook.sh
index 6bb0664c..ca3503df 100644
--- a/IMG/cpio/ventoy/hook/rhel7/ventoy-hook.sh
+++ b/IMG/cpio/ventoy/hook/rhel7/ventoy-hook.sh
@@ -20,10 +20,12 @@
 . $VTOY_PATH/hook/ventoy-os-lib.sh
 
 ventoy_systemd_udevd_work_around
-
 ventoy_add_udev_rule "$VTOY_PATH/hook/default/udev_disk_hook.sh %k noreplace"
 
+#$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/rhel7/ventoy-disk.sh /lib/dracut/hooks/initqueue/01-ventoy-disk.sh
+
 # suppress write protected mount warning
 if [ -e /usr/sbin/anaconda-diskroot ]; then
     $SED  's/^mount $dev $repodir/mount -oro $dev $repodir/' -i /usr/sbin/anaconda-diskroot
 fi
+
diff --git a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
index 76098296..62e413b9 100644
--- a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
+++ b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
@@ -226,7 +226,7 @@ wait_for_ventoy_dm_disk_label() {
         if ls -l /dev/disk/by-label/ | $GREP -q "$DM"; then
             break
         else
-            $SLEEP 0.3
+            $SLEEP 1
         fi
     done
 }
@@ -395,7 +395,7 @@ ventoy_udev_disk_common_hook() {
     else
         vtlog "==== create ventoy device mapper failed ===="
         
-        $SLEEP 5
+        $SLEEP 3
         
         if $GREP -q "/dev/$VTDISK" /proc/mounts; then
             $GREP "/dev/$VTDISK" /proc/mounts | while read vtLine; do
diff --git a/IMG/cpio/ventoy/hook/ventoy-os-lib.sh b/IMG/cpio/ventoy/hook/ventoy-os-lib.sh
index 0be5a0a7..b5ea3bf7 100644
--- a/IMG/cpio/ventoy/hook/ventoy-os-lib.sh
+++ b/IMG/cpio/ventoy/hook/ventoy-os-lib.sh
@@ -80,14 +80,19 @@ ventoy_add_udev_rule() {
 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=869719
 #
 ventoy_systemd_udevd_work_around() {
-    VTSYSTEMUDEV="$VT_RULE_DIR_PREFIX/lib/systemd/system/systemd-udevd.service"
-    if [ -e $VTSYSTEMUDEV ]; then
-        if $GREP -q 'SystemCallArchitectures.*native' $VTSYSTEMUDEV; then
-            $SED "s/.*\(SystemCallArchitectures.*native\)/#\1/g"  -i $VTSYSTEMUDEV
+    for vtdir in 'lib' 'usr/lib'; do
+    
+        VTSYSTEMUDEV="$VT_RULE_DIR_PREFIX/$vtdir/systemd/system/systemd-udevd.service"
+        if [ -e $VTSYSTEMUDEV ]; then
+            if $GREP -q 'SystemCallArchitectures.*native' $VTSYSTEMUDEV; then
+                $SED "s/.*\(SystemCallArchitectures.*native\)/#\1/g"  -i $VTSYSTEMUDEV
+                break
+            fi
         fi
-    fi
+    done
 }
 
+
 ventoy_print_yum_repo() {
     echo "[$1]"
     echo "name=$1"
diff --git a/IMG/cpio/ventoy/hook/zeroshell/disk_hook.sh b/IMG/cpio/ventoy/hook/zeroshell/disk_hook.sh
new file mode 100644
index 00000000..55058eca
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/zeroshell/disk_hook.sh
@@ -0,0 +1,42 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+    vtlog "ventoy disk not found"
+    PATH=$VTPATH_OLD
+    exit 0
+fi
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
+
+if ! [ -e $VTOY_DM_PATH ]; then
+    blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/')
+    mknod -m 0666 $VTOY_DM_PATH b $blkdev_num
+fi
+
+PATH=$VTPATH_OLD
diff --git a/IMG/cpio/ventoy/hook/zeroshell/ventoy-hook.sh b/IMG/cpio/ventoy/hook/zeroshell/ventoy-hook.sh
new file mode 100644
index 00000000..e08252d3
--- /dev/null
+++ b/IMG/cpio/ventoy/hook/zeroshell/ventoy-hook.sh
@@ -0,0 +1,24 @@
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# 
+#************************************************************************************
+
+. $VTOY_PATH/hook/ventoy-os-lib.sh
+
+
+$SED "/while.*\$device/i\ device=/dev/mapper/ventoy"  -i /init
+$SED "/while.*\$device/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/zeroshell/disk_hook.sh"  -i /init
diff --git a/IMG/cpio/ventoy/init b/IMG/cpio/ventoy/init
index d1c331fb..c2b7b507 100644
--- a/IMG/cpio/ventoy/init
+++ b/IMG/cpio/ventoy/init
@@ -76,8 +76,19 @@ ventoy_unpack_initramfs() {
     for vtx in '1F8B zcat' '1F9E zcat' '425A bzcat' '5D00 lzcat' 'FD37 xzcat' '894C lzopcat' '0221 lz4cat' '28B5 zstdcat' '3037 cat'; do
         if [ "${vtx:0:4}" = "${vtmagic:0:4}" ]; then
             echo "vtx=$vtx" >> $VTLOG            
-            if [ $vtskip -eq 0 ]; then
-                ${vtx:5} $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
+            if [ $vtskip -eq 0 ]; then            
+                if [ "${vtx:5}" = "xzcat" ]; then
+                    rm -f $VTOY_PATH/xzlog
+                    ${vtx:5} $vtfile 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
+                    
+                    if grep -q 'corrupted data' $VTOY_PATH/xzlog; then
+                        echo 'xzcat failed, now try xzminidec...' >> $VTLOG        
+                        cat $vtfile | xzminidec | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
+                    fi
+                    
+                else
+                    ${vtx:5} $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
+                fi
             else
                 dd if=$vtfile skip=$vtskip iflag=skip_bytes status=none | ${vtx:5} | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
             fi
@@ -104,64 +115,36 @@ ventoy_unpack_initrd() {
 # This export is for busybox cpio command
 export EXTRACT_UNSAFE_SYMLINKS=1
 
-# special process
-need_xzminidec() {
-    if [ -e /initrd001 ]; then
-        testmagic=$(hexdump -n 2 -e '2/1 "%02X"' /initrd001)
+for vtfile in $(ls /initrd*); do    
+    #decompress first initrd
+    vtmagic=$(hexdump -n 2 -e '2/1 "%02X"' $vtfile)
+
+    if ventoy_is_initrd_ramdisk; then
+        ventoy_unpack_initrd $vtfile $vtmagic ${vtfile}_tmp
+        mv ${vtfile}_tmp $vtfile
+        break
     else
-        testmagic='xxxx'
+        ventoy_unpack_initramfs $vtfile 0 $vtmagic ${vtfile}_tmp
     fi
-    
-    if [ "FD37" = "${testmagic:0:4}" ]; then
-        if echo $vtkerver | grep -q 'kaspersky'; then
-            true
-        elif echo $vtkerver | grep -q 'kiosk.*Gentoo'; then
-            true
-        elif echo $vtkerver | grep -q 'porteus '; then
-            true
-        else
-            false
-        fi
-    else
-        false
-    fi
-}
 
-if need_xzminidec; then
-    echo "use xzminidec" >> $VTLOG
-    cat /initrd001 | xzminidec | cpio -idmu 2>>$VTLOG
-    rm -f /initrd001
-else
-    for vtfile in $(ls /initrd*); do    
-        #decompress first initrd
-        vtmagic=$(hexdump -n 2 -e '2/1 "%02X"' $vtfile)
-
-        if ventoy_is_initrd_ramdisk; then
-            ventoy_unpack_initrd $vtfile $vtmagic ${vtfile}_tmp
-            mv ${vtfile}_tmp $vtfile
-            break
-        else
-            ventoy_unpack_initramfs $vtfile 0 $vtmagic ${vtfile}_tmp
-        fi
-
-        #only for cpio,cpio,...,initrd sequence, initrd,cpio or initrd,initrd sequence is not supported
-        while [ -e ${vtfile}_tmp ] && [ $(stat -c '%s' ${vtfile}_tmp) -gt 512 ]; do
-            mv ${vtfile}_tmp $vtfile
-            vtdump=$(hexdump -n 512 -e '512/1 "%02X"' $vtfile)
-            vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
-            let vtoffset="(${#vtdump}-${#vtmagic})/2"
-            
-            if [ -z "$vtmagic" ]; then
-                echo "terminate with all zero data file" >> $VTLOG
-                break
-            fi
-            
-            ventoy_unpack_initramfs $vtfile $vtoffset ${vtmagic:0:4} ${vtfile}_tmp
-        done
+    #only for cpio,cpio,...,initrd sequence, initrd,cpio or initrd,initrd sequence is not supported
+    while [ -e ${vtfile}_tmp ] && [ $(stat -c '%s' ${vtfile}_tmp) -gt 512 ]; do
+        mv ${vtfile}_tmp $vtfile
+        vtdump=$(hexdump -n 512 -e '512/1 "%02X"' $vtfile)
+        vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
+        let vtoffset="(${#vtdump}-${#vtmagic})/2"
         
-        rm -f $vtfile ${vtfile}_tmp
+        if [ -z "$vtmagic" ]; then
+            echo "terminate with all zero data file" >> $VTLOG
+            break
+        fi
+        
+        ventoy_unpack_initramfs $vtfile $vtoffset ${vtmagic:0:4} ${vtfile}_tmp
     done
-fi
+    
+    rm -f $vtfile ${vtfile}_tmp
+done
+
 
 #break here for debug
 if [ "$VTOY_BREAK_LEVEL" = "02" ] || [ "$VTOY_BREAK_LEVEL" = "12" ]; then
diff --git a/IMG/cpio/ventoy/tool/vtoytool_install.sh b/IMG/cpio/ventoy/tool/vtoytool_install.sh
index c408d012..5a643b68 100644
--- a/IMG/cpio/ventoy/tool/vtoytool_install.sh
+++ b/IMG/cpio/ventoy/tool/vtoytool_install.sh
@@ -52,3 +52,12 @@ else
     $BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_32 $VTOY_PATH/tool/vtoy_unsquashfs
 fi
 
+
+if $VTOY_PATH/tool/unsquashfs_64 -t 2>>$VTLOG; then
+    echo "use unsquashfs_64" >>$VTLOG
+    $BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_64  $VTOY_PATH/tool/vtoy_unsquashfs
+else
+    echo "use unsquashfs_32" >>$VTLOG    
+    $BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_32 $VTOY_PATH/tool/vtoy_unsquashfs
+fi
+
diff --git a/IMG/cpio/ventoy/tool/xzminidec b/IMG/cpio/ventoy/tool/xzminidec
new file mode 100644
index 00000000..b2c20561
Binary files /dev/null and b/IMG/cpio/ventoy/tool/xzminidec differ
diff --git a/IMG/cpio/ventoy/ventoy.sh b/IMG/cpio/ventoy/ventoy.sh
index 727102a2..2517f0b1 100644
--- a/IMG/cpio/ventoy/ventoy.sh
+++ b/IMG/cpio/ventoy/ventoy.sh
@@ -130,6 +130,7 @@ ventoy_get_os_type() {
             echo 'xen'; return
         elif $GREP -q 'SUSE ' /etc/os-release; then
             echo 'suse'; return
+       
         fi
     fi
     
@@ -156,6 +157,14 @@ ventoy_get_os_type() {
         echo 'debian'; return
     fi
     
+    if $GREP -q 'Clear Linux ' /proc/version; then
+        echo 'clear'; return
+    fi
+    
+    if $GREP -q 'artix' /proc/version; then
+        echo 'arch'; return
+    fi
+    
     echo "default"
 }
 
diff --git a/INSTALL/EFI/BOOT/BOOTX64.EFI b/INSTALL/EFI/BOOT/BOOTX64.EFI
index 691ee80f..f939c347 100644
Binary files a/INSTALL/EFI/BOOT/BOOTX64.EFI and b/INSTALL/EFI/BOOT/BOOTX64.EFI differ
diff --git a/INSTALL/EFI/BOOT/MokManager.efi b/INSTALL/EFI/BOOT/MokManager.efi
new file mode 100644
index 00000000..af684d51
Binary files /dev/null and b/INSTALL/EFI/BOOT/MokManager.efi differ
diff --git a/INSTALL/EFI/BOOT/grubx64.efi b/INSTALL/EFI/BOOT/grubx64.efi
new file mode 100644
index 00000000..4c70a543
Binary files /dev/null and b/INSTALL/EFI/BOOT/grubx64.efi differ
diff --git a/INSTALL/EFI/BOOT/grubx64_real.efi b/INSTALL/EFI/BOOT/grubx64_real.efi
new file mode 100644
index 00000000..ea294147
Binary files /dev/null and b/INSTALL/EFI/BOOT/grubx64_real.efi differ
diff --git a/INSTALL/Ventoy2Disk.sh b/INSTALL/Ventoy2Disk.sh
index 9e6deef2..1ebf05cc 100644
--- a/INSTALL/Ventoy2Disk.sh
+++ b/INSTALL/Ventoy2Disk.sh
@@ -1,5 +1,11 @@
 #!/bin/sh
 
+OLDDIR=$PWD
+
+if ! [ -f ./tool/ventoy_lib.sh ]; then
+    cd ${0%Ventoy2Disk.sh}
+fi
+
 . ./tool/ventoy_lib.sh
 
 print_usage() {
@@ -18,12 +24,7 @@ echo '*             longpanda  admin@ventoy.net                 *'
 echo '***********************************************************'
 echo ''
 
-vtdebug "############# Ventoy2Disk ################"
-
-if ! [ -e ventoy/version ]; then
-    vterr "Please run under the correct directory!"
-    exit 1
-fi
+vtdebug "############# Ventoy2Disk $0 ################"
 
 if [ "$1" = "-i" ]; then
     MODE="install"
@@ -34,11 +35,13 @@ elif [ "$1" = "-u" ]; then
     MODE="update"
 else
     print_usage
+    cd $OLDDIR
     exit 1
 fi
 
 if ! [ -b "$2" ]; then
     print_usage
+    cd $OLDDIR
     exit 1
 fi
 
@@ -46,6 +49,7 @@ if [ -z "$SUDO_USER" ]; then
     if [ "$USER" != "root" ]; then
         vterr "EUID is $EUID root permission is required."
         echo ''
+        cd $OLDDIR
         exit 1
     fi
 fi
@@ -67,6 +71,7 @@ cd ../
 
 if ! check_tool_work_ok; then
     vterr "Some tools can not run in current system. Please check log.txt for detail."
+    cd $OLDDIR
     exit 1
 fi
 
@@ -75,17 +80,26 @@ DISK=$2
 
 if ! [ -b "$DISK" ]; then
     vterr "Disk $DISK does not exist"
+    cd $OLDDIR
     exit 1
 fi
 
 
 if [ -e /sys/class/block/${DISK#/dev/}/start ]; then
     vterr "$DISK is a partition, please use the whole disk"
+    cd $OLDDIR
     exit 1
 fi
 
+grep "^$DISK" /proc/mounts | while read mtline; do
+    mtpnt=$(echo $mtline | awk '{print $2}')
+    vtdebug "Trying to umount $mtpnt ..."
+    umount $mtpnt >/dev/null 2>&1
+done
+
 if grep "$DISK" /proc/mounts; then
     vterr "$DISK is already mounted, please umount it first!"
+    cd $OLDDIR
     exit 1
 fi
 
@@ -95,6 +109,7 @@ if [ "$MODE" = "install" ]; then
     
     if ! fdisk -v >/dev/null 2>&1; then
         vterr "fdisk is needed by ventoy installation, but is not found in the system."
+        cd $OLDDIR
         exit 1
     fi
     
@@ -105,6 +120,7 @@ if [ "$MODE" = "install" ]; then
             vtwarn "Use -u option to do a safe upgrade operation."
             vtwarn "OR if you really want to reinstall ventoy to $DISK, please use -I option."
             vtwarn ""
+            cd $OLDDIR
             exit 1
         fi
     fi
@@ -114,6 +130,7 @@ if [ "$MODE" = "install" ]; then
 
     if [ $disk_sector_num -gt 4294967296 ]; then
         vterr "$DISK is over 2TB size, MBR will not work on it."
+        cd $OLDDIR
         exit 1
     fi
 
@@ -150,7 +167,7 @@ if [ "$MODE" = "install" ]; then
         exit 1
     fi
 
-    if ! dd if=/dev/zero of=$DISK bs=1 count=512 status=none; then
+    if ! dd if=/dev/zero of=$DISK bs=1 count=512 status=none conv=fsync; then
         vterr "Write data to $DISK failed, please check whether it's in use."
         exit 1
     fi
@@ -178,15 +195,15 @@ if [ "$MODE" = "install" ]; then
 
     chmod +x ./tool/vtoy_gen_uuid
 
-    dd status=none if=./boot/boot.img of=$DISK bs=1 count=446
-    ./tool/xzcat ./boot/core.img.xz | dd status=none of=$DISK bs=512 count=2047 seek=1
-    ./tool/xzcat ./ventoy/ventoy.disk.img.xz | dd status=none of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start_sector
+    dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=446
+    ./tool/xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1
+    ./tool/xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start_sector
     
     #disk uuid
-    ./tool/vtoy_gen_uuid | dd status=none of=${DISK} seek=384 bs=1 count=16
+    ./tool/vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} seek=384 bs=1 count=16
     
     #disk signature
-    ./tool/vtoy_gen_uuid | dd status=none of=${DISK} skip=12 seek=440 bs=1 count=4
+    ./tool/vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} skip=12 seek=440 bs=1 count=4
 
     sync
 
@@ -203,6 +220,7 @@ else
         echo ""
         vtwarn "Please use -i option if you want to install ventoy to $DISK"
         echo ""
+        cd $OLDDIR
         exit 1
     fi
 
@@ -214,19 +232,20 @@ else
     read -p "Update Ventoy  $oldver ===> $curver   Continue? (y/n)"  Answer
     if [ "$Answer" != "y" ]; then
         if [ "$Answer" != "Y" ]; then
+            cd $OLDDIR
             exit 0
         fi
     fi
 
     PART2=$(get_disk_part_name $DISK 2)
     
-    dd status=none if=./boot/boot.img of=$DISK bs=1 count=440
+    dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=440
     
-    ./tool/xzcat ./boot/core.img.xz | dd status=none of=$DISK bs=512 count=2047 seek=1  
+    ./tool/xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1  
 
     disk_sector_num=$(cat /sys/block/${DISK#/dev/}/size) 
     part2_start=$(expr $disk_sector_num - $VENTOY_SECTOR_NUM)
-    ./tool/xzcat ./ventoy/ventoy.disk.img.xz | dd status=none of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start
+    ./tool/xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start
 
     sync
 
@@ -236,3 +255,5 @@ else
     
 fi
 
+cd $OLDDIR
+
diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg
index 3c939c26..d9a59fab 100644
--- a/INSTALL/grub/grub.cfg
+++ b/INSTALL/grub/grub.cfg
@@ -76,7 +76,18 @@ function distro_specify_initrd_file {
         vt_linux_specify_initrd_file /boot/initrd.xz
     elif [ -f (loop)/boot/initrd ]; then
         vt_linux_specify_initrd_file /boot/initrd
+    elif [ -f (loop)/boot/x86_64/loader/initrd ]; then
+        vt_linux_specify_initrd_file /boot/x86_64/loader/initrd
+    elif [ -f (loop)/boot/initramfs-x86_64.img ]; then
+        vt_linux_specify_initrd_file /boot/initramfs-x86_64.img
         
+
+    fi
+}
+
+function distro_specify_initrd_file_phase2 {
+    if [ -f (loop)/boot/initrd.img ]; then
+        vt_linux_specify_initrd_file /boot/initrd.img
     fi
 }
 
@@ -137,6 +148,17 @@ function uefi_linux_menu_func {
         
         distro_specify_initrd_file
         
+        vt_linux_initrd_count vtcount
+        if [ $vtcount -eq 0 ]; then
+            distro_specify_initrd_file_phase2
+            
+            if [ "$vt_efi_dir" = "NO" ]; then
+                if [ -f (loop)/efi.img ];  then
+                    vt_add_replace_file 0 "initrd"
+                fi
+            fi
+        fi
+        
         locate_initrd
     fi
     
@@ -179,6 +201,14 @@ function uefi_iso_menu_func {
     loopback loop ${1}${chosen_path}
     get_os_type (loop)
     
+    if [ -d (loop)/EFI ]; then
+        set vt_efi_dir=YES
+    elif [ -d (loop)/efi ]; then
+        set vt_efi_dir=YES
+    else
+        set vt_efi_dir=NO
+    fi
+    
     if [ -n "$vtcompat" ]; then
         set ventoy_compatible=YES
         unset vtcompat
@@ -193,6 +223,8 @@ function uefi_iso_menu_func {
     if [ "$vtoy_os" = "Windows" ]; then
         if [ "$ventoy_fs_probe" = "iso9660" ]; then
             set ventoy_compatible=YES
+        elif [ -f (loop)/HBCD_PE.ini ]; then
+            set ventoy_compatible=YES
         fi
     
         uefi_windows_menu_func  $1
@@ -279,6 +311,11 @@ function legacy_linux_menu_func {
         
         distro_specify_initrd_file
         
+        vt_linux_initrd_count vtcount
+        if [ $vtcount -eq 0 ]; then
+            distro_specify_initrd_file_phase2
+        fi
+        
         locate_initrd
     fi
     
@@ -330,7 +367,10 @@ function legacy_iso_menu_func {
     if [ "$vtoy_os" = "Windows" ]; then
         if [ "$ventoy_fs_probe" = "iso9660" ]; then
             set ventoy_compatible=YES
+        elif [ -f (loop)/HBCD_PE.ini ]; then
+            set ventoy_compatible=YES
         fi
+        
         legacy_windows_menu_func  $1
     else
         legacy_linux_menu_func  $1
@@ -355,7 +395,7 @@ function legacy_iso_memdisk {
 #############################################################
 #############################################################
 
-set VENTOY_VERSION="1.0.06"
+set VENTOY_VERSION="1.0.07"
 
 #disable timeout
 unset timeout
@@ -385,7 +425,11 @@ if [ -f $iso_path/ventoy/ventoy.json ]; then
    vt_load_plugin $iso_path
 fi
 
-terminal_output  gfxterm
+if [ -n "$vtoy_gfxmode" ]; then
+    set gfxmode=$vtoy_gfxmode
+else
+    set gfxmode=1920x1080,1366x768,1024x768
+fi
 
 if [ -n "$vtoy_theme" ]; then
     set theme=$vtoy_theme
@@ -393,11 +437,7 @@ else
     set theme=$prefix/themes/ventoy/theme.txt
 fi
 
-if [ -n "$vtoy_gfxmode" ]; then
-    set gfxmode=$vtoy_gfxmode
-else
-    set gfxmode=1024x768
-fi
+terminal_output  gfxterm
 
 #colect all image files (iso files)
 set ventoy_img_count=0
diff --git a/INSTALL/grub/i386-pc/core.img b/INSTALL/grub/i386-pc/core.img
index ce96631d..0033e1ed 100644
Binary files a/INSTALL/grub/i386-pc/core.img and b/INSTALL/grub/i386-pc/core.img differ
diff --git a/INSTALL/tool/ENROLL_THIS_KEY_IN_MOKMANAGER.cer b/INSTALL/tool/ENROLL_THIS_KEY_IN_MOKMANAGER.cer
new file mode 100644
index 00000000..81982bd7
Binary files /dev/null and b/INSTALL/tool/ENROLL_THIS_KEY_IN_MOKMANAGER.cer differ
diff --git a/INSTALL/ventoy/ipxe.krn b/INSTALL/ventoy/ipxe.krn
index b55f455c..5c0fa256 100644
Binary files a/INSTALL/ventoy/ipxe.krn and b/INSTALL/ventoy/ipxe.krn differ
diff --git a/INSTALL/ventoy/ventoy.cpio b/INSTALL/ventoy/ventoy.cpio
index cfc127bb..da7f43ef 100644
Binary files a/INSTALL/ventoy/ventoy.cpio and b/INSTALL/ventoy/ventoy.cpio differ
diff --git a/INSTALL/ventoy/ventoy_x64.efi b/INSTALL/ventoy/ventoy_x64.efi
index a8bf53e5..1b18a87b 100644
Binary files a/INSTALL/ventoy/ventoy_x64.efi and b/INSTALL/ventoy/ventoy_x64.efi differ
diff --git a/README.md b/README.md
index ebb8b1ef..47ac8419 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 Ventoy is an open source tool to create bootable USB drive for ISO files.   
 With ventoy, you don't need to format the disk again and again, you just need to copy the iso file to the USB drive and boot it.   
 You can copy many iso files at a time and ventoy will give you a boot menu to select them.  
-Both Legacy BIOS and UEFI are supported in the same way. 160+ ISO files are tested.  
+Both Legacy BIOS and UEFI are supported in the same way. 200+ ISO files are tested.  
 A "Ventoy Compatible" concept is introduced by ventoy, which can help to support any ISO file.  
 
 See http://www.ventoy.net for detail.
@@ -13,9 +13,10 @@ See http://www.ventoy.net for detail.
 * Fast (limited only by the speed of copying iso file)
 * Directly boot from iso file, no extraction needed
 * Legacy + UEFI supported in the same way
+* UEFI Secure Boot supported (since 1.0.07+) Notes
 * ISO files larger than 4GB supported
 * Native boot menu style for Legacy & UEFI
-* Most type of OS supported, 100+ iso files tested
+* Most type of OS supported, 200+ iso files tested
 * Not only boot but also complete installation process
 * "Ventoy Compatible" concept
 * Plugin Framework
diff --git a/VtoyTool/vtoydump.c b/VtoyTool/vtoydump.c
index c393ee24..ef11ce80 100644
--- a/VtoyTool/vtoydump.c
+++ b/VtoyTool/vtoydump.c
@@ -328,6 +328,11 @@ static int vtoy_find_disk_by_size(unsigned long long size, char *diskname)
     int rc = 0;
 
     dir = opendir("/sys/block");
+    if (!dir)
+    {
+        return 0;
+    }
+    
     while ((p = readdir(dir)) != NULL)
     {
         if (!vtoy_is_possible_blkdev(p->d_name))
@@ -357,6 +362,11 @@ static int vtoy_find_disk_by_guid(uint8_t *guid, char *diskname)
     uint8_t vtguid[16];
 
     dir = opendir("/sys/block");
+    if (!dir)
+    {
+        return 0;
+    }
+    
     while ((p = readdir(dir)) != NULL)
     {
         if (!vtoy_is_possible_blkdev(p->d_name))
@@ -378,6 +388,12 @@ static int vtoy_find_disk_by_guid(uint8_t *guid, char *diskname)
     return count;    
 }
 
+static int vtoy_printf_iso_path(ventoy_os_param *param)
+{
+    printf("%s\n", param->vtoy_img_path);
+    return 0;
+}
+
 static int vtoy_print_os_param(ventoy_os_param *param, char *diskname)
 {
     int   cnt = 0;
@@ -458,12 +474,13 @@ int vtoydump_main(int argc, char **argv)
 {
     int rc;
     int ch;
+    int print_path = 0;
     char filename[256] = {0};
     char diskname[256] = {0};
     char device[64] = {0};
     ventoy_os_param *param = NULL;
 
-    while ((ch = getopt(argc, argv, "c:f:v::")) != -1)
+    while ((ch = getopt(argc, argv, "c:f:p:v::")) != -1)
     {
         if (ch == 'f')
         {
@@ -477,6 +494,11 @@ int vtoydump_main(int argc, char **argv)
         {
             strncpy(device, optarg, sizeof(device) - 1);
         }
+        else if (ch == 'p')
+        {
+            print_path = 1;
+            strncpy(filename, optarg, sizeof(filename) - 1);
+        }
         else
         {
             fprintf(stderr, "Usage: %s -f datafile [ -v ] \n", argv[0]);
@@ -513,7 +535,11 @@ int vtoydump_main(int argc, char **argv)
         vtoy_dump_os_param(param);
     }
 
-    if (device[0])
+    if (print_path)
+    {
+        rc = vtoy_printf_iso_path(param);
+    }
+    else if (device[0])
     {
         rc = vtoy_check_device(param, device);
     }
diff --git a/VtoyTool/vtoytool/00/vtoytool_32 b/VtoyTool/vtoytool/00/vtoytool_32
index 098b4527..8ebeaa4b 100644
Binary files a/VtoyTool/vtoytool/00/vtoytool_32 and b/VtoyTool/vtoytool/00/vtoytool_32 differ
diff --git a/VtoyTool/vtoytool/00/vtoytool_64 b/VtoyTool/vtoytool/00/vtoytool_64
index 1f9ec62e..0bd3dca2 100644
Binary files a/VtoyTool/vtoytool/00/vtoytool_64 and b/VtoyTool/vtoytool/00/vtoytool_64 differ