Featured image of post 阿里云 ECS 云盘挂载:分区、扩容与开机自动挂载实战

阿里云 ECS 云盘挂载:分区、扩容与开机自动挂载实战

阿里云 ECS 数据盘从 fdisk 分区、parted GPT、mkfs 格式化、blkid 写入 /etc/fstab 到原盘扩容的完整流程

一、为什么 2025 年还要手挂云盘

阿里云 ECS 默认只给系统盘(/dev/vda),数据盘(/dev/vdb/dev/vdc…)是单独购买的。买完数据盘后必须

  1. 给云盘分区
  2. 格式化文件系统
  3. 挂载到 ECS 的某个目录
  4. 写进 /etc/fstab 开机自动挂载

否则重启就丢挂载点,数据盘变成了"挂在那儿但没用的盘"。

本文写于 2025-09-15。覆盖 2T 以下(MBR)、2T+(GPT)、原盘扩容三种场景。CentOS 7+ / Ubuntu 18.04+ / Debian 10+ / Anolis OS 8 通用。

二、查云盘

1
fdisk -l

典型输出(ECS 默认 1 块系统盘 + 2 块数据盘):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe4c1f796

Device     Boot Start      End  Sectors Size Id Type
/dev/vda1  *     2048 41940991 41938944  20G 83 Linux


Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes


Disk /dev/vdc: 500 GiB, 536870912000 bytes, 1048576000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

坑提醒:看到 Disk /dev/vdX doesn't contain a valid partition table 是正常的——新数据盘没分区。

三、场景一:全新数据盘挂载

3.1 一个目录只能挂一个盘

挂载前先想清楚目录——一个目录只能挂一个盘,挂第二个会覆盖第一个。常见目录:

  • /data:通用数据盘
  • /var/lib/docker:Docker 专用
  • /home:用户家目录
  • /mnt/<业务名>:业务专用

3.2 2T 以下:MBR 分区(fdisk)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
fdisk -u /dev/vdc
# 输入:
#   p       查看
#   n       新建
#   p       主分区
#   1       分区号
#   回车    默认起始扇区(2048)
#   回车    默认结束扇区(整盘)
#   wq      写并退出

fdisk -lu /dev/vdc
# 确认新分区 /dev/vdc1

3.3 2T+ :GPT 分区(parted)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
yum install -y parted e2fsprogs
# Debian/Ubuntu
# apt install -y parted e2fsprogs

parted /dev/vdb
# 在 parted 交互里:
#   mklabel gpt           # 设置 GPT 分区表
#   mkpart primary 1 100%  # 划分一个主分区占满整盘
#   align-check optimal 1 # 检查对齐(aligned 说明对齐)
#   print                  # 看分区表
#   quit                   # 退出

partprobe     # 让内核重读分区表
fdisk -lu /dev/vdb

3.4 格式化文件系统

1
2
3
4
5
# ext4(最常用,CentOS 7+ 默认)
mkfs -t ext4 /dev/vdc1

# xfs(CentOS 7+ 默认系统盘格式,大文件更优)
mkfs.xfs /dev/vdc1

3.5 挂载

1
2
3
4
5
mkdir -p /data
mount /dev/vdc1 /data
df -h
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/vdc1       500G   73M  500G   1% /data

3.6 写进 /etc/fstab(开机自动挂载)

关键:用 blkid 拿 UUID,而不是直接写 /dev/vdc1——云盘 ID 在重启时可能变化

1
2
3
# 查 UUID
blkid /dev/vdc1
# /dev/vdc1: UUID="a6ce082e-88cb-469f-8405-72192b89a439" TYPE="ext4"

手动写 /etc/fstab:

1
2
3
4
5
# 备份
cp /etc/fstab /etc/fstab.bak

# 写入(用 echo 追加)
echo `blkid /dev/vdc1 | awk '{print $2}' | sed 's/\"//g'` /data ext4 defaults 0 0 >> /etc/fstab

或者用 UUID 字符串直接写:

1
UUID=a6ce082e-88cb-469f-8405-72192b89a439 /data ext4 defaults 0 0

/etc/fstab 完整示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/vda1 during installation
UUID=f126eb90-41ef-4ccf-afa2-055203ed920e /               ext4    errors=remount-ro 0       1
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0
/home ext4 defaults 0 0
UUID=a6ce082e-88cb-469f-8405-72192b89a439 /data ext4 defaults 0 0

字段含义:

字段含义
<file system>设备 / UUID
<mount point>挂载点
<type>文件系统(ext4 / xfs / swap)
<options>挂载选项(defaults / noatime / nodev
<dump>是否被 dump 备份(0 = 不备份)
<pass>fsck 检查顺序(0 = 不检查,1 = 根,2 = 其他)

3.7 验证

1
2
mount -a    # 模拟重启挂载(不重启)
df -h

坑提醒/etc/fstab 写错会导致 ECS 启动失败。改完一定先 mount -a 验证,能正常挂再重启。

四、场景二:把根目录挂到数据盘(一般不要)

centos7.md 等老文档会演示"扩展 /",操作极其危险——需要动 LVM。本节给出标准流程,新机器不要这么干,直接买大系统盘。

4.1 终止占用 /home 进程

1
fuser -m -v -i -k /home

4.2 备份 /home

1
cp -r /home/ homebak/

4.3 卸载 /home + 删 lv

1
2
umount /home
lvremove /dev/mapper/centos-home

4.4 扩展 /root lv

1
2
3
4
lvextend -L +100G /dev/mapper/centos-root
xfs_growfs /dev/mapper/centos-root
# ext4 用 resize2fs
# resize2fs /dev/mapper/centos-root

4.5 重建 home

1
2
3
4
5
lvcreate -L 40G -n home centos
mkfs.xfs /dev/centos/home
mount /dev/centos/home /home
cp -r homebak/* /home/
chown -R <user>:<group> /home/<user>

强烈不推荐——中间任何一步失败都会让系统无法启动。新机器直接买大系统盘更省事。

五、场景三:原盘扩容

需求:原来是 500G 数据盘不够用,在阿里云控制台扩容到 700G数据不变挂载不变

5.1 控制台扩容

ECS 控制台 → 云盘 → 更多 → 磁盘扩容 → 改容量 → 重启(必须重启才能识别新容量)。

5.2 删旧分区 + 建新分区

1
2
3
4
5
6
7
8
9
fdisk /dev/vdb
# 输入:
#   d   删除分区
#   n   新建分区
#   p   主分区
#   1   分区号
#   回车 回车   默认起止
#   提示 "Partition #1 contains a ext4 signature" → 输入 n(不删除签名)
#   w   保存退出

5.3 修正文件系统

1
2
3
resize2fs /dev/vdb1
df -h
# 看到 700G 就对了

坑提醒:xfs 文件系统不支持 resize2fs 缩容(只能扩容),用 xfs_growfs

1
xfs_growfs /data

六、典型坑速查

现象原因处理
fdisk 提示 “Partition table entries are not in disk order”多次增删分区后走 §5 重建
mount /dev/vdc1 /data 报 “wrong fs type”没格式化走 §3.4 mkfs
blkid 拿不到 UUID内核没识别新分区partprobe 强制重读
重启后挂载点丢了没写 /etc/fstab走 §3.6
/etc/fstab 写错导致 ECS 起不来字段不对进救援模式(控制台 → 救援连接)改回
The device apparently does not exist内核没重读分区partprobe
扩容后 df -h 还是原大小文件系统没扩走 §5.3 resize2fs / xfs_growfs

七、开机自动挂载的最佳实践

7.1 用 UUID 而不是设备名

/dev/vdX 在重启时可能变化(内核按发现顺序命名),UUID 是稳定的。

7.2 加 nofail 选项(云盘场景)

1
UUID=a6ce082e-88cb-469f-8405-72192b89a439 /data ext4 defaults,nofail 0 0

nofail 告诉 systemd:挂载失败也别停机——适合云盘还没挂的过渡期。

7.3 配 fsck 顺序

  • /:pass = 1(先检查)
  • 其他:pass = 2(后检查)
  • swap:pass = 0(不检查)

八、典型用法速查

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查所有块设备
lsblk

# 查 UUID
blkid

# 查挂载点
df -h
mount | column -t

# 查 /etc/fstab
cat /etc/fstab

# 手动 mount
mount -a                          # 模拟重启挂载
mount -o remount,rw /data         # 重新挂载(改可写)
mount -o noatime /dev/vdc1 /data  # 不更新访问时间(提升 IO 性能)

# 卸载
umount /data

九、下一步

  • 想做云盘快照 + 跨区复制 → 走阿里云 ESSD / SSD 云盘 + 快照服务
  • 想做多盘合并(JBOD / RAID0)→ 用 mdadm 或 LVM
  • 想做云盘监控 → 阿里云 云监控 → 配磁盘使用率 / IOPS 告警
  • 想换更现代的存储方案 → 阿里云 NAS(共享文件存储)/ OSS(对象存储)

参考资料


2024+ 视角:写于 2025-09,半年后阿里云 ESSD 与云原生存储

本文写于 2025-09-15——半年后(2026 年)阿里云存储领域又发生了几件值得关注的事。

一、ESSD 已成"默认云盘"(2020+ 趋势的延续)

  • 2025 年阿里云新购 ECS 默认云盘已经是 ESSD Entry / ESSD PL0 / PL1普通 SSD 云盘逐渐淘汰。
  • ESSD PL3 / PL4(2024 起推出):
    • 单盘 IOPS 最高 100 万,吞吐量 4 GB/s——直逼本地 NVMe SSD。
    • 适合数据库(MySQL / Redis / MongoDB)的高并发场景。
1
2
3
4
5
6
# 2025 看云盘类型
fdisk -l
# Disk /dev/vdb: 500 GiB, 536870912000 bytes, 1048576000 sectors
# 看不到"是 ESSD PL1 还是 PL3"——要去控制台 / OpenAPI 看:
aliyun ecs DescribeDisks --DiskId d-bp1xxxxxxxxxxxxxx | jq '.Disks.Disk[0].Category'
# "cloud_essd" / "cloud_essd_entry" / "cloud_essd_pl1" ...

二、在线扩容的"无重启"姿势

  • 2017 之前:扩容云盘必须重启 ECS
  • 2021+:阿里云支持在线扩容(不重启),但需要 OS 层配合:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 1. 阿里云控制台扩容(无需重启)
# 2. 查新容量
fdisk -l /dev/vdb

# 3. 重建分区表
partprobe /dev/vdb
growpart /dev/vdb 1            # cloud-utils-growpart 包

# 4. 文件系统扩容
xfs_growfs /data               # xfs
# resize2fs /dev/vdb1          # ext4 自动检测新大小
  • 前提:分区是 GPT 才有 growpart 的"自由空间"概念(MBR 4 个主分区限制)。

三、云盘快照 + 跨区复制

  • 快照 2.0(2023 起):增量化、秒级创建。
  • 跨区复制:通过 快照一致性组 + CRC 校验 + 加密传输——异地灾备 5 分钟搞定。
1
2
3
4
5
6
# 用 OpenAPI 创建加密跨区快照
aliyun ecs CopyImage \
    --RegionId cn-hangzhou \
    --ImageId m-bp1xxxxxxxxxxxxxx \
    --DestinationRegionId cn-shanghai \
    --Encrypted true

四、Ultra Disk / 本地盘 SSD 的回归

  • 2020-2023:本地盘被云盘(ESSD)压制。
  • 2024-2025:AI 训练 / 大模型推理对超低延迟本地 NVMe SSD 需求回升——阿里云推出 d3 / d3c(高 IO 本地盘)+ ea(本地 NVMe SSD)。
类型延迟IOPS吞吐适用
ESSD PL11-2 ms5 万350 MB/s通用数据库
ESSD PL3< 1 ms100 万4 GB/s高并发数据库
本地 NVMe SSD(d3c)100-200 μs100 万+5+ GB/sAI 训练 / Redis

五、NAS / OSS / 块存储的"三分天下"

  • 块存储(云盘):单 ECS 独占,数据库专用
  • NAS(NFS / SMB):多 ECS 共享,Web 静态资源 / 容器 PVC
  • OSS(对象存储):无限容量,备份 / 日志归档 / 静态网站托管

2024+ 新选择

  • 阿里云 ECI(Elastic Container Instance):直接跑容器,不需要 ECS——容器数据存 ESSD 或 NAS。
  • CPFS(并行文件系统):AI / HPC 场景专用,PB 级吞吐。
  • OSS 加速器(transfer acceleration):跨境传输 10x 加速。

六、UltraPath / 多路径 IO

  • 多块云盘做 RAID 0 / 1 / 10 时,2024 阿里云推荐用 UltraPath 替代 mdadm:
1
2
3
4
# 装 UltraPath Agent
wget https://alibaba-ultra-path.oss-cn-hangzhou.aliyuncs.com/ultrapath-linux-<version>.rpm
rpm -ivh ultrapath-linux-<version>.rpm
upadmin show path
  • 优势:自动识别云盘拓扑、IO 调度优化、故障路径切换(< 5s)。

七、fstab 写错导致 ECS 起不来的"无救援模式恢复"

  • 2017 那篇给的是"控制台 VNC → 改 fstab"。
  • 2024 起:阿里云提供 “实例救援连接”——通过 VNC 但更稳定(基于 IPMI):
1
2
3
4
5
6
# 控制台 → ECS → 实例 → 远程连接 → 救援连接
# 等几分钟后,自动进 single user mode
mount -o remount,rw /
vi /etc/fstab
# 改回正确配置
reboot
  • 预防:fstab 写错之前用 mount -a 验证(本文 §3.7 已强调)。

八、/etc/fstab “nofail” 选项的 2024 最佳实践

本文 §7.2 已经强调 nofail2024 进阶

1
UUID=xxx /data ext4 defaults,nofail,nobootwait,x-systemd.device-timeout=30 0 2
选项作用
nofail挂载失败不阻塞启动
nobootwait不等待挂载(systemd 早期兼容)
x-systemd.device-timeout=30设备等待 30 秒(默认 90 秒太慢)
x-systemd.requires=挂载前等某个 unit

2024 推荐写法

1
2
# /etc/fstab
UUID=a6ce082e-... /data ext4 defaults,nofail,x-systemd.device-timeout=10 0 2

九、云原生时代的"挂载"

  • 2024 大量新应用不直接挂云盘——走 CSI 驱动 + PV/PVC(K8s)。
  • 阿里云 CSI 插件自动把 ESSD 映射为 Pod 的 volume:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Gi
  storageClassName: alicloud-disk-essd
1
2
3
kubectl get pvc
# STATUS: Bound
# VOLUME: d-bp1xxxxxxxxxxxxxx
  • 优势:Pod 漂移到其他节点自动重新挂载,不再关心 fstab / UUID
使用 Hugo 构建
主题 StackJimmy 设计