This commit is contained in:
zj
2026-02-12 03:02:18 +08:00
parent e454acf9cd
commit 9633050d0b

View File

@@ -2217,11 +2217,19 @@ def chroot_and_repair_grub(mount_point: str, target_disk: str,
# 方法2: 如果 /boot 是独立分区,尝试在挂载的主机路径创建 # 方法2: 如果 /boot 是独立分区,尝试在挂载的主机路径创建
if not os.path.exists(grubenv_path): 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 分区的情况) # 尝试多种可能的路径(处理独立 /boot 分区的情况)
possible_grubenv_paths = [ possible_grubenv_paths = [
grubenv_path, # 标准路径 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", "grub2", "grubenv"),
os.path.join(mount_point, "boot", "grub", "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, "grub2", "grubenv"),
os.path.join(mount_point, "grub", "grubenv"), os.path.join(mount_point, "grub", "grubenv"),
] ]
@@ -2233,6 +2241,14 @@ def chroot_and_repair_grub(mount_point: str, target_disk: str,
break break
else: 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: for test_path in possible_grubenv_paths:
try: try:
dir_path = os.path.dirname(test_path) dir_path = os.path.dirname(test_path)