# 展示盘
lsblk
# nvme0n1 259:3 0 1.8T 0 disk
# nvme1n1 259:0 0 1.8T 0 disk
# nvme2n1 259:2 0 1.8T 0 disk
# nvme3n1 259:1 0 1.8T 0 disk
# 为nvme1n1创建一个新的分区
sudo fdisk /dev/nvme1n1
# 使用fdisk的命令序列:
# n - 新建分区
# p - 主分区
# 1 - 分区号
# 回车 - 第一个扇区(使用默认值)
# 回车 - 最后一个扇区(使用默认值)
# w - 写入新分区并退出
# 格式化新分区为ext4文件系统
sudo mkfs.ext4 /dev/nvme1n1p1
# 为分区创建挂载点
sudo mkdir /mnt/nvme1
# 将新分区挂载到挂载点
sudo mount /dev/nvme1n1p1 /mnt/nvme1
# 编辑fstab以实现开机自动挂载
#使用 blkid 的方法会自动获取设备的UUID,而不是用设备的路径(例如 /dev/nvme1n1p1)。UUID的优点是即使设备的路径在系统启动时发生变化,它也能保持不变,提供更稳定的挂载方式。
#在你给出的具体 echo 用法中,末尾使用了 0 0 而不是 0 2。数字 0 2 中的第一个 0 表示是否对文件系统进行备份。通常,只有 / 文件系统(root filesystem)会设置为 1,其他所有文件系统都设置为 0。第二个数字指的是启动时 fsck 检查文件系统的顺序,/ 文件系统设置为 1,而其他文件系统设置为 2 或更大的数字。给定 echo 命令中的 0 0 配置会停止 fsck 在启动时检查该文件系统。
sudo cp /etc/fstab /etc/fstab.bak
echo `blkid /dev/nvme1n1p1 | awk '{print $2}' | sed 's/\"//g'` /mnt/nvme1 ext4 defaults 0 2 >> /etc/fstab
#检查
# 检查 UUID
echo "检查 fstab 中的 UUID 与实际分区是否一致..."
UUID_NVME=$(sudo blkid -o value -s UUID /dev/nvme1n1p1)
UUID_FSTAB=$(grep -oP 'UUID=\K[^ ]+' /etc/fstab | grep "$UUID_NVME")
if [ "$UUID_FSTAB" != "$UUID_NVME" ]; then
echo "错误:fstab 中的 UUID 与实际分区不一致。"
exit 1
else
echo "UUID 检查通过。"
fi
# 测试 fstab 设置是否正确
echo "测试 fstab 配置..."
sudo mount -a
if [ $? -ne 0 ]; then
echo "错误:fstab 配置测试失败,请检查 fstab 文件的格式和设置。"
exit 1
else
echo "fstab 配置测试通过。"
fi
# 验证挂载点
echo "验证挂载点是否挂载成功..."
MOUNT_POINT=$(mount | grep nvme1n1p1)
if [ -z "$MOUNT_POINT" ]; then
echo "错误:/dev/nvme1n1p1 分区没有被挂载到预期的挂载点。"
exit 1
else
echo "/dev/nvme1n1p1 分区挂载成功。"
fi
echo "所有检查已通过,没有检测到问题。"
#!/bin/bash# 函数:检查分区是否已挂载
is_mounted() {local PARTITION=$1mount | grep -q "$PARTITION"return $?
}# 函数:为磁盘创建新分区
create_partition() {local DEVICE=$1echo -e "n\np\n1\n\n\nw" | sudo fdisk $DEVICElocal PARTITION="${DEVICE}p1"echo $PARTITION
}# 函数:格式化分区
format_partition() {local PARTITION=$1sudo mkfs.ext4 $PARTITION
}# 函数:挂载分区
do_mount() {local PARTITION=$1local MOUNTPOINT=$2sudo mkdir -p $MOUNTPOINTsudo mount $PARTITION $MOUNTPOINT
}# 函数:更新 fstab 文件
update_fstab() {local PARTITION=$1local MOUNTPOINT=$2sudo cp /etc/fstab /etc/fstab.baklocal UUID=$(sudo blkid -o value -s UUID $PARTITION)echo "UUID=$UUID $MOUNTPOINT ext4 defaults 0 2" | sudo tee -a /etc/fstab
}# 函数:检查挂载和 fstab
check_mount_and_fstab() {local PARTITION=$1local MOUNTPOINT=$2# 检查 UUIDecho "检查 fstab 中的 UUID 与实际分区是否一致..."local UUID=$(sudo blkid -o value -s UUID $PARTITION)local UUID_FSTAB=$(grep -w "$UUID" /etc/fstab)if [ -z "$UUID_FSTAB" ]; thenecho "错误:fstab 中的 UUID 与实际分区不一致。"exit 1elseecho "UUID 检查通过。"fi# 测试 fstab 设置是否正确echo "测试 fstab 配置..."sudo mount -o remount $MOUNTPOINTif [ $? -ne 0 ]; thenecho "错误:fstab 配置测试失败,请检查 fstab 文件的格式和设置。"exit 1elseecho "fstab 配置测试通过。"fi# 验证挂载点是否挂载成功echo "验证挂载点是否挂载成功..."if ! mount | grep -q "$MOUNTPOINT"; thenecho "错误:$PARTITION 分区没有被挂载到预期的挂载点。"exit 1elseecho "$PARTITION 分区挂载成功。"fi
}# 主函数
main() {# 设备和挂载点的数组declare -A DEVICES=( ["nvme0n1"]="/mnt/nvme0" ["nvme1n1"]="/mnt/nvme1" ["nvme2n1"]="/mnt/nvme2" ["nvme3n1"]="/mnt/nvme3" )# 展示所有盘信息lsblk# 遍历所有 NVMe 设备for DEVICE in "${!DEVICES[@]}"; doecho "处理设备 /dev/$DEVICE ..."# 检查是否有分区已挂载if ! is_mounted "/dev/${DEVICE}p1"; thenecho "没有挂载的分区,正在创建新分区并挂载..."# 创建并格式化分区PARTITION=$(create_partition "/dev/$DEVICE")format_partition "$PARTITION"# 挂载分区和更新 fstabdo_mount "$PARTITION" "${DEVICES[$DEVICE]}"update_fstab "$PARTITION" "${DEVICES[$DEVICE]}"# 检查挂载和 fstab 更新check_mount_and_fstab "$PARTITION" "${DEVICES[$DEVICE]}"echo "/dev/$DEVICE 分区创建并挂载完成。"elseecho