本文目录导读:

Linux环境脚本
基础磁盘初始化脚本
#!/bin/bash
# 自动初始化新磁盘脚本
DISK="/dev/sdb" # 修改为实际磁盘设备
# 检查磁盘是否存在
if [ ! -b "$DISK" ]; then
echo "错误: 磁盘 $DISK 不存在"
exit 1
fi
# 创建分区表 (GPT格式)
echo "正在创建GPT分区表..."
parted -s $DISK mklabel gpt
# 创建单个分区占据整个磁盘
echo "创建分区..."
parted -s $DISK mkpart primary 0% 100%
# 格式化分区为ext4
echo "格式化分区为ext4..."
mkfs.ext4 -F ${DISK}1
# 创建挂载点
MOUNT_POINT="/mnt/data"
mkdir -p $MOUNT_POINT
# 挂载分区
mount ${DISK}1 $MOUNT_POINT
# 获取UUID
UUID=$(blkid -s UUID -o value ${DISK}1)
# 添加到fstab(自动挂载)
echo "UUID=$UUID $MOUNT_POINT ext4 defaults 0 2" >> /etc/fstab
# 验证
echo "磁盘初始化完成!"
df -h | grep $MOUNT_POINT
多磁盘批量初始化脚本
#!/bin/bash
# 批量初始化多个磁盘
DISKS=("/dev/sdb" "/dev/sdc" "/dev/sdd")
MOUNT_BASE="/mnt"
for i in "${!DISKS[@]}"; do
DISK="${DISKS[$i]}"
MOUNT_POINT="${MOUNT_BASE}/disk$((i+1))"
echo "正在初始化 $DISK..."
# 创建分区表
parted -s $DISK mklabel gpt
# 创建分区
parted -s $DISK mkpart primary 0% 100%
# 格式化
mkfs.ext4 -F ${DISK}1
# 创建挂载点
mkdir -p $MOUNT_POINT
# 挂载
mount ${DISK}1 $MOUNT_POINT
# 添加到fstab
UUID=$(blkid -s UUID -o value ${DISK}1)
echo "UUID=$UUID $MOUNT_POINT ext4 defaults 0 2" >> /etc/fstab
echo "$DISK 初始化完成 -> $MOUNT_POINT"
done
echo "所有磁盘初始化完成!"
Windows环境脚本 (PowerShell)
初始化新磁盘脚本
# 初始化磁盘脚本
Param(
[Parameter(Mandatory=$false)]
[int[]]$DiskNumbers = $null
)
# 获取所有未初始化的磁盘
$disks = Get-Disk | Where-Object { $_.PartitionStyle -eq 'RAW' }
if ($DiskNumbers) {
$disks = $disks | Where-Object { $_.Number -in $DiskNumbers }
}
if (-not $disks) {
Write-Host "未找到未初始化的磁盘" -ForegroundColor Yellow
exit
}
foreach ($disk in $disks) {
Write-Host "处理磁盘 $($disk.Number)..." -ForegroundColor Green
try {
# 初始化磁盘为GPT
Initialize-Disk -Number $disk.Number -PartitionStyle GPT -Confirm:$false
# 创建分区并分配所有空间
$partition = New-Partition -DiskNumber $disk.Number -UseMaximumSize -AssignDriveLetter
# 格式化为NTFS
Format-Volume -DriveLetter $partition.DriveLetter -FileSystem NTFS -NewFileSystemLabel "Data_$($disk.Number)" -Confirm:$false
Write-Host "磁盘 $($disk.Number) 初始化完成,分配盘符: $($partition.DriveLetter):" -ForegroundColor Green
}
catch {
Write-Host "磁盘 $($disk.Number) 初始化失败: $_" -ForegroundColor Red
}
}
Write-Host "所有磁盘处理完成!" -ForegroundColor Green
自动发现并初始化脚本
# 自动发现并初始化所有新磁盘
Write-Host "正在扫描新磁盘..." -ForegroundColor Cyan
# 获取未初始化磁盘
$newDisks = Get-Disk | Where-Object {
$_.PartitionStyle -eq 'RAW' -and $_.OperationalStatus -eq 'Online'
}
if ($newDisks.Count -eq 0) {
Write-Host "未发现新磁盘" -ForegroundColor Yellow
exit
}
Write-Host "发现 $($newDisks.Count) 个新磁盘:" -ForegroundColor Green
foreach ($disk in $newDisks) {
Write-Host " 磁盘 $($disk.Number): $($disk.FriendlyName) - $([math]::Round($disk.Size/1GB, 2)) GB"
}
# 确认初始化
$confirm = Read-Host "是否初始化所有新磁盘? (Y/N)"
if ($confirm -ne 'Y' -and $confirm -ne 'y') {
Write-Host "操作已取消" -ForegroundColor Yellow
exit
}
# 执行初始化
foreach ($disk in $newDisks) {
Write-Host "初始化磁盘 $($disk.Number)..." -ForegroundColor Yellow
try {
Initialize-Disk -Number $disk.Number -PartitionStyle GPT -Confirm:$false
$partition = New-Partition -DiskNumber $disk.Number -UseMaximumSize -AssignDriveLetter
Format-Volume -DriveLetter $partition.DriveLetter -FileSystem NTFS -NewFileSystemLabel "Data" -Confirm:$false
Write-Host " 磁盘 $($disk.Number) -> 盘符 $($partition.DriveLetter):" -ForegroundColor Green
}
catch {
Write-Host " 磁盘 $($disk.Number) 初始化失败: $_" -ForegroundColor Red
}
}
Write-Host "初始化完成!" -ForegroundColor Green
高级功能脚本
带参数和错误处理的Linux脚本
#!/bin/bash
# 高级磁盘初始化脚本
usage() {
echo "用法: $0 [-d 设备] [-f 文件系统] [-m 挂载点]"
echo " -d 磁盘设备 (如 /dev/sdb)"
echo " -f 文件系统 (ext4, xfs, btrfs) 默认: ext4"
echo " -m 挂载点 (如 /data) 默认: /mnt/data"
echo " -l 标签名称"
echo " -h 显示帮助"
exit 1
}
# 默认值
FILESYSTEM="ext4"
MOUNT_POINT="/mnt/data"
LABEL=""
# 解析参数
while getopts "d:f:m:l:h" opt; do
case $opt in
d) DISK="$OPTARG" ;;
f) FILESYSTEM="$OPTARG" ;;
m) MOUNT_POINT="$OPTARG" ;;
l) LABEL="$OPTARG" ;;
h) usage ;;
*) usage ;;
esac
done
# 验证参数
if [ -z "$DISK" ]; then
echo "错误: 必须指定磁盘设备"
usage
fi
if [ ! -b "$DISK" ]; then
echo "错误: $DISK 不是有效的块设备"
exit 1
fi
# 检查磁盘是否已挂载
if mount | grep -q "$DISK"; then
echo "错误: $DISK 已挂载,请先卸载"
exit 1
fi
# 执行初始化
echo "正在初始化 $DISK..."
# 创建分区
parted -s $DISK mklabel gpt
parted -s $DISK mkpart primary 0% 100%
# 格式化
PARTITION="${DISK}1"
case $FILESYSTEM in
ext4)
mkfs.ext4 -F $PARTITION ${LABEL:+-L $LABEL}
;;
xfs)
mkfs.xfs -f $PARTITION ${LABEL:+-L $LABEL}
;;
btrfs)
mkfs.btrfs -f $PARTITION ${LABEL:+-L $LABEL}
;;
*)
echo "不支持的文件系统: $FILESYSTEM"
exit 1
;;
esac
# 挂载
mkdir -p $MOUNT_POINT
mount $PARTITION $MOUNT_POINT
# 获取UUID并添加到fstab
UUID=$(blkid -s UUID -o value $PARTITION)
if [ -n "$UUID" ]; then
echo "UUID=$UUID $MOUNT_POINT $FILESYSTEM defaults 0 2" >> /etc/fstab
echo "已添加到 /etc/fstab"
fi
echo "磁盘初始化成功!"
df -h | grep $MOUNT_POINT
Windows Server批量初始化脚本
# Server批量初始化脚本
param(
[string]$FileSystem = "NTFS",
[string]$LabelPrefix = "Data"
)
$logFile = "disk_init_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
function Write-Log {
param([string]$Message)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$timestamp - $Message" | Out-File -FilePath $logFile -Append
Write-Host "$timestamp - $Message"
}
Write-Log "开始磁盘初始化脚本"
# 获取所有未初始化磁盘
$uninitializedDisks = Get-Disk | Where-Object { $_.PartitionStyle -eq 'RAW' }
if ($uninitializedDisks.Count -eq 0) {
Write-Log "未发现未初始化的磁盘"
exit
}
Write-Log "发现 $($uninitializedDisks.Count) 个未初始化磁盘"
foreach ($disk in $uninitializedDisks) {
Write-Log "处理磁盘 $($disk.Number) ($($disk.FriendlyName))"
try {
# 初始化
Initialize-Disk -Number $disk.Number -PartitionStyle GPT -Confirm:$false
Write-Log " 初始化完成"
# 创建分区
$partition = New-Partition -DiskNumber $disk.Number -UseMaximumSize -AssignDriveLetter
Write-Log " 创建分区完成,盘符: $($partition.DriveLetter)"
# 格式化
$volume = Format-Volume -DriveLetter $partition.DriveLetter -FileSystem $FileSystem -NewFileSystemLabel "${LabelPrefix}_$($disk.Number)" -Confirm:$false
Write-Log " 格式化完成: ${LabelPrefix}_$($disk.Number)"
}
catch {
Write-Log " 错误: $_"
}
}
Write-Log "所有磁盘初始化完成!"
使用说明
Linux脚本使用:
# 给予执行权限 chmod +x init_disk.sh # 运行基础脚本 sudo ./init_disk.sh # 运行高级脚本 sudo ./advanced_init.sh -d /dev/sdb -f xfs -m /data -l mydisk
Windows脚本使用:
# 以管理员身份运行PowerShell # 运行基础脚本 .\init_disk.ps1 # 指定磁盘号 .\init_disk.ps1 -DiskNumbers 1,2,3 # 自动发现脚本 .\auto_init.ps1
安全注意事项
- 数据备份:这些脚本会清空磁盘上所有数据
- 确认磁盘:确保选择了正确的磁盘设备
- 测试环境:先在测试环境验证脚本
- 权限要求:需要root/管理员权限
- 生产环境:建议添加双重确认机制
这些脚本提供了自动初始化的基础框架,可以根据实际需求进行调整和扩展。