centos磁盘挂载脚本(附赠)卸载脚本-舍利云

vps云服务器云主机新闻中心

NEWS CENTER

centos磁盘挂载脚本(附赠)卸载脚本

发布时间:2026-05-22 21:47






给你一个**带交互、带安全检查、带日志**的完整脚本,保存成 `.sh` 文件直接跑就行。

 

### 完整挂载脚本

 

把下面内容保存为 `mount_disk.sh`:

 

```bash

#!/bin/bash

# ============================================

# 云服务器 CentOS 数据盘自动挂载脚本

# 用法: bash mount_disk.sh

# ============================================

 

set -e  # 出错立即停止

 

# 颜色输出

RED='\033[0;31m'

GREEN='\033[0;32m'

YELLOW='\033[1;33m'

NC='\033[0m'

 

echo -e "${GREEN}=== 云盘挂载脚本 ===${NC}"

echo ""

 

# 必须 root

if [ "$EUID" -ne 0 ]; then

    echo -e "${RED}请用 root 运行: sudo bash $0${NC}"

    exit 1

fi

 

# ===== 第 1 步:列出可用磁盘 =====

echo -e "${YELLOW}[1/6] 当前磁盘列表:${NC}"

lsblk

echo ""

 

# ===== 第 2 步:用户输入 =====

read -p "请输入要挂载的磁盘设备 (例如 /dev/vdb): " DISK

read -p "请输入挂载点目录 (默认 /data): " MOUNT

MOUNT=${MOUNT:-/data}

read -p "请输入文件系统类型 (ext4/xfs, 默认 ext4): " FSTYPE

FSTYPE=${FSTYPE:-ext4}

 

# ===== 第 3 步:安全检查 =====

echo ""

echo -e "${YELLOW}[2/6] 安全检查...${NC}"

 

# 检查设备是否存在

if [ ! -b "$DISK" ]; then

    echo -e "${RED}错误: 设备 $DISK 不存在${NC}"

    exit 1

fi

 

# 检查是否已挂载

if mount | grep -q "^$DISK "; then

    echo -e "${RED}错误: $DISK 已经挂载,请先卸载${NC}"

    mount | grep "^$DISK "

    exit 1

fi

 

# 检查是否是系统盘

ROOT_DISK=$(df / | tail -1 | awk '{print $1}' | sed 's/[0-9]*$//')

if [ "$DISK" = "$ROOT_DISK" ] || [[ "$DISK" == "$ROOT_DISK"* ]]; then

    echo -e "${RED}错误: $DISK 是系统盘,禁止操作${NC}"

    exit 1

fi

 

# 检查盘上是否有现成的文件系统

EXISTING_FS=$(blkid -s TYPE -o value "$DISK" 2>/dev/null || true)

if [ -n "$EXISTING_FS" ]; then

    echo -e "${RED}警告: $DISK 上已有 $EXISTING_FS 文件系统,格式化会清空所有数据!${NC}"

    read -p "确定继续吗? 输入 yes 继续: " CONFIRM

    if [ "$CONFIRM" != "yes" ]; then

        echo "已取消"

        exit 0

    fi

fi

 

# ===== 第 4 步:格式化 =====

echo ""

echo -e "${YELLOW}[3/6] 格式化 $DISK 为 $FSTYPE...${NC}"

mkfs.$FSTYPE -F "$DISK"

 

# ===== 第 5 步:创建挂载点并挂载 =====

echo ""

echo -e "${YELLOW}[4/6] 创建挂载点 $MOUNT 并挂载...${NC}"

mkdir -p "$MOUNT"

mount "$DISK" "$MOUNT"

 

# ===== 第 6 步:写入 fstab =====

echo ""

echo -e "${YELLOW}[5/6] 写入 /etc/fstab (开机自动挂载)...${NC}"

 

# 备份 fstab

cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d%H%M%S)

 

# 获取 UUID

UUID=$(blkid -s UUID -o value "$DISK")

 

# 检查是否已存在相同 UUID 的记录,有就先删除

sed -i "/UUID=$UUID/d" /etc/fstab

 

# 追加新记录

echo "UUID=$UUID $MOUNT $FSTYPE defaults,nofail 0 2" >> /etc/fstab

 

# ===== 第 7 步:测试 fstab =====

echo ""

echo -e "${YELLOW}[6/6] 测试 fstab 配置...${NC}"

umount "$MOUNT"

if mount -a; then

    echo -e "${GREEN}✓ fstab 配置正确${NC}"

else

    echo -e "${RED}✗ fstab 配置有误,已回滚${NC}"

    # 恢复 fstab

    LATEST_BAK=$(ls -t /etc/fstab.bak.* | head -1)

    cp "$LATEST_BAK" /etc/fstab

    exit 1

fi

 

# ===== 完成 =====

echo ""

echo -e "${GREEN}=== 挂载成功 ===${NC}"

df -h | grep -E "Filesystem|$MOUNT"

echo ""

echo -e "${GREEN}磁盘信息:${NC}"

echo "  设备: $DISK"

echo "  UUID: $UUID"

echo "  挂载点: $MOUNT"

echo "  文件系统: $FSTYPE"

echo "  fstab 备份: /etc/fstab.bak.*"

echo ""

echo -e "${GREEN}重启后会自动挂载,无需再操作${NC}"

```

 

### 使用方法

 

**1. 创建脚本文件**

 

```bash

vi mount_disk.sh

# 粘贴上面内容,保存退出

```

 

或者一键创建(推荐):

 

```bash

cat > mount_disk.sh << 'EOF'

(把上面整段脚本粘贴这里)

EOF

```

 

**2. 运行**

 

```bash

sudo bash mount_disk.sh

```

 

**3. 按提示输入**

 

脚本会问你:

- 要挂载哪块盘(例如 `/dev/vdb`)

- 挂载到哪(默认 `/data`,回车跳过)

- 文件系统类型(默认 `ext4`,回车跳过)

 

### 这个脚本帮你做了什么

 

| 功能 | 说明 |

|---|---|

| ✅ 自动列出磁盘 | 不用先 `lsblk` |

| ✅ 系统盘保护 | 防止误格式化系统盘 |

| ✅ 已挂载检测 | 防止重复挂载 |

| ✅ 已有数据警告 | 盘上有数据会二次确认 |

| ✅ fstab 备份 | 改之前自动备份 |

| ✅ fstab 测试 | 失败自动回滚,**不会导致重启起不来** |

| ✅ 防重复 UUID | 同一块盘多次跑也不会写两遍 |

| ✅ 带颜色输出 | 看得清楚 |

 

### 全自动版本(不交互)

 

如果你想完全免交互,把开头几行改成:

 

```bash

# 直接写死参数,不再 read

DISK=/dev/vdb

MOUNT=/data

FSTYPE=ext4

```

 

把所有 `read -p` 那几行注释掉就行,然后 `bash mount_disk.sh` 直接跑完。

 

### 卸载脚本(附赠)

 

万一想撤销,给你一个对应的卸载脚本 `umount_disk.sh`:

 

```bash

#!/bin/bash

read -p "请输入要卸载的挂载点 (例如 /data): " MOUNT

 

# 卸载

umount "$MOUNT" && echo "已卸载 $MOUNT"

 

# 从 fstab 删除

cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d%H%M%S)

sed -i "\| $MOUNT |d" /etc/fstab

echo "已从 fstab 移除 $MOUNT 的记录"

 

 

 

------------------分割线------------------

# 云服务器 CentOS 挂载数据盘(最常用流程)

 

云服务器的数据盘挂载比物理机简单——**不用分区,直接格式化整盘挂载**就行。以下是阿里云、腾讯云、华为云通用的标准流程:

 

### 一、前置:先在云控制台挂载磁盘到实例

 

在云厂商控制台找到**云硬盘 / 块存储**,把数据盘**挂载到你的实例**。这一步在网页上点几下就好,挂载后系统才能看到这块盘。

 

### 二、登录服务器,查看磁盘

 

```bash

lsblk

```

 

典型输出:

```

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

vda     253:0    0   40G  0 disk

└─vda1  253:1    0   40G  0 part /        ← 系统盘

vdb     253:16   0  100G  0 disk          ← 新挂的数据盘,没有挂载点

```

 

云服务器的设备名通常是:

- **阿里云、腾讯云老实例**:`/dev/vdb`、`/dev/vdc`

- **AWS、新一代云实例**:`/dev/nvme1n1`、`/dev/nvme2n1`

- **华为云**:`/dev/vdb` 或 `/dev/sdb`

 

**这里以 `/dev/vdb` 为例**,你按实际设备名替换。

 

### 三、一键挂载脚本(推荐)

 

直接复制粘贴执行,把 `/dev/vdb` 替换成你的设备名,`/data` 改成你想挂的目录:

 

```bash

# 设置变量(按需修改)

DISK=/dev/vdb

MOUNT=/data

 

# 1. 格式化(整盘不分区,云盘可以这么做)

mkfs.ext4 $DISK

 

# 2. 创建挂载点

mkdir -p $MOUNT

 

# 3. 挂载

mount $DISK $MOUNT

 

# 4. 写入 fstab(开机自动挂载)

UUID=$(blkid -s UUID -o value $DISK)

echo "UUID=$UUID $MOUNT ext4 defaults,nofail 0 2" >> /etc/fstab

 

# 5. 测试 fstab 配置(避免重启起不来)

umount $MOUNT

mount -a

 

# 6. 验证

df -h

```

 

执行完看到类似这样就成功了:

```

/dev/vdb        99G   60M   94G   1% /data

```

 

### 四、关键注意点(云服务器特有)

 

**1. 用 `nofail` 选项**

fstab 里写 `defaults,nofail` 而不是 `defaults`。

**作用**:如果某天数据盘没挂上(比如控制台手贱卸载了),系统**仍然能正常启动**,不会卡在 emergency mode。这是云服务器的最佳实践。

 

**2. 用 UUID 不要用 /dev/vdb**

云盘的设备名**可能在重启后变化**(特别是挂载多块盘时)。**UUID 是磁盘自己的身份,永远不变**。

 

**3. 不用分区**

云盘已经是虚拟设备,再分区没有意义,**整盘格式化挂载最简单**。除非你要在一块盘上挂多个挂载点。

 

**4. 文件系统选 ext4 还是 xfs**

- **ext4**:兼容性最好,**推荐日常使用**

- **xfs**:CentOS 7+ 默认,**大文件、高并发更好**,比如数据库、日志服务器

 

CentOS 7/8 用 xfs,CentOS 6 用 ext4。

 

**5. 数据盘扩容后怎么办**

 

云控制台扩容后,系统里还要执行:

 

```bash

# ext4

resize2fs /dev/vdb

 

# xfs

xfs_growfs /data

```

 

------------------分割线------------------

# CentOS 挂载磁盘完整流程

 

挂载磁盘分**临时挂载**和**永久挂载**两种,下面是完整步骤:

 

### 一、查看磁盘信息

 

```bash

# 查看所有磁盘和分区

lsblk

 

# 或者更详细的

fdisk -l

 

# 查看已挂载的磁盘

df -h

```

 

输出里类似 `/dev/sdb`、`/dev/vdb`、`/dev/nvme1n1` 这种**没有挂载点的就是新磁盘**。

 

### 二、给磁盘分区(如果是全新磁盘)

 

**方法 1:fdisk(适合 ≤ 2TB 磁盘,MBR 分区)**

 

```bash

fdisk /dev/sdb

```

 

进入交互界面后依次输入:

- `n` → 新建分区

- `p` → 主分区

- `1` → 分区号

- 回车 → 默认起始扇区

- 回车 → 默认结束扇区(用全部空间)

- `w` → 写入并退出

 

**方法 2:parted(适合 > 2TB 磁盘,GPT 分区)**

 

```bash

parted /dev/sdb

(parted) mklabel gpt

(parted) mkpart primary 0% 100%

(parted) quit

```

 

**方法 3:不分区直接用整块盘**(云服务器常见做法)

跳过分区,直接对 `/dev/sdb` 格式化。

 

### 三、格式化文件系统

 

```bash

# ext4(最常用,推荐)

mkfs.ext4 /dev/sdb1

 

# 或者 xfs(CentOS 7+ 默认,大文件性能更好)

mkfs.xfs /dev/sdb1

 

# 如果是整盘不分区

mkfs.ext4 /dev/sdb

```

 

### 四、创建挂载点并挂载

 

```bash

# 1. 创建挂载目录

mkdir -p /data

 

# 2. 临时挂载(重启后失效)

mount /dev/sdb1 /data

 

# 3. 验证

df -h

```

 

### 五、设置开机自动挂载(永久)

 

**1. 获取磁盘的 UUID**(推荐用 UUID 而不是设备名,因为设备名可能变)

 

```bash

blkid /dev/sdb1

```

 

输出示例:

```

/dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"

```

 

**2. 编辑 /etc/fstab**

 

```bash

vi /etc/fstab

```

 

在末尾添加一行:

 

```

UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890  /data  ext4  defaults  0  2

```

 

字段含义(用空格或 Tab 分隔):

 

| 字段 | 含义 | 常用值 |

|---|---|---|

| UUID/设备 | 磁盘标识 | UUID=xxx 或 /dev/sdb1 |

| 挂载点 | 挂载到哪里 | /data |

| 文件系统 | 类型 | ext4 / xfs |

| 挂载选项 | 参数 | defaults |

| dump | 是否备份 | 0 |

| fsck | 开机检查顺序 | 根分区为 1,其他为 2,不检查为 0 |

 

**3. 测试 fstab 配置(重要!)**

 

```bash

# 卸载先

umount /data

 

# 测试自动挂载(如果 fstab 写错,这一步会报错,避免重启起不来)

mount -a

 

# 验证

df -h

```

 

⚠️ **fstab 写错可能导致系统无法启动**,**一定要先 `mount -a` 测试再重启**。

 

### 六、完整示例(一条龙)

 

假设有一块新磁盘 `/dev/sdb`,要挂载到 `/data`:

 

```bash

# 1. 格式化(整盘不分区)

mkfs.ext4 /dev/sdb

 

# 2. 创建挂载点

mkdir -p /data

 

# 3. 挂载

mount /dev/sdb /data

 

# 4. 获取 UUID

blkid /dev/sdb

 

# 5. 写入 fstab

echo "UUID=$(blkid -s UUID -o value /dev/sdb) /data ext4 defaults 0 2" >> /etc/fstab

 

# 6. 测试

umount /data

mount -a

df -h

```

 

### 七、常见问题

 

**Q1: mount 提示 "wrong fs type"**

→ 没格式化,或格式化类型和 mount 时指定的不一致。重新 `mkfs.ext4` 或加上 `-t ext4` 参数。

 

**Q2: 磁盘已经有数据,不能格式化怎么办**

→ 直接跳过格式化,从挂载步骤开始。`mount /dev/sdb1 /data` 即可。

 

**Q3: 想扩容怎么办**

→ 如果是 LVM 卷可以在线扩容。如果是普通分区,需要先 `umount`,再 `resize2fs`(ext4)或 `xfs_growfs`(xfs)。

 

**Q4: 阿里云/腾讯云的磁盘挂载**

→ 流程一样,设备名通常是 `/dev/vdb`、`/dev/vdc` 或 `/dev/nvme1n1`。先在云控制台**挂载磁盘到实例**,再到系统里执行上面步骤。

 

**Q5: 想卸载磁盘**

```bash

umount /data

# 并从 /etc/fstab 删除对应行

```

 

### 八、查看挂载状态的实用命令

 

```bash

df -h                    # 已挂载磁盘和使用率

lsblk                    # 块设备树状图

mount | grep /data       # 查看某挂载点详情

du -sh /data             # 查看目录占用空间

```

 

寻求帮助?

我们很高兴能为您服务

您可以通过工单等方式联系我们~

订阅我们的邮件

与我们保持联系,获取最新消息和折扣优惠券