Files
tools/linux/create_raid0_array.sh
Wang Defa 7def817482 feat: 代码标准化和文件重命名
## 新增功能
- 创建统一的公共函数库 (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 颜色日志输出
- 完善的命令重试机制
- 栈追踪支持
2025-12-26 14:47:18 +08:00

142 lines
3.9 KiB
Bash
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.
#!/bin/bash
# ============================================================================
# 文件名: create_raid0_array.sh
# 描述: 创建并配置 RAID 0 存储阵列
# 作者: 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"
# 配置
readonly MOUNT_POINT="/mnt/raid0"
# 检查 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
}
#
# 主函数 - 创建 RAID 0 阵列
#
main() {
log_info "============ RAID 0 创建程序 ============"
# 检查依赖
check_and_install mdadm
check_and_install lsblk
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" | sed 's/^/\/dev\//')
if [ -z "$disks" ]; then
log_warning "没有找到除系统盘以外的硬盘"
exit 0
fi
# 检查磁盘数量
local disk_count
disk_count=$(echo "$disks" | wc -l)
if [ "$disk_count" -lt 2 ]; then
log_error "至少需要两个磁盘来创建 RAID 0只找到 $disk_count 个可用磁盘"
exit 1
fi
log_info "找到以下磁盘可用于 RAID 0:"
echo "$disks"
# 确认操作
echo
read -p "是否继续创建 RAID 0? 这将删除这些磁盘上的所有数据 (y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_warning "操作已取消"
exit 1
fi
# 删除现有 RAID 配置
mdadm --stop /dev/md0 2>/dev/null || true
mdadm --zero-superblock $disks 2>/dev/null || true
# 创建 RAID 0 阵列
log_info "正在创建 RAID 0 阵列..."
run_command "创建 RAID" mdadm --create /dev/md0 --level=0 --raid-devices="$disk_count" $disks
# 检查状态
if mdadm --detail /dev/md0 | grep -q 'State : clean'; then
log_success "RAID 0 阵列创建成功"
mdadm --detail /dev/md0
else
log_error "RAID 0 阵列创建失败"
exit 1
fi
# 更新配置
log_info "正在更新 mdadm.conf..."
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# 创建文件系统
log_info "正在创建 ext4 文件系统..."
run_command "创建文件系统" mkfs.ext4 -F /dev/md0
# 创建挂载点
mkdir -p "$MOUNT_POINT"
# 获取 UUID
local raid_uuid
raid_uuid=$(blkid -s UUID -o value /dev/md0)
# 更新 fstab
log_info "正在更新 /etc/fstab..."
echo "UUID=$raid_uuid $MOUNT_POINT ext4 defaults 0 0" >> /etc/fstab
# 挂载
log_info "正在挂载 RAID 阵列..."
if mount -a; then
log_success "RAID 0 阵列已成功创建、格式化并挂载"
log_success "挂载点: $MOUNT_POINT"
else
log_error "挂载 RAID 阵列失败"
exit 1
fi
log_warning "注意: 建议重启系统以确保所有配置生效"
}
# 执行主函数
main "$@"