尧图精选

Linux数据盘挂载全攻略:从分区格式化到开机自动挂载

🕒 发布时间:2026/9/12 23:11:33 📁 来源:尧图网络
干运维这么多年处理过最多的问题就是“新买的云盘/数据盘怎么在Linux上挂载使用”。别看这操作基础里面细节不少有人直接mkfs把盘干废了有人/etc/fstab写错直接开机进不去系统还有人搞不清UUID和设备名区别重启一次就挂载失败。这篇文章就把整套流程掰开揉碎讲清楚从磁盘识别、分区格式化到开机自动挂载每一步都给你能直接抄的作业顺便把常见坑都提前排掉。1. 挂载数据盘之前先搞懂这几件事1.1 什么是挂载系统盘和数据盘为什么不一样很多刚接触Linux的读者会问“挂载”到底是什么意思我用一个生活化的例子解释你可以把Linux系统想象成一个图书馆目录结构/、/home、/data就是图书馆里的书架编号。新买回来的硬盘就像一箱没拆封的书光放在仓库里读者是看不到的你得先给这箱书编好号分区、贴上标签格式化然后摆到某个书架上挂载到目录读者才能借阅。整个过程就是挂载。系统盘和数据盘的核心区别在于系统盘负责装操作系统引导开机你安装系统时已经自动完成了分区和挂载而数据盘是用来单独存放数据的比如网站文件、数据库、日志、用户上传内容。为什么非要单独挂载数据盘第一数据隔离更安全系统坏了重装系统盘不会影响数据盘内容第二某些应用对存储性能有要求数据盘可以选用更高IOPS或更大吞吐的云盘类型第三便于扩容和备份数据盘可以独立扩展容量、做快照。从这个角度看学会挂载数据盘是服务器管理的必修课。1.2 挂载路径怎么规划目录选不对后面全是坑挂载点即你要把数据盘挂到哪个目录不是随手写一个就行我见过太多人把数据盘直接挂到/root或者/home这种系统目录下结果目录原有的数据被“遮挡”了。这里有一个重要概念挂载会覆盖原目录内容。比如你在/data目录下本来有文件执行mount /dev/sdb1 /data之后/data下原有的文件并不会消失但你通过这个路径访问不到它们了——就像书架后面藏了个暗格你得先把书架移开卸载挂载才能看到原来的书。我的经验是挂载点尽量遵循这个原则用独立的顶层或二级目录如/data、/mnt/data、/srv/data不要挂在/、/usr、/var等系统目录下。目录名要直白让人一看就知道这个盘是干嘛的比如/data/mysql、/data/backup。如果以后可能扩容或迁移尽量用UUID而不是设备名后面细说。不同用途的数据盘分开挂载别把所有东西怼在一块盘上否则排查问题时无从下手。2. 动手前的硬件检查先看清你的磁盘长什么样2.1 用 lsblk 认盘最直观的设备查看方式拿到一台新服务器或插上一块新硬盘第一步不是急着分区而是先看看系统认没认出这块盘。我最常用的命令是lsblk全称“list block devices”它会以树状结构展示所有块设备简洁直观。lsblk输出大概长这样NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk ├─vda1 253:1 0 1G 0 part /boot └─vda2 253:2 0 39G 0 part / vdb 253:16 0 100G 0 disk这里面vda是系统盘已经挂载了/和/bootvdb就是新添加的数据盘大小100G还没有任何分区没有子节点也没挂载点。看到这种“type为disk、下面没有分区信息”的设备就知道新盘已经就绪可以操作了。2.2 fdisk -l 和 blkid 的配合使用如果lsblk输出不够详细可以用fdisk -l查看磁盘更完整的信息包括磁盘类型、扇区大小、分区表类型等fdisk -l /dev/vdbblkid则用来查看分区的UUID和文件系统类型这个在后面配置/etc/fstab时非常重要blkid /dev/vdb1输出示例/dev/vdb1: UUIDa1b2c3d4-1234-5678-9abc-def012345678 TYPEext42.3 常见磁盘命名规则别被设备名骗了不同虚拟化平台和硬件环境下设备名命名规则不一样这是新手最容易懵的地方KVM/OpenStack云主机通常是vda、vdbvirtio驱动所以看到vda不是字母“v开头就是系统盘要看大小和已有挂载点来判断。Xen虚拟化可能是xda、xdb。物理服务器/SATA盘一般是sda、sdbNvme固态硬盘则是nvme0n1、nvme1n1这种形式。AWS/部分云厂商设备名可能是/dev/sdb或/dev/nvme1n1但这些是逻辑映射实际识别还是要靠lsblk。实操中最稳的做法就是不看设备名猜身份而是通过大小和现有挂载点判断。比如系统盘40G已挂载根分区另一块100G没挂载的盘百分百就是要操作的数据盘。如果你担心中途操作错盘可以比对/dev/disk/by-id/下的序列号服务器面板里也能查看到磁盘序列号双重确认。3. 分区MBR还是GPTfdisk还是parted3.1 到底要不要分区全盘一个分区的场景讨论很多云服务器的数据盘就是一整块空盘没有预置分区表。这时候很多人会纠结需不需要分区其实分区分两种情况场景一直接用整块盘做文件系统不分区。执行mkfs.ext4 /dev/vdb命令直接对整块磁盘格式化然后挂载。这种做法的优点是简单省事缺点是一些运维工具或后续操作会默认要求分区格式比如想用LVM或者部分云平台的扩容流程会不识别未分区的盘。另外往一个已经是文件系统的裸盘上再执行分区操作会特别危险。场景二分一个区格式标准。也就是传统流程/dev/vdb分出一个/dev/vdb1格式化成文件系统再挂载。这是最稳妥、兼容性最好的方案也是我推荐的默认做法。3.2 fdisk 分区实操适用于2TB以下或MBRfdisk是老牌分区工具交互界面古老但功能稳定适合分区表为MBR且磁盘小于2TB的场景。操作流程如下# 1. 对目标磁盘进行分区操作 fdisk /dev/vdb进入交互界面后输入n新建分区提示分区号一般直接回车默认1提示起始扇区直接回车默认2048现代文件系统都对对齐有要求提示结束扇区如果要全部分给这个分区直接回车或者输入100G指定大小输入w保存并退出。完成后用lsblk确认你会发现多了一个vdb1。如果是给一块曾经分区过的盘重新分区建议先p打印分区表删除旧分区输入d确认无误再重建分区。3.3 parted 与GPT大容量磁盘和云盘的正确打开方式如果磁盘大于2TB或者你想用GPT分区表现在云盘动辄几TB这是常态fdisk就不太适用了得请出parted# 1. 选择磁盘指定使用GPT分区表 parted /dev/vdb mklabel gpt # 2. 创建分区从0开始到磁盘结束位置单位百分比 mkpart primary 0% 100% # 3. 退出 quit这里我强调一下为什么推荐GPTMBR分区表最多支持2TB容量和4个主分区GPT支持最大9.4ZB容量和128个分区并且冗余存储分区表、有CRC校验安全性更高。现在新采购的数据盘我都无脑用GPT。另外注意parted的mkpart在较新版本里会提示文件系统类型直接选择ext4或xfs即可也可以留空等分区完成后统一mkfs。4. 格式化选错文件系统性能差一大截4.1 ext4 和 xfs 怎么选生产环境我给一个默认答案分区完成后下一步就是格式化创建文件系统。Linux下常见的命令是mkfs.ext4、mkfs.xfs。两者各有优势文件系统适合场景优势局限性ext4通用型、大量小文件、传统业务兼容性极好支持在线扩容CentOS 6/7默认单个文件最大16TB大文件性能略逊xfs大文件、大数据、高并发读写单文件支持极大高并发放射性能强CentOS 7/8默认不能缩容意外断电后恢复较慢如果拿不准我的默认建议是生产环境CentOS/RHEL系选xfsDebian/Ubuntu系选ext4。因为CentOS 7之后官方默认文件系统就是xfs你后续用系统自带工具做扩容、快照恢复时兼容性最好Ubuntu生态对ext4的支持和工具链更熟练。但这两者没有绝对优劣关键看场景。比如你存大量照片、日志这种小文件用ext4会更稳定如果你做视频存储、大数据分析xfs对大文件吞吐更友好。格式化命令也很简单# 格式化为ext4 mkfs.ext4 /dev/vdb1 # 格式化为xfs mkfs.xfs /dev/vdb14.2 格式化前必须确认的三件事格式化是不可逆操作谁手抖谁难受。我在格式化前一定会做三件事再次执行lsblk确认设备名例如确认要对齐的目标是vdb而不是vda执行df -hT查看已挂载的设备列表避免把已挂在用的盘重新格式化如果是曾有数据的分区mount查看一下内容确认没有需要的文件再执行mkfs。另外有个小坑格式化输出时如果之前分区表里主分区编号有残留最好先用wipefs -a /dev/vdb清理磁盘上的文件系统和分区表签名。这个命令会把磁盘头部签名擦干净让mkfs识别得更干净但同样超危险执行前必须反复确认盘符。5. 挂载与开机自动挂载这是新手翻车重灾区5.1 手动挂载先创建目录再mount格式化完成后就可以手动挂载了。操作很简单# 1. 创建挂载点目录 mkdir -p /data # 2. 挂载 mount /dev/vdb1 /data # 3. 验证挂载结果 df -hT /data执行完df -hT你就能看到类似这样的输出Filesystem Type Size Used Avail Use% Mounted on /dev/vdb1 ext4 98G 61M 93G 1% /data到这一步数据盘已经能正常使用了。但请注意手动挂载在重启后会失效必须写入/etc/fstab来实现开机自动挂载。如果这一步省略服务器一重启你的数据库、网站目录统统访问不了排查时还以为应用崩了其实就是没挂载上。5.2 开机自动挂载修改 /etc/fstab 的正确姿势/etc/fstab是Linux开机时自动挂载文件系统的核心配置文件格式是六个字段设备标识 挂载点 文件系统类型 挂载参数 dump备份 fsck检查顺序一个规范的示例UUIDa1b2c3d4-1234-5678-9abc-def012345678 /data ext4 defaults 0 2我强烈推荐用UUID而不是/dev/vdb1这样的设备名来写fstab。原因很现实设备名在系统启动或硬件变更时可能变化比如你加了一块新盘原来的vdb可能变成vdc但UUID是根据文件系统生成的唯一标识不会变。获取UUID的命令blkid /dev/vdb1拿到UUID后推荐用以下方式添加自动挂载条目避免手动编辑错误echo UUIDa1b2c3d4-1234-5678-9abc-def012345678 /data ext4 defaults 0 2 /etc/fstab写完立即验证一下配置是否正确# 先卸载 umount /data # 根据fstab重新挂载如果没报错说明配置没问题 mount -a这里绝对要养成“改完fstab必须mount -a验证”的习惯不然万一写错重启后系统进不去或启动到维护模式处理起来很慌。5.3 挂载参数优化defaults 之外你还应该知道什么新手写fstab参数一栏往往直接抄defaults但这不一定是最优解。defaults实际包含rw、suid、dev、exec、auto、nouser、async一套主流参数但生产环境我还推荐结合以下参数noatime不更新文件访问时间减少写IO数据库盘提升明显。nodiratime同上针对目录的访问时间不更新。nofail挂载失败不阻塞开机流程云盘场景特别建议加上。比如用iSCSI或某些网络存储开机时设备可能还没就绪没有nofail会导致系统等待很久或在non-critical场景中直接启动失败。所以一个生产环境的fstab条目我习惯写成UUIDa1b2c3d4-1234-5678-9abc-def012345678 /data xfs defaults,noatime,nofail 0 26. 常见问题与排查实录这些都是真实踩过的坑6.1 卸载时报 target is busy怎么都卸载不掉执行umount /data时报错target is busy甚至device is busy说明有进程正在使用这个挂载点。处理方法# 1. 查哪个进程占用 lsof /data # 或 fuser -v /data # 2. 确认可以结束后杀掉占用进程 kill -9 PID # 3. 再卸载 umount /data如果就是想强制卸载可以用umount -l /data懒卸载它会立即从目录树中卸载但实际进程结束前磁盘仍被占用。这招适合确认没什么重要IO时使用否则可能导致正在写的文件数据丢失。6.2 手抖把fstab写错开机卡在维护模式这是挂载操作中最崩溃的故障。现象重启后系统停在Welcome to emergency mode或提示输入root密码维护模式。原因通常是fstab里设备标识写错、文件系统类型错误、或挂载目录不存在。处理方法# 在维护模式中输入root密码进入shell # 1. 以只读方式重新挂载根文件系统 mount -o remount,rw / # 2. 编辑fstab把错误的那行注释掉或修正 # 使用 vim/nano 修改 vim /etc/fstab # 3. 修正后直接重启 reboot建议日常把服务器存活预案里加一条“重启前先执行mount -a验证fstab有效性”能避免90%的这类事故。更保险的做法是在fstab里写nofail参数虽然不是万能但至少不会卡在维护模式。6.3 磁盘空间明明没少但df看到的使用率很高数据文件删了但空间没释放多半是有进程还持有已删除文件的句柄。比如你删了一个正在被mysqld写入的大日志文件磁盘空间不会立刻释放。排查方法# 1. 找出已删除但被占用的文件 lsof | grep deleted # 2. 对应服务重启或确认安全后释放 systemctl restart 服务名另外还有一种常见场景是删除文件用的是rm而不是truncate但文件被进程持续写入句柄还在空间就一直占着。用lsof | grep deleted能快速定位。6.4 云盘扩容后分区表和文件系统没同步很多人在云控制台扩容了磁盘容量但进入系统后df -hT看到容量没变化。这是因为从“云盘容量变大”到“文件系统识别新容量”之间还需要手动扩展分区和文件系统。以GPT分区ext4为例# 1. 确认新容量 lsblk # 2. 扩展分区growpart让分区扩展到整块盘 growpart /dev/vdb 1 # 3. 扩展文件系统 resize2fs /dev/vdb1 # 如果是xfs用 # xfs_growfs /data不同的云平台、文件系统对应的扩容命令不完全一样但大方向一致先分区表后文件系统。我做云上业务排查时至少有一半的“空间没释放”问题其实都是“扩容后没同步操作”并不是真的数据被占满。6.5 U盘/移动硬盘变成RAW格式怎么恢复数据这个和挂载数据盘也强相关——移动硬盘、U盘在Linux或Windows上突然打不开提示变成RAW格式大多是分区表损坏或文件系统标记出了问题。这时千万别急着格式化可以先尝试用fsck修复文件系统# 先找到设备名 lsblk # 以只读方式检查 fsck /dev/sdc1如果fsck无法修复可以尝试用TestDisk这类工具扫描并重建分区表。前提是先做全盘镜像或救援备份再操作否则修复过程可能二次破坏数据。我最不建议的操作就是看到RAW立刻右键“格式化”那等于亲手把数据送走。7. 经验总结与个人习惯挂载数据盘的操作本身并不复杂但练就一手“一次成功、永不翻车”的功夫靠的是流程化和规范化。我个人有几个习惯新盘固定走“lsblk确认 - 分区(GPT) - 格式化(xfs/ext4) - 挂载(UUID写入fstab) - mount -a验证”整套流程不跳步所有生产服务器的fstab都加nofail和noatime宁可在极端情况下少一次挂载也不让硬件状态变化影响整个系统可用性每次改fstab、分区表这种关键配置之前都先备份原文件一条cp /etc/fstab /etc/fstab.bak$(date %F)的成本几乎为零但能让你在出问题时多一条退路。最后提一个小技巧多块数据盘需要做区分时可以用lsblk -f输出文件系统类型和UUID再配合/dev/disk/by-id/下的厂商序列号做一个“设备-挂载点-用途”的对照表放在服务器/root/disk-info.txt里。几个月后再来扩磁盘、迁数据时你会感激当初这个两分钟就能做完的小动作。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →