diff --git a/__pycache__/backend.cpython-36.pyc b/__pycache__/backend.cpython-36.pyc deleted file mode 100644 index 9535b7c..0000000 Binary files a/__pycache__/backend.cpython-36.pyc and /dev/null differ diff --git a/__pycache__/backend.cpython-39.pyc b/__pycache__/backend.cpython-39.pyc index 7a03b56..3242a64 100644 Binary files a/__pycache__/backend.cpython-39.pyc and b/__pycache__/backend.cpython-39.pyc differ diff --git a/__pycache__/frontend.cpython-36.pyc b/__pycache__/frontend.cpython-36.pyc deleted file mode 100644 index 79f542a..0000000 Binary files a/__pycache__/frontend.cpython-36.pyc and /dev/null differ diff --git a/backend.py b/backend.py index f5734d0..f88d111 100644 --- a/backend.py +++ b/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: