From 9633050d0b4e6e1b0682d807c4c3b37358898076 Mon Sep 17 00:00:00 2001 From: zj <1052308357@qq.com> Date: Thu, 12 Feb 2026 03:02:18 +0800 Subject: [PATCH] 14 --- backend.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/backend.py b/backend.py index 1331700..2b0f0e7 100644 --- a/backend.py +++ b/backend.py @@ -2217,11 +2217,19 @@ def chroot_and_repair_grub(mount_point: str, target_disk: str, # 方法2: 如果 /boot 是独立分区,尝试在挂载的主机路径创建 if not os.path.exists(grubenv_path): + # 根据发行版确定正确的目录名 (grub2 vs grub) + if distro_type in ["centos", "rhel", "fedora", "rocky", "almalinux", "opensuse"]: + grub_dir_name = "grub2" + else: + grub_dir_name = "grub" + # 尝试多种可能的路径(处理独立 /boot 分区的情况) possible_grubenv_paths = [ grubenv_path, # 标准路径 + os.path.join(mount_point, "boot", grub_dir_name, "grubenv"), os.path.join(mount_point, "boot", "grub2", "grubenv"), os.path.join(mount_point, "boot", "grub", "grubenv"), + os.path.join(mount_point, grub_dir_name, "grubenv"), os.path.join(mount_point, "grub2", "grubenv"), os.path.join(mount_point, "grub", "grubenv"), ] @@ -2233,6 +2241,14 @@ def chroot_and_repair_grub(mount_point: str, target_disk: str, break else: # 没有找到现有文件,尝试创建 + # 首先确保首选目录存在(通过主机直接创建) + preferred_dir = os.path.join(mount_point, "boot", grub_dir_name) + try: + os.makedirs(preferred_dir, exist_ok=True) + log_info(f"✓ 确保目录存在: {preferred_dir}") + except Exception as e: + log_warning(f"创建目录失败: {e}") + for test_path in possible_grubenv_paths: try: dir_path = os.path.dirname(test_path)