本文最后更新于145 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
#!/bin/bash
## 2.0 脚本
# 定义目标目录和磁盘
TARGET_DIR="/xhzyadp"
DISK="/dev/vdb"
# 检查是否以root用户运行
if [ "$(id -u)" != "0" ]; then
echo "错误:此脚本必须以root权限运行!"
exit 1
fi
# 1. 检查并安装xfsprogs
if ! command -v mkfs.xfs &> /dev/null; then
echo "安装xfsprogs工具..."
if command -v yum &> /dev/null; then
yum install -y xfsprogs
elif command -v apt-get &> /dev/null; then
apt-get update && apt-get install -y xfsprogs
else
echo "错误:无法确定包管理器,请手动安装xfsprogs"
exit 1
fi
fi
# 2. 创建目标目录
echo "创建目录 ${TARGET_DIR}..."
mkdir -p ${TARGET_DIR} || {
echo "错误:无法创建目录 ${TARGET_DIR}"
exit 1
}
# 3. 检查磁盘是否存在
echo "检查磁盘 ${DISK}..."
[ -b ${DISK} ] || {
echo "错误:磁盘 ${DISK} 不存在!"
exit 1
}
# 4. 卸载任何现有挂载
echo "检查并卸载现有挂载..."
umount ${TARGET_DIR} 2>/dev/null
umount ${DISK}* 2>/dev/null
# 5. 检查磁盘是否已分区
PARTITION_EXIST=$(lsblk -n ${DISK} 2>/dev/null | grep -c 'part')
if [ ${PARTITION_EXIST} -gt 0 ]; then
echo "警告:磁盘 ${DISK} 已有分区!"
read -p "是否继续?这将删除所有现有数据!(y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
echo "清除现有分区..."
wipefs -a ${DISK} || {
echo "错误:清除磁盘失败!"
exit 1
}
fi
# 6. 创建MBR分区(使用整个磁盘)
echo "在 ${DISK} 上创建MBR分区..."
parted -s ${DISK} mklabel msdos || {
echo "错误:创建分区表失败!"
exit 1
}
parted -s ${DISK} mkpart primary xfs 0% 100% || {
echo "错误:创建分区失败!"
exit 1
}
# 7. 刷新分区表
echo "刷新分区表..."
partprobe ${DISK} || {
echo "警告:partprobe失败,尝试使用blockdev"
blockdev --rereadpt ${DISK}
}
# 8. 确定分区路径
# 对于NVMe磁盘可能是/dev/vdbp1而不是/dev/vdb1
if [[ ${DISK} =~ "nvme" ]]; then
PARTITION="${DISK}p1"
else
PARTITION="${DISK}1"
fi
# 等待分区设备出现
echo "等待分区设备 ${PARTITION}..."
for i in {1..10}; do
[ -b ${PARTITION} ] && break
sleep 1
done
[ -b ${PARTITION} ] || {
echo "错误:分区设备 ${PARTITION} 未出现!"
exit 1
}
# 9. 格式化分区为XFS
echo "格式化分区 ${PARTITION} 为XFS文件系统..."
mkfs.xfs -f ${PARTITION} || {
echo "错误:格式化分区失败!"
echo "可能原因:"
echo "1. 分区设备不存在"
echo "2. 磁盘有硬件问题"
echo "3. 系统资源不足"
exit 1
}
# 10. 获取UUID
UUID=$(blkid -s UUID -o value ${PARTITION})
[ -z "${UUID}" ] && {
echo "错误:无法获取分区UUID!"
exit 1
}
echo "分区UUID: ${UUID}"
# 11. 配置fstab
FSTAB_ENTRY="UUID=${UUID} ${TARGET_DIR} xfs defaults 0 0"
echo "添加fstab条目: ${FSTAB_ENTRY}"
# 检查是否已存在挂载点
grep -q "${TARGET_DIR}" /etc/fstab && {
echo "警告:/etc/fstab中已存在${TARGET_DIR}的条目"
sed -i "\|${TARGET_DIR}|d" /etc/fstab
}
echo "${FSTAB_ENTRY}" >> /etc/fstab
# 12. 挂载文件系统
echo "挂载文件系统到 ${TARGET_DIR}..."
mount -a || {
echo "错误:挂载文件系统失败!"
exit 1
}
# 13. 验证挂载
MOUNT_RESULT=$(df -hT ${TARGET_DIR} 2>/dev/null)
[ -z "${MOUNT_RESULT}" ] && {
echo "错误:验证挂载失败!"
exit 1
}
echo -e "\n操作成功完成!"
echo "文件系统已挂载:"
echo "${MOUNT_RESULT}"
echo "UUID: ${UUID}"