Reinstall.sh 脚本深度解析:Linux/Windows系统一键重装工具
2025-07-07 07:58:56作者:齐冠琰
概述
reinstall.sh 是一个功能强大的系统重装脚本,支持多种Linux发行版和Windows系统的自动化安装。该脚本设计精巧,能够在各种环境下稳定运行,包括物理机、虚拟机以及特殊环境如Alpine Linux等。
核心功能
1. 多系统支持
脚本支持以下主流操作系统:
- Linux发行版:CentOS、Debian、Ubuntu、Alpine、Arch Linux等
- Windows系统:通过指定镜像名称或ISO链接安装
- 特殊模式:DD镜像安装和netboot.xyz网络启动
2. 安装选项配置
提供丰富的安装选项:
- 密码设置(默认密码为123@@@)
- SSH密钥配置
- 端口自定义(SSH、Web、RDP等)
- 网络配置(仅Windows支持ICMP ping)
- 驱动添加(Windows专用)
技术实现细节
1. 环境检测与适配
脚本包含完善的环境检测机制:
- 判断地理位置(用于选择镜像源)
- 检测运行环境(Windows/Cygwin、Linux等)
- 识别虚拟化环境
- 检查CPU是否支持x86-64-v3指令集
is_in_region() {
[ "$force_cn" = 1 ] && return 0
# 通过访问特定URL检测地理位置
if ! _loc=$(curl -L http://www.example.com/cdn-cgi/trace | grep '^loc='); then
error_and_exit "Can not get location."
fi
[ "$_loc" = CN ]
}
2. 文件类型识别增强
脚本实现了增强的文件类型识别功能,能够准确判断各种镜像格式:
- 支持多层压缩格式(如.tar.gz)
- 特殊处理qcow2等虚拟磁盘格式
- 兼容不同系统的file命令输出差异
file_enhanced() {
# 递归解压并分析文件类型
while true; do
type="$(file -b $file | fix_file_type)"
case "$type" in
xz|gzip|zstd)
# 解压一层后继续分析
;;
*)
break
;;
esac
done
}
3. Windows系统特殊处理
针对Windows环境提供了专门的支持:
- 通过系统管理工具获取系统信息
- 处理Windows路径格式
- 支持PowerShell脚本调用
sysinfo() {
# 封装系统信息获取命令,兼容不同实现
if is_have_cmd wmic; then
command wmic "$@" /format:list
else
# 使用PowerShell脚本替代
powershell -File "$(cygpath -w "$tmp/sysinfo.ps1")" \
-Namespace "$namespace" \
-Class "$class"
fi
}
4. 错误处理与日志记录
脚本实现了完善的错误处理机制:
- 使用trap捕获错误并显示行号
- 过滤日志中的敏感信息(如密码)
- 支持重试机制(特别是网络请求)
# 错误处理函数
trap_err() {
line_no=$1
ret_no=$2
error "Line $line_no return $ret_no"
sed -n "$line_no"p "$THIS_SCRIPT"
}
# 记录日志,过滤密码信息
exec > >(tee >(grep -iv password >>/reinstall.log)) 2>&1
使用建议
-
网络环境:在特定地区使用时,脚本会自动选择本地镜像源加速下载
-
系统要求:
- 确保有足够的磁盘空间(至少1GB临时空间)
- 推荐在物理机或KVM/Xen等完整虚拟化环境中使用
-
Windows安装:
- 可通过
--image-name
指定版本 - 支持语言包选择(如
--lang=zh-cn
) - 可添加额外驱动(
--add-driver
)
- 可通过
-
高级功能:
- 使用DD模式安装自定义镜像
- 通过netboot.xyz实现网络启动
- Alpine Linux实时模式支持
常见问题解决
-
镜像下载失败:检查网络连接,或使用
--img
指定备用镜像URL -
CPU兼容性问题:部分新版系统需要x86-64-v3指令集支持,旧CPU可能无法安装
-
容器环境限制:脚本不支持在容器内直接运行,需使用专用工具
-
Windows信息获取:无系统管理工具的系统会自动使用PowerShell替代方案
总结
reinstall.sh是一个功能全面、适应性强的一键重装系统工具,其设计考虑了各种边缘情况和特殊环境。通过封装复杂的系统安装流程,它极大简化了系统部署工作,特别适合需要频繁重装系统的场景或批量部署环境。