Files
BootRepairTool/AGENTS.md
2026-02-11 02:38:52 +08:00

127 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# BootRepairTool - 项目说明
## 项目概述
**BootRepairTool** 是一个用于修复 Linux 系统 GRUB 引导的图形化工具。适用于 Live USB/CD 环境,帮助用户修复损坏的 GRUB 引导加载器。
## 项目结构
```
BootRepairTool/
├── backend.py # 后端逻辑 - 分区扫描、挂载、GRUB修复
├── frontend.py # 前端界面 - tkinter GUI
├── README.md # 项目简介
└── AGENTS.md # 本文件
```
## 技术栈
- **语言**: Python 3
- **GUI 框架**: tkinter
- **运行环境**: Linux Live USB/CD (需要 root/sudo 权限)
## 核心功能
### 1. 分区扫描 (`backend.py:scan_partitions`)
- 使用 `lsblk -J` 获取磁盘和分区信息
- 识别 EFI 系统分区 (ESP)
- 过滤 Live 系统自身的分区
### 2. 系统挂载 (`backend.py:mount_target_system`)
- 挂载根分区 (/)
- 挂载独立 /boot 分区(可选)
- 挂载 EFI 分区UEFI 模式)
- 绑定伪文件系统 (/dev, /proc, /sys, /run)
### 3. 发行版检测 (`backend.py:detect_distro_type`)
- 支持: Arch, CentOS/RHEL, Debian, Ubuntu
- 通过读取 `/etc/os-release` 识别
### 4. GRUB 修复 (`backend.py:chroot_and_repair_grub`)
- **BIOS 模式**: `grub-install /dev/sdX`
- **UEFI 模式**: `grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB`
- 更新 GRUB 配置:
- Debian/Ubuntu: `update-grub`
- Arch: `grub-mkconfig -o /boot/grub/grub.cfg`
- CentOS: `grub2-mkconfig -o /boot/grub2/grub.cfg`
### 5. 卸载清理 (`backend.py:unmount_target_system`)
- 逆序卸载绑定的文件系统
- 卸载 EFI/boot/根分区
- 清理临时挂载点
## 前端界面 (`frontend.py`)
### 主要组件
1. **分区选择区域**
- 根分区 (/) - 必选
- 独立 /boot 分区 - 可选
- EFI 系统分区 (ESP) - UEFI 模式下推荐
2. **目标磁盘选择**
- 物理磁盘选择 (如 /dev/sda)
- UEFI 模式复选框(自动检测 Live 环境)
3. **日志窗口**
- 彩色日志输出(信息/警告/错误/成功)
- 自动滚动
### 工作流程
```
扫描分区 → 用户选择分区 → 点击修复 → 挂载系统 →
检测发行版 → chroot修复GRUB → 卸载分区 → 完成
```
### 线程安全
修复过程在独立线程中运行,避免 UI 卡死。使用 `master.after()` 进行线程安全的日志更新。
## 代码规范
### 后端函数返回值
所有后端函数统一返回 `(success: bool, ..., error_message: str)` 格式:
```python
# 示例
success, stdout, stderr = run_command([...])
success, disks, partitions, efi_parts, err = scan_partitions()
```
### 错误处理
- 命令执行失败时自动清理已挂载的分区
- 日志记录使用 `[Backend]` 前缀
- GUI 使用弹窗显示关键错误
## 使用限制
1. **需要 root 权限**: 所有磁盘操作需要 `sudo`
2. **Live 环境**: 设计为在 Live USB/CD 中运行
3. **单线程修复**: 同时只能进行一个修复任务
4. **UEFI 自动检测**: 根据 Live 环境自动设置 UEFI 模式
## 测试
直接运行 `backend.py` 可进行基础测试(仅扫描分区):
```bash
sudo python backend.py
```
完整修复测试需要取消注释 `__main__` 块中的测试代码并设置实际分区。
## 潜在改进点
1. **添加 requirements.txt**: 当前无第三方依赖
2. **国际化**: 当前仅支持中文界面
3. **配置文件**: 支持保存/加载常用配置
4. **日志持久化**: 将日志保存到文件
5. **多语言发行版支持**: 扩展 detect_distro_type
6. **Btrfs/LVM 支持**: 当前仅支持标准分区
## 注意事项
- **数据风险**: 操作磁盘有数据丢失风险,建议备份
- **EFI 分区警告**: UEFI 模式下未选择 ESP 会弹出警告
- **临时挂载点**: 使用 `/mnt_grub_repair_<timestamp>` 格式
- **依赖命令**: 需要系统中存在 `lsblk`, `mount`, `umount`, `grub-install`, `grub-mkconfig`/`update-grub`