# Linux 存储管理器 (Linux Storage Manager) ## 项目概述 这是一个基于 PySide6 开发的 Linux 图形化存储管理工具,提供磁盘管理、逻辑卷管理(LVM)和软 RAID 管理功能。应用程序通过调用系统命令(如 `lsblk`, `parted`, `mdadm`, `lvm` 等)与 Linux 存储子系统交互。 ### 主要功能模块 1. **块设备管理** - 查看磁盘信息、创建分区、格式化文件系统(ext4/xfs/ntfs/fat32)、挂载/卸载设备 2. **LVM 管理** - 物理卷(PV)、卷组(VG)、逻辑卷(LV)的创建、删除和扩容 3. **RAID 管理** - 软 RAID 阵列的创建、删除和监控(支持 RAID0/1/5/6/10) ## 技术栈 - **GUI 框架**: PySide6 (Qt for Python) - **UI 设计**: Qt Designer (form.ui) - **构建工具**: PyInstaller - **依赖库**: - PySide6 - GUI 框架 - pexpect - 交互式命令执行(用于 RAID 创建时的密码输入) ## 项目结构 ``` . ├── mainwindow.py # 应用程序入口,主窗口逻辑,连接各模块 ├── ui_form.py # 由 form.ui 自动生成的 UI 类 ├── form.ui # Qt Designer UI 定义文件(主界面布局) ├── dialogs.py # 自定义对话框(分区创建、挂载、RAID/LVM 创建等) ├── system_info.py # 系统信息获取模块(lsblk 解析等) ├── disk_operations.py # 磁盘操作(分区、格式化、挂载管理) ├── lvm_operations.py # LVM 操作(PV/VG/LV 管理) ├── raid_operations.py # RAID 操作(mdadm 命令封装) ├── occupation_resolver.py # 设备占用检测与解除(嵌套挂载、进程占用) ├── logger_config.py # 日志配置(输出到 QTextEdit 控件) ├── pyproject.toml # PySide6 项目配置文件 ├── disk-manager.spec # PyInstaller 打包配置 └── build-app.sh # 构建脚本 ``` ## 模块依赖关系 ``` mainwindow.py ├── ui_form.py (UI 布局) ├── system_info.py (系统信息) ├── logger_config.py (日志) ├── disk_operations.py (磁盘操作) │ └── 依赖 system_info.py, lvm_operations.py ├── raid_operations.py (RAID 操作) │ └── 依赖 system_info.py ├── lvm_operations.py (LVM 操作) ├── occupation_resolver.py (占用解决) │ └── 依赖 lvm_operations.py, system_info.py └── dialogs.py (对话框) └── 依赖 logger_config.py ``` ## 代码组织规范 ### 文件命名 - 模块文件使用下划线命名法:`disk_operations.py`, `lvm_operations.py` - UI 相关文件:`form.ui`(设计源文件), `ui_form.py`(自动生成) ### 类命名规范 - 主窗口类:`MainWindow` - UI 类:`Ui_MainWindow`(Qt 自动生成) - 操作类:`DiskOperations`, `LvmOperations`, `RaidOperations` - 对话框类:`CreatePartitionDialog`, `MountDialog`, `CreateRaidDialog` - 工具类:`SystemInfoManager`, `OccupationResolver` ### 命令执行模式 所有系统命令执行都通过 `_execute_shell_command` 或 `_run_command` 方法封装,统一处理: - sudo 权限提升 - 错误处理和日志记录 - QMessageBox 错误提示(可抑制) ## 构建和运行 ### 运行环境要求 - Linux 操作系统(需要 root/sudo 权限执行存储管理命令) - Python 3.x - 系统依赖:`parted`, `mdadm`, `lvm2`, `dosfstools`, `e2fsprogs`, `xfsprogs`, `ntfs-3g` ### 安装依赖 ```bash pip install PySide6 pexpect ``` ### 运行应用 ```bash python mainwindow.py ``` 注意:大部分功能需要 root 权限,建议以 sudo 运行或确保用户有 sudo 权限。 ### 打包可执行文件 ```bash # 使用 PyInstaller sudo pyinstaller -F --name "disk-manager" mainwindow.py # 或使用提供的脚本 sudo ./build-app.sh ``` 打包后的可执行文件位于 `dist/disk-manager`。 ## 开发注意事项 ### UI 修改流程 1. 使用 Qt Designer 编辑 `form.ui` 2. 使用 `pyside6-uic form.ui -o ui_form.py` 重新生成 Python UI 文件 3. 或在 Qt Creator 中配置 PySide6 项目自动处理 ### 日志系统 - 使用 `logger_config.py` 中配置的全局 logger - 日志同时输出到控制台和 GUI 的 QTextEdit 控件 - 日志级别:`logging.DEBUG`(开发时可调整) ### 线程安全 - 格式化操作使用 `FormatWorker` 在后台线程执行,避免阻塞 UI - 通过 Qt Signal/Slot 机制与主线程通信 ### 错误处理 - 所有 shell 命令执行都有统一的错误处理 - 关键错误会弹出 QMessageBox 提示用户 - 详细错误信息写入日志 ## 系统命令依赖 应用依赖以下 Linux 命令行工具: | 功能 | 命令 | |------|------| | 块设备信息 | `lsblk` | | 分区操作 | `parted`, `partprobe` | | 文件系统 | `mkfs.ext4`, `mkfs.xfs`, `mkfs.ntfs`, `mkfs.vfat` | | 挂载管理 | `mount`, `umount`, `findmnt` | | RAID 管理 | `mdadm` | | LVM 管理 | `pvcreate`, `vgcreate`, `lvcreate`, `pvs`, `vgs`, `lvs` 等 | | 进程查询 | `lsof`, `fuser` | ## 安全考虑 1. **权限要求**: 应用需要 root/sudo 权限执行存储管理操作 2. **危险操作确认**: 格式化、删除分区/卷等操作都有确认对话框 3. **设备占用检测**: `OccupationResolver` 模块检测并解除设备占用(卸载挂载点、停止进程)后才执行操作 4. **fstab 备份**: 修改 `/etc/fstab` 前建议用户手动备份 ## 已知限制 - 仅支持 Linux 系统 - 需要图形桌面环境 - 部分操作(如 RAID 创建)可能需要密码输入 - 不支持 LVM/RAID 的降级恢复等高级场景 ## 调试建议 1. 查看日志输出(GUI 底部 QTextEdit 或控制台) 2. 检查系统命令是否安装:`which parted mdadm lvm` 3. 手动测试命令:`sudo lsblk -J` 4. 检查权限:确保用户有 sudo 权限或已切换到 root