
shell 脚本-磁盘挂载和本地yum源制作
#!/bin/bash
#
# setup_storage_and_iso.sh — 一键分区、格式化并挂载新磁盘 + 挂载系统 ISO 并配置本地 yum 源
#
# 用法:
# sudo ./setup_storage_and_iso.sh [DEVICE] [MOUNT_POINT] [FS_TYPE] [ISO_DEVICE] [ISO_MNT]
#
# 参数示例:
# DEVICE=/dev/vdb # 待分区格式化的磁盘,默认 /dev/vdb
# MOUNT_POINT=/data # 磁盘挂载点,默认 /data
# FS_TYPE=xfs # 文件系统类型,支持 xfs|ext4,默认 xfs
# ISO_DEVICE=/dev/sr0 # ISO 所在设备,默认 /dev/sr0
# ISO_MNT=/mnt/iso # ISO 挂载点,默认 /mnt/iso
set -euo pipefail
DEVICE=${1:-/dev/vdb}
MOUNT_POINT=${2:-/data}
FS_TYPE=${3:-xfs}
ISO_DEVICE=${4:-/dev/sr0}
ISO_MNT=${5:-/mnt/iso}
if [[ $EUID -ne 0 ]]; then
echo "请使用 root 权限运行本脚本" >&2
exit 1
fi
echo "=========================="
echo "1) 新磁盘分区/格式化/挂载"
echo "--------------------------"
echo ">>> 查看当前磁盘信息"
lsblk
fdisk -l "$DEVICE" || true
echo ">>> 对 $DEVICE 创建 GPT 分区"
parted "$DEVICE" --script \
mklabel gpt \
mkpart primary "$FS_TYPE" 0% 100%
PARTITION="${DEVICE}1"
echo ">>> 格式化 $PARTITION 为 $FS_TYPE"
case "$FS_TYPE" in
xfs)
mkfs.xfs -f "$PARTITION"
;;
ext4)
mkfs.ext4 -F "$PARTITION"
;;
*)
echo "不支持的文件系统类型:$FS_TYPE" >&2
exit 1
;;
esac
echo ">>> 创建挂载点 $MOUNT_POINT"
mkdir -p "$MOUNT_POINT"
echo ">>> 临时挂载并验证"
mount "$PARTITION" "$MOUNT_POINT"
df -hT "$MOUNT_POINT"
echo ">>> 获取分区 UUID"
UUID=$(blkid -s UUID -o value "$PARTITION")
echo " UUID=$UUID"
echo ">>> 写入 /etc/fstab(去重)"
FSTAB_LINE="UUID=$UUID $MOUNT_POINT $FS_TYPE defaults 0 0"
grep -qF "$FSTAB_LINE" /etc/fstab || echo "$FSTAB_LINE" >> /etc/fstab
echo ">>> 测试 fstab 自动挂载"
umount "$MOUNT_POINT"
mount -a
df -hT "$MOUNT_POINT"
echo
echo "=========================="
echo "2) 系统 ISO 挂载 & 本地 yum 源"
echo "--------------------------"
echo ">>> 创建 ISO 挂载点 $ISO_MNT"
mkdir -p "$ISO_MNT"
echo ">>> 挂载 ISO 设备 $ISO_DEVICE 到 $ISO_MNT"
mount -t iso9660 "$ISO_DEVICE" "$ISO_MNT"
echo ">>> 查看挂载情况和内容"
df -hT "$ISO_MNT"
ls "$ISO_MNT"
echo ">>> 配置本地 yum 源文件 /etc/yum.repos.d/local.repo"
REPO_FILE=/etc/yum.repos.d/local.repo
if [[ ! -f "$REPO_FILE" ]]; then
cat >"$REPO_FILE" <<EOF
[local-iso]
name=Local ISO Repository
baseurl=file://$ISO_MNT
enabled=1
gpgcheck=0
EOF
echo "已创建 $REPO_FILE"
else
echo "$REPO_FILE 已存在,请根据需要手动检查或编辑"
fi
echo ">>> 清理 yum 缓存并列出仓库"
yum clean all
yum repolist
echo
echo "✅ 全部步骤执行完毕!"
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Oldhan's World
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果