## 新增功能 - 创建统一的公共函数库 (common/logging.sh, common/error_handler.sh) - 添加功能演示脚本 (common/demo_usage.sh) - 完善的使用文档 (common/README.md) ## 代码重构 - 重构所有脚本使用统一的公共库 - 为所有函数添加完整的文档注释 - 统一代码格式(4空格缩进、严格模式) - 标准化错误处理和日志输出 ## 文件重命名 - gcp/create_ai_project.sh → gcp/create_ai_projects.sh (单复数统一) - gcp/delete_all_project.sh → gcp/delete_all_projects.sh (单复数统一) - linux/install_ohmyzsh.sh → linux/install_oh_my_zsh.sh (专有名词规范) - linux/create_raid0_with_ext4.sh → linux/create_raid0_array.sh (简化命名) - common/example.sh → common/demo_usage.sh (更具描述性) ## 技术改进 - 使用 readonly 声明常量 - 启用 set -euo pipefail 严格模式 - 统一的 ANSI 颜色日志输出 - 完善的命令重试机制 - 栈追踪支持
94 lines
2.7 KiB
Bash
94 lines
2.7 KiB
Bash
#!/bin/bash
|
|
# ============================================================================
|
|
# 文件名: repartition_disks.sh
|
|
# 描述: 删除所有现有分区并创建新的 GPT 分区表(除了系统盘)
|
|
# 作者: Cloud Tools Project
|
|
# 版本: 2.0.0
|
|
# 警告: 此操作将删除目标磁盘上的所有数据
|
|
# ============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
# 获取脚本目录
|
|
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
readonly PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
|
|
# 加载公共库
|
|
source "${PROJECT_ROOT}/common/logging.sh"
|
|
source "${PROJECT_ROOT}/common/error_handler.sh"
|
|
|
|
# 检查 root 权限
|
|
check_root
|
|
|
|
#
|
|
# 检查并安装依赖工具
|
|
#
|
|
# 参数:
|
|
# $1 - 工具名称
|
|
#
|
|
check_and_install() {
|
|
local tool=$1
|
|
if ! command -v "$tool" &> /dev/null; then
|
|
log_warning "$tool 未安装,正在尝试安装..."
|
|
if command -v apt-get &> /dev/null; then
|
|
run_command "安装 $tool" bash -c "apt-get update && apt-get install -y $tool"
|
|
elif command -v yum &> /dev/null; then
|
|
run_command "安装 $tool" yum install -y "$tool"
|
|
else
|
|
log_error "无法安装 $tool,请手动安装后重试"
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
#
|
|
# 主函数 - 重新分区所有非系统盘
|
|
#
|
|
main() {
|
|
log_info "============ 磁盘重新分区程序 ============"
|
|
|
|
# 检查依赖
|
|
check_and_install lsblk
|
|
check_and_install parted
|
|
check_and_install wipefs
|
|
log_success "所有依赖已满足"
|
|
|
|
# 获取系统盘
|
|
local system_disk
|
|
system_disk=$(mount | grep " / " | cut -d' ' -f1 | sed 's/[0-9]*//g')
|
|
log_info "检测到系统盘: ${system_disk}"
|
|
|
|
# 获取可用磁盘
|
|
local disks
|
|
disks=$(lsblk -dno NAME | sed -e '/^loop/d' -e '/^sr/d' -e "/^${system_disk##*/}$/d")
|
|
|
|
if [ -z "$disks" ]; then
|
|
log_warning "没有找到除系统盘以外的硬盘"
|
|
exit 0
|
|
fi
|
|
|
|
# 处理每个磁盘
|
|
for disk in $disks; do
|
|
log_info "正在处理硬盘: /dev/${disk}"
|
|
|
|
log_warning "删除 /dev/${disk} 上的所有分区..."
|
|
run_command "清除分区签名" wipefs -a "/dev/${disk}"
|
|
|
|
log_warning "在 /dev/${disk} 上创建新的 GPT 分区表..."
|
|
run_command "创建分区表" parted -s "/dev/${disk}" mklabel gpt
|
|
|
|
log_warning "在 /dev/${disk} 上创建新分区..."
|
|
run_command "创建分区" parted -s "/dev/${disk}" mkpart primary 0% 100%
|
|
|
|
log_info "刷新分区表..."
|
|
run_command "刷新分区" partprobe "/dev/${disk}"
|
|
|
|
log_success "完成处理 /dev/${disk}"
|
|
echo
|
|
done
|
|
|
|
log_success "所有操作完成"
|
|
}
|
|
|
|
# 执行主函数
|
|
main "$@" |