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"
|
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 环境是否可用。
|
检查 chroot 环境是否可用。
|
||||||
检测可用的 GRUB 命令及其版本。
|
检测可用的 GRUB 命令及其版本。
|
||||||
@@ -902,8 +915,27 @@ def check_chroot_environment(mount_point: str) -> Tuple[bool, str]:
|
|||||||
log_debug(f" ✗ 未找到命令: {cmd}")
|
log_debug(f" ✗ 未找到命令: {cmd}")
|
||||||
|
|
||||||
if not found_commands:
|
if not found_commands:
|
||||||
log_error(f"chroot 环境中未找到关键的 GRUB 命令")
|
log_error(f"=" * 60)
|
||||||
return False, "chroot 环境中缺少 GRUB 命令"
|
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-install 版本(优先使用 grub2-install 如果存在)
|
||||||
grub_cmd = "grub2-install" if "grub2-install" in found_commands else "grub-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}"
|
return False, f"无效的目标磁盘路径: {target_disk}"
|
||||||
|
|
||||||
# 检查 chroot 环境
|
# 检查 chroot 环境
|
||||||
ok, err = check_chroot_environment(mount_point)
|
ok, err = check_chroot_environment(mount_point, distro_type)
|
||||||
if not ok:
|
if not ok:
|
||||||
return False, err
|
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)
|
run_command(grub_install_cmd + ["--no-nvram"], "安装标准模式 (no-nvram)", timeout=60)
|
||||||
else:
|
else:
|
||||||
log_warning(f"removable 模式失败,尝试标准模式")
|
log_warning(f"removable 模式失败,尝试标准模式")
|
||||||
|
|
||||||
install_errors.append(f"removable 模式: {stderr}")
|
install_errors.append(f"removable 模式: {stderr}")
|
||||||
|
|
||||||
if not grub_install_success:
|
if not grub_install_success:
|
||||||
|
|||||||
Reference in New Issue
Block a user