14
This commit is contained in:
16
backend.py
16
backend.py
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user