本文目录导读:

Linux Shell脚本(使用parted)
#!/bin/bash
# 自动分区格式化脚本
DISK="/dev/sdb" # 请根据实际磁盘修改
# 检查磁盘是否存在
if [ ! -b "$DISK" ]; then
echo "错误:磁盘 $DISK 不存在!"
exit 1
fi
echo "警告:这将删除 $DISK 上所有数据!"
read -p "确认继续?(yes/no): " confirm
if [ "$confirm" != "yes" ]; then
echo "操作已取消"
exit 0
fi
# 清除分区表
dd if=/dev/zero of=$DISK bs=1M count=10
sleep 2
# 创建GPT分区表
parted -s $DISK mklabel gpt
# 创建分区
# 创建EFI系统分区 (500MB)
parted -s $DISK mkpart primary fat32 1MiB 501MiB
parted -s $DISK set 1 esp on
# 创建根分区 (剩余空间)
parted -s $DISK mkpart primary ext4 501MiB 100%
# 格式化分区
mkfs.fat -F32 ${DISK}1 # 格式化EFI分区
mkfs.ext4 ${DISK}2 # 格式化根分区
echo "分区格式化完成!"
echo "分区信息:"
parted -s $DISK print
自动化分区(使用fdisk)
#!/bin/bash
DISK="/dev/sdc"
# 使用fdisk自动分区
fdisk $DISK << EOF
g # 创建GPT分区表
n # 新建分区
1 # 分区号1
# 默认起始扇区
+500M # 500MB大小
t # 更改类型
1 # EFI分区类型
n # 新建分区
2 # 分区号2
# 默认起始扇区
# 使用剩余空间
w # 写入并退出
EOF
# 格式化
mkfs.fat -F32 ${DISK}1
mkfs.ext4 ${DISK}2
多磁盘批量处理脚本
#!/bin/bash
# 批量处理多个磁盘
DISKS=("/dev/sdb" "/dev/sdc" "/dev/sdd")
PARTITION_SIZE="100GiB"
for DISK in "${DISKS[@]}"; do
if [ -b "$DISK" ]; then
echo "正在处理 $DISK ..."
# 创建分区表
parted -s $DISK mklabel gpt
# 创建单个大分区
parted -s $DISK mkpart primary ext4 0% $PARTITION_SIZE
parted -s $DISK mkpart primary ext4 $PARTITION_SIZE 100%
# 格式化
mkfs.ext4 -F ${DISK}1
mkfs.ext4 -F ${DISK}2
echo "$DISK 处理完成"
else
echo "跳过 $DISK (不存在)"
fi
done
echo "所有磁盘处理完成!"
LVM分区方案
#!/bin/bash
DISK="/dev/sde"
VG_NAME="vg_data"
# 创建物理卷
parted -s $DISK mklabel gpt
parted -s $DISK mkpart primary 0% 100%
pvcreate ${DISK}1
# 创建卷组
vgcreate $VG_NAME ${DISK}1
# 创建逻辑卷
lvcreate -L 50G -n lv_data $VG_NAME
lvcreate -L 20G -n lv_log $VG_NAME
lvcreate -l 100%FREE -n lv_backup $VG_NAME
# 格式化逻辑卷
mkfs.xfs /dev/$VG_NAME/lv_data
mkfs.xfs /dev/$VG_NAME/lv_log
mkfs.xfs /dev/$VG_NAME/lv_backup
echo "LVM配置完成!"
lvs
GPT分区表复杂方案
#!/bin/bash
DISK="/dev/sdf"
# 创建复杂分区布局
parted -s $DISK mklabel gpt
# 创建多个分区
parted -s $DISK mkpart primary fat32 1MiB 1GiB # /boot/efi (1GB)
parted -s $DISK mkpart primary ext4 1GiB 2GiB # /boot (1GB)
parted -s $DISK mkpart primary ext4 2GiB 22GiB # / (20GB)
parted -s $DISK mkpart primary linux-swap 22GiB 26GiB # swap (4GB)
parted -s $DISK mkpart primary ext4 26GiB 78GiB # /var (52GB)
parted -s $DISK mkpart primary ext4 78GiB 100% # /home (剩余)
# 格式化分区
mkfs.fat -F32 ${DISK}1 # EFI分区
mkfs.ext4 ${DISK}2 # /boot
mkfs.ext4 ${DISK}3 # /
mkswap ${DISK}4 # swap
mkfs.ext4 ${DISK}5 # /var
mkfs.ext4 ${DISK}6 # /home
# 挂载测试(可选)
mount ${DISK}3 /mnt
mkdir -p /mnt/{boot,home,var}
mount ${DISK}2 /mnt/boot
mount ${DISK}6 /mnt/home
mount ${DISK}5 /mnt/var
echo "分区完成!磁盘布局:"
lsblk $DISK
使用注意事项
安全保护脚本
#!/bin/bash
# 安全版本:检查目标磁盘
safe_partition() {
local DISK=$1
# 检查是否为系统盘
if [[ "$DISK" == "/dev/sda" ]]; then
echo "错误:禁止操作系统盘!"
exit 1
fi
# 检查磁盘是否挂载
if mount | grep -q "$DISK"; then
echo "错误:磁盘已挂载,请先卸载!"
exit 1
fi
# 再次确认
read -p "确认格式化 $DISK? (yes/no): " confirm
if [ "$confirm" != "yes" ]; then
echo "取消操作"
exit 0
fi
# 执行分区
parted -s $DISK mklabel gpt
parted -s $DISK mkpart primary ext4 0% 100%
mkfs.ext4 -F ${DISK}1
}
# 使用示例
safe_partition "/dev/sdb"
重要提醒
- 备份数据:运行前务必备份重要数据
- 确认磁盘:仔细确认目标磁盘,避免误操作系统盘
- 测试环境:先在虚拟机或测试环境中验证脚本
- 权限需求:需要root权限运行
- 依赖工具:确保系统已安装
parted,fdisk,mkfs.*等工具
请根据实际需求选择适合的方案,并务必在运行前备份重要数据!