如何编写自动分区格式化脚本

wen 实用脚本 2

本文目录导读:

如何编写自动分区格式化脚本

  1. Linux Shell脚本(使用parted)
  2. 自动化分区(使用fdisk)
  3. 多磁盘批量处理脚本
  4. LVM分区方案
  5. GPT分区表复杂方案
  6. 使用注意事项
  7. 重要提醒

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"

重要提醒

  1. 备份数据:运行前务必备份重要数据
  2. 确认磁盘:仔细确认目标磁盘,避免误操作系统盘
  3. 测试环境:先在虚拟机或测试环境中验证脚本
  4. 权限需求:需要root权限运行
  5. 依赖工具:确保系统已安装 parted, fdisk, mkfs.* 等工具

请根据实际需求选择适合的方案,并务必在运行前备份重要数据!

抱歉,评论功能暂时关闭!