fix
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
41
backend.py
41
backend.py
@@ -881,7 +881,20 @@ def detect_distro_type(mount_point: str) -> str:
|
||||
return "unknown"
|
||||
|
||||
|
||||
def check_chroot_environment(mount_point: str) -> Tuple[bool, str]:
|
||||
def _get_grub_package_install_cmd(distro_type: str) -> str:
|
||||
"""获取安装 GRUB 包的命令提示"""
|
||||
package_commands = {
|
||||
"centos": "yum install grub2-tools grub2-pc",
|
||||
"fedora": "dnf install grub2-tools grub2-pc",
|
||||
"debian": "apt-get install grub-pc",
|
||||
"ubuntu": "apt-get install grub-pc",
|
||||
"arch": "pacman -S grub",
|
||||
"opensuse": "zypper install grub2",
|
||||
}
|
||||
return package_commands.get(distro_type, "安装 GRUB 包(请查阅发行版文档)")
|
||||
|
||||
|
||||
def check_chroot_environment(mount_point: str, distro_type: str = "unknown") -> Tuple[bool, str]:
|
||||
"""
|
||||
检查 chroot 环境是否可用。
|
||||
检测可用的 GRUB 命令及其版本。
|
||||
@@ -902,8 +915,27 @@ def check_chroot_environment(mount_point: str) -> Tuple[bool, str]:
|
||||
log_debug(f" ✗ 未找到命令: {cmd}")
|
||||
|
||||
if not found_commands:
|
||||
log_error(f"chroot 环境中未找到关键的 GRUB 命令")
|
||||
return False, "chroot 环境中缺少 GRUB 命令"
|
||||
log_error(f"=" * 60)
|
||||
log_error(f"chroot 环境中未找到关键的 GRUB 命令!")
|
||||
log_error(f"")
|
||||
log_error(f"目标系统缺少 GRUB 引导加载器。")
|
||||
log_error(f"")
|
||||
log_error(f"解决方案:")
|
||||
log_error(f"1. 进入目标系统的 chroot 环境")
|
||||
log_error(f"2. 安装 GRUB 包:")
|
||||
install_cmd = _get_grub_package_install_cmd(distro_type)
|
||||
log_error(f" {install_cmd}")
|
||||
log_error(f"")
|
||||
log_error(f"3. 然后重新运行此工具")
|
||||
log_error(f"=" * 60)
|
||||
|
||||
error_msg = (
|
||||
f"目标系统缺少 GRUB 工具。\n"
|
||||
f"请先安装 GRUB 包:\n"
|
||||
f"{install_cmd}\n"
|
||||
f"然后重新运行修复工具。"
|
||||
)
|
||||
return False, error_msg
|
||||
|
||||
# 检查 grub-install 版本(优先使用 grub2-install 如果存在)
|
||||
grub_cmd = "grub2-install" if "grub2-install" in found_commands else "grub-install"
|
||||
@@ -1048,7 +1080,7 @@ def chroot_and_repair_grub(mount_point: str, target_disk: str,
|
||||
return False, f"无效的目标磁盘路径: {target_disk}"
|
||||
|
||||
# 检查 chroot 环境
|
||||
ok, err = check_chroot_environment(mount_point)
|
||||
ok, err = check_chroot_environment(mount_point, distro_type)
|
||||
if not ok:
|
||||
return False, err
|
||||
|
||||
@@ -1118,6 +1150,7 @@ def chroot_and_repair_grub(mount_point: str, target_disk: str,
|
||||
run_command(grub_install_cmd + ["--no-nvram"], "安装标准模式 (no-nvram)", timeout=60)
|
||||
else:
|
||||
log_warning(f"removable 模式失败,尝试标准模式")
|
||||
|
||||
install_errors.append(f"removable 模式: {stderr}")
|
||||
|
||||
if not grub_install_success:
|
||||
|
||||
Reference in New Issue
Block a user