
在控制台上买了一块数据盘、点完挂载实例详情页里也显示使用中了回到系统里df -h却根本看不到它。这个落差是刚接触云主机时最容易懵的一处挂载到实例只是把这块的物理连接建好了操作系统要能用它还得走完分区、建文件系统、挂载、配置开机自动挂载这四步。少做最后一步重启之后盘还在但数据目录空了。这篇按实际操作顺序把linux服务器挂载硬盘的完整流程拆一遍重点放在几个真正会导致返工的地方2 TiB 那条分界线、fstab 里用设备名还是 UUID、以及改完之后怎么在不重启的情况下验证。一、先确认盘到底在不在linux服务器挂载存储这件事第一步永远是确认操作系统到底认没认到这块盘。不要凭控制台的显示下判断进系统看一眼最准lsblk-f输出里关键看三列FSTYPE文件系统类型、UUID、MOUNTPOINT挂载点。NAME FSTYPE LABEL UUID MOUNTPOINT vda └─vda1 ext4 root 33b46ac5-7482-4aa5-8de0-60ab4c3a4c78 / vdb └─vdb1 ext4 f1645951-134f-4677-b5f4-c65c71f8f86d vdc上面这段里vda1挂着根目录是系统盘。vdb1有文件系统但没有挂载点说明盘已经初始化过只差挂载。vdc三列全空是块全新的裸盘要从分区开始做。两个容易看错的地方设备名不一定叫/dev/sdb。云主机用 virtio 驱动数据盘通常是/dev/vdb、/dev/vdc物理机或某些镜像下才是/dev/sdb。对着输出抄别照着教程硬套。目标设备名要区分有没有分区。有分区就写分区名vdb1没分区直接建文件系统的就写设备名vdc。阿里云的初始化文档里专门列了这条判断规则。二、分区2 TiB 是那条硬分界线分区不是必需步骤。如果整块盘就当一个目录用完全可以跳过分区直接在裸设备上建文件系统。要做逻辑隔离比如一块盘分给日志和备份两个用途才需要分区。真要分区第一步是选分区表格式而选择的依据只有一个数盘是不是超过 2 TiB。这一条同时也是linux服务器磁盘挂载流程里最容易返工的地方——分区表选错后面格式化和挂载全都白做。阿里云《初始化数据盘Linux》给出的分区格式对比是分区格式最大分区容量分区数量说明GPT推荐18 EiB阿里云云盘支持的最大容量为 64 TiB128所有分区均为主分区不区分扩展分区与逻辑分区MBR2 TiB4 个主分区或 3 个主分区 1 个扩展分区分主分区、扩展分区、逻辑分区三种扩展分区不可直接使用需再划分为逻辑分区Red Hat 的存储管理文档口径一致MBR 分区表无法寻址超过 2 TiB约 2.2 TB的存储GPT 在使用 512 字节扇区的硬盘时最大可寻址 8 ZiB使用 4096 字节扇区时为 64 ZiB默认支持创建最多 128 个主分区。所以结论很简单超过 2 TiB 就必须用 GPT工具也得换成partedfdisk面向的是 MBR 分区表。反过来2 TiB 以内两种都能用但新盘没有兼容老系统的包袱时直接上 GPT 更省事——MBR 那套主分区、扩展分区、逻辑分区的划分规则在实际运维里基本只会徒增麻烦。GPT 分区的一条命令parted/dev/vdb--scriptmklabel gpt mkpart primary 1MiB100% partprobe lsblk-fpartprobe是通知内核重读分区表不执行的话新分区可能还没出现在lsblk里。这里有个云盘上特别值得注意的点分区起止位置要用 MiB、GiB 这类二进制单位不要写百分比或字节数。阿里云文档明确提示用二进制单位创建后会自动做 4KiB 对齐否则可能导致分区不对齐、影响云盘性能。建完之后可以验证parted/dev/vdb align-check optimal1返回aligned就是对齐了。三、文件系统ext4 还是 xfs建文件系统就是格式化这一步会清空盘上所有数据。盘里有东西又不确定能不能删先做快照。阿里云文档给的文件系统对比表文件系统最大文件大小适用场景ext416 TiB对小文件处理较好适合大量小文件场景。通用服务器与桌面系统、开发测试环境、小型日志服务器、内部管理系统、小型数据库服务器xfs8 EiB阿里云云盘支持的最大容量为 64 TiB大规模目录和大文件性能更优。大型数据库服务器MySQL/PostgreSQL、高性能计算、存储密集型应用视频、图像存储、高并发写入、大数据分析平台建文件系统同样只有一条命令很多教程里搜linux服务器挂载硬盘命令想找的其实就是它mkfs-text4 /dev/vdb1要用 xfs 的话部分发行版需要先装xfsprogsDebian/Ubuntu 用apt-get install -y xfsprogsCentOS 系用yum install -y xfsprogs再执行mkfs -t xfs /dev/vdb1。选型的实际判断就两条大量小文件、以后可能需要缩容 → ext4大文件、高并发写入、大目录 → xfs。第二条里缩容这个限制是硬性的——Red Hat 文档写明XFS 文件系统不支持缩小只支持扩容。ext4 则可以用resize2fs双向调整。如果你还没想清楚以后会不会缩选 ext4 保留退路。四、挂载这一步有个会把人吓一跳的坑盘能用了才算数而linux服务器挂载硬盘的挂载动作本身只有两条命令mkdir/datamount/dev/vdb1 /data lsblk-f看到MOUNTPOINT列出现/data就成了。但这一步藏着一个后果比想象中严重的行为如果挂载点目录不是空的挂载后原有内容会被隐藏而不是被合并或删除。阿里云文档对此的措辞是若目录非空原有内容将被隐藏可能影响业务。也就是说往一个已经存了东西的/data上挂新盘原来的文件一个都没丢只是看不见了——df显示的是新盘的空间ls /data是空的。不知情的人会以为数据被格式化没了然后开始做各种危险操作。卸载之后原内容会原样出现。挂载前先确认目录是空的这条比什么都重要。想卸载时如果提示设备忙说明有进程正在访问这个目录lsofD /data停掉相关进程再umount。五、开机自动挂载fstab 里用设备名还是 UUIDmount命令挂的是当前状态重启就失效。要持久生效必须写进/etc/fstab——这也是整篇文章里唯一一处写错了会让机器起不来的地方。先说三种可选写法以及它们的可靠性差异。腾讯云在《初始化云硬盘小于 2TB》里把这三种方式列成了一张对比表挂载方式优缺点信息获取方式云硬盘软链接腾讯云推荐优点每个云硬盘的软链接固定且唯一不随卸载挂载、格式化分区等操作改变。缺点只有云硬盘才有软链接无法感知分区的格式化操作ls -l /dev/disk/by-id文件系统的 UUID可能因文件系统的 UUID 变化而导致自动挂载设置失效。例如重新格式化文件系统后UUID 会变blkid /dev/vdb1设备名称可能因设备名称变化而导致自动挂载设置失效。例如云硬盘卸载后重新挂载操作系统重新识别时名称可能变化fdisk -l华为云《初始化数据盘》文档给出了更严厉的提醒原话是不建议在/etc/fstab里用设备名标识磁盘因为设备名是动态分配的在服务器停止再启动后可能变化例如从/dev/vdb1变成/dev/vdb2这甚至可能导致服务器无法启动。Red Hat 的记录里有一个对应的真实故障克隆出来的 RHEL 实例因为 fstab 中设备名变化而启动失败系统掉进 emergency shell日志里能看到Timed out waiting for device dev-sdb1.device这样的超时记录。这个场景在云上同样会发生——换系统盘、挂快照恢复的盘、跨实例迁移磁盘都可能触发。所以结论是设备名不要用UUID 或软链接二选一。两家云的推荐略有差异但都成立阿里云和华为云的文档示例都用UUID配合blkid取值。腾讯云推荐软链接/dev/disk/by-id/virtio-disk-xxxxx理由是它属于硬盘本身、不随文件系统格式化改变代价是只有云硬盘才有且它标识的是整块盘分区层面的变化感知不到。两者都能用区别在失效边界UUID 绑文件系统重新格式化就变软链接绑硬盘格式化不影响但换盘就失效。按你的操作习惯选一个并全程保持一致就好。三家的 fstab 写法示例写法挂载选项阿里云UUIDxxx /mnt ext4 defaults,nofail 0 2推荐为非系统关键的数据盘加nofail腾讯云UUIDxxx /data ext4 defaults,nofail 0 0软链接写法同样加nofailnofail华为云UUIDxxx /mnt/sdc ext4 defaults 0 2文档示例为defaults这六列各自的写法以 fstab(5) 手册为准。最后两列的含义华为云文档解释得比较清楚第五列是 Linux dump 备份选项0 表示不使用1 表示使用第六列是 fsck 选项0 表示不检查1 表示根分区优先检查2 表示从非根分区开始检查。nofail这一项值得单独说。阿里云文档对它的解释是确保即使该云盘因故无法挂载实例也能正常启动而不会卡在启动过程中等待挂载。Red Hat 的迁移文档则从另一面说明了为什么需要它——从 RHEL 7 起如果配置为启动时挂载的设备找不到或挂载失败引导会直接失败这是有意的行为变更目的是防止系统在缺少重要存储设备的情况下启动。想让它不影响启动就加nofail。但它是把双刃剑阿里云在同一段里给了风险提示用了nofail之后挂载失败时系统不会在启动时报错。也就是说盘没挂上你可能长期不知道业务写的其实是系统盘。所以数据盘的挂载状态要纳入监控不能配完就不管了。六、改完必须验证而且要能回滚改 fstab 之前先备份cp/etc/fstab /etc/fstab.bak写入之后不要直接重启去试。用这套命令在当前会话里验证umount/datamount-alsblk-fmount -a会按 fstab 重新挂载所有未挂载的项。如果它报错说明 fstab 写错了——这时候赶紧mv /etc/fstab.bak /etc/fstab还原机器还是好的。直接重启验证是拿可用性赌配置正确一旦写错就得进 VNC 或救援模式。确认lsblk -f里MOUNTPOINT出现/data才算整条链路走完。七、几个真会踩的坑一、控制台初始化完并不是万事大吉。阿里云的控制台提供云助手一键初始化但文档里明确标注当前为临时挂载重启后失效需要登录实例另行配置开机自动挂载。不少人点完就以为做完了重启之后发现目录空了。另外云助手只支持创建 GPT 分区和 ext4 文件系统有 64 TiB 扩容需求或要用 xfs 的得走命令行。二、从快照新建的盘挂回原实例会 UUID 冲突。阿里云在重新部署本地盘实例的文档里提到用快照新创建的云盘挂载到快照所在的原 ECS 实例时新盘的 UUID 会和原云盘冲突需要修改新盘的 UUID 才能正常挂载。同一段还提醒若新盘容量大于快照所属历史云盘要先执行扩容分区和文件系统操作。三、加盘之前先确认规格上限。不同实例规格族支持挂载的云盘类型和数量上限不同挂不上时报错信息往往指向已达上限这时候换盘没用得看规格本身。四、如果要挂的是另一台服务器上的目录那不是块设备挂载而是网络文件系统。linux mount 挂载另外一台服务器目录这类需求走的是 NFS 路线需要服务端的nfs-utils与导出配置、客户端的mount -t nfs并且要放行对应的安全组与端口。它和本文讲的本地盘挂载是两回事fstab 里同样建议加_netdev之类的选项处理网络就绪时序别直接套用本地盘那套做法。一图流盘在哪、有没有分区和文件系统 →lsblk -f超过 2 TiB → 必须 GPT parted分区起止用 MiB/GiB 单位并align-check文件系统 → 小文件或可能缩容选 ext4大文件、高并发写入选 xfsxfs 不支持缩容挂载点目录必须是空的否则原内容被隐藏fstab → 不用设备名用 UUID 或/dev/disk/by-id软链接非系统盘加nofail并补监控验证 → 先备份 fstab再umountmount -a不要靠重启试把这几步走完linux服务器挂载硬盘这件事才算真正做完了——盘在控制台上显示使用中重启之后数据也还在原处。文中涉及的分区容量上限、文件系统限制与推荐写法均引自各家云厂商与 Red Hat 的公开文档实际执行前请以你所用发行版和云平台的当期文档为准操作会清空数据务必先备份。