资讯动态

Linux新硬盘挂载实战:从分区格式化到fstab开机自动挂载

发布时间:2026/10/15 4:47:18 来源:尧图企业网站定制
新机器硬盘挂载说到底就是把一块还没初始化的磁盘变成系统里一个能读写的目录。这个动作我在物理服务器、云主机、自己组装的NAS上都做过命令来来去去就那几条但真正踩过坑才会明白每一个步骤都有值得注意的细节。这篇文章按我实际的干活顺序来写先查盘再分区格式化然后临时挂载验证最后写进fstab做开机自动挂载再补上几个高频故障的处理办法。如果你刚接触Linux运维可以当成一篇完整的操作手册如果你已经有经验重点看下nofail参数、4K对齐、UUID防漂移这几个点可能能帮你少踩几个坑。1. 先搞清楚要做什么挂载不是格式化就完事1.1 第一步不是格式化是给机器做体检拿到新机器系统装好登录进去第一步不是急着格式化而是先给机器做个体检。我见过不少人上来就fdisk -l、mkfs折腾半天发现操作的其实不是目标盘。体检用两条命令就够了lsblk和df -h。lsblk列出所有块设备df -h列出已经挂载的文件系统。通常lsblk里能看到一块几十G到几T的裸盘没有分区也没有挂载点而df -h里完全没有它的影子——这正是我们要处理的那块盘。这里有个容易误解的点df看不到不等于盘不存在。裸盘没有文件系统df自然统计不到。用lsblk看到TYPE那一列是disk的就是物理盘下面如果还没有part分区项说明整块盘还是未分区状态。如果是云主机设备名通常是vda/vdb物理服务器通常是sda/sdbNVMe则是nvme0n1、nvme1n1一类的名字。看到这些名字心里就有数了。现在不少发行版已经全面使用新命名规则SATA盘的名字也可能不是sda而是别的但lsblk输出列的含义不变按TYPE和SIZE来认设备最稳。1.2 设备名会变别只记 /dev/sdb设备名的问题值得多说两句。Linux给磁盘的命名是检测顺序决定的sda、sdb并不是固定在某个物理槽位上的。同一个机器重启之后因为PCIe枚举、驱动加载顺序的变化sdb和sdc有可能互换这在老一些的内核和某些主板上并不少见。云环境里更热闹有时磁盘热插拔之后名字会整体往后挪。所以凡是需要长期引用的地方都不要写死/dev/sdb这样的路径。那没格式化的新盘怎么区分靠型号和序列号。执行ls -l /dev/disk/by-id/能看到一串包含厂商型号和序列号的链接比如wwn-0x5000c500xxxx、ata-XXXX这些。这些标识是硬盘出厂固化的比设备名可靠得多。操作前记下目标盘的容量和序列号到真正格式化的时候再核对一次能避免很多悲剧。1.3 要不要分区两种场景两种做法接下来就要回答一个新手常问的问题这块盘要不要分区答案取决于用途。云服务器上单独购买的数据盘如果整块盘都用来做数据存储我一般不分区直接在整块盘上建立文件系统。云盘的存储管理在底层已经处理好了再分一个全区块的分区没有太大意义命令还能少一步。物理服务器的独立数据盘情况相反我建议先分区再用分区。原因有三个一是很多备份软件、迁移工具默认期望看到分区表裸文件系统有时候不认二是分区可以把引导、数据、交换区域分开即使当前这块盘只做数据盘后续要调整用途也方便三是一旦盘需要跨机器迁移带标准分区表的盘兼容性更好。如果你的盘要装系统那更不用说了必须先分区。另外提一句如果以后有做LVM动态扩容的打算可以在分区阶段就规划好LVM物理卷这块我不展开但记在心里别把分区方案定死就行。2. 核心细节解析分区表、文件系统与挂载目录2.1 分区表选型GPT 和 MBR 怎么选分区表选型新机器我基本无脑选GPT只有极少数老平台才需要MBR。MBR是九十年代的设计硬顶就是2TB容量、4个主分区现在一块机械盘都轻松超过2TBMBR已经不够用了。GPT没有这两个限制默认支持128个分区单分区容量上限大到了现实里用不到的程度而且GPT在磁盘头和尾各存一份分区表抗损坏能力还强一些。分区工具上fdisk能用但交互式操作容易手滑parted可以在命令行里直接指定所有参数更适合写进脚本和文档。还要强烈建议一点分区起始位置从1MiB开始而不是从0开始。原因是现代硬盘的物理扇区是4K如果分区起始位置不在物理扇区边界上读写会触发读改写放大性能掉得厉害。从1MiB开始天然对齐机械盘、固态盘都适用。2.2 文件系统XFS、EXT4 还是别的文件系统的选择我见过太多人卡在这里来回纠结。直接给结论XFS和EXT4都可以二选一完全能满足绝大部分服务器场景。文件系统适合场景扩容缩容备注XFS大文件、高并发写入支持在线扩容不支持RHEL系默认适合数据仓库、归档EXT4通用、兼容性优先支持支持老牌稳定小文件表现好Btrfs需要快照、校验和的特殊需求支持支持功能多但操作复杂生产环境慎选XFS是RHEL系发行版的默认选型适合大文件、高并发写入在线扩容很方便xfs_growfs就能扩大缺点是没办法缩容。EXT4是最稳妥的老牌选择兼容性最好小文件表现稳定。Btrfs功能多但坑也多生产环境我一般不上。拿不定主意就选EXT4系统默认XFS就跟着用XFS怎么选都不会错。格式化本身有个优化点值得说。mkfs.ext4默认会保留5%的块给root目的是防止文件系统碎片化导致写不进同时给管理员留紧急空间。对几T的数据盘来说5%意味着几百GB白白空着实际数据盘没必要留这么多把-m参数调到1%甚至0%都是常见的。我一般用mkfs.ext4 -m 1既保留了root专用空间又不会浪费太多容量。XFS没有这个保留比例的概念默认参数直接用就行。2.3 挂载点规划和临时挂载的讲究挂载点就是一个空目录把文件系统接到这个目录上之后往目录里写文件就是往盘里写。挂载点命名建议直观一点/data、/backup、/srv/data都比随便挂到某个角落要好。创建目录用mkdir -p确保路径存在。注意mount是临时的重启就没了。而且有个很迷惑人的行为如果把盘挂到一个非空目录上目录原来的文件并不会消失而是被挂载点整个挡住了看起来好像丢了。恢复的方法是先卸载文件会重新出现。如果你确实要用数据盘替换某个目录正确流程是先挂到临时目录、拷贝数据、再挂正式目录后面第五章会展开讲。临时挂载的命令很简单mount /dev/sdb1 /data。文件系统类型系统一般能自动识别也可以加点参数指定。挂载完用df -hT确认一下文件系统类型和挂载点确认无误后再往下走。2.4 格式化前最后确认一遍分区和格式化这两个动作是不可逆的尤其mkfs执行前一定要再三确认。我的建议是格式化之前先做三件事lsblk看盘符blkid看这块盘上有没有现成文件系统fdisk -l再看一眼容量和型号。如果盘上已经有UUID或者有分区说明它不是全新盘再次格式化之前必须想明白为什么。还有一个铁律绝对不要对已经挂载的文件系统做格式化。内核通常会拒绝但某些情况下仍可能造成严重损坏。新机器一般不会遇到但一旦是热插拔或共享存储场景操作前先确认没有进程在访问这块盘拿不准就先umount再动手。3. 实操过程记录从裸盘到正常读写3.1 动手前必须做的三项确认下面用一台实际机器走一遍完整流程。假设一台物理服务器系统盘sda已经装好系统现在要挂两块数据盘一块2TB的sdb计划挂到/data一块4TB的sdc计划挂到/backup。动手前我先执行一次lsblk和blkid把当前设备状态记到笔记里。lsblk确认盘存在blkid确认没有文件系统。再fdisk -l核对一下容量和标签上的容量对得上才继续。这一步麻烦但值得。3.2 完整命令走一遍分区、格式化、挂载先给两块盘建GPT分区表。parted -s /dev/sdb mklabel gpt然后mkpart创建分区起始位置1MiB结束位置100%。sdc同样处理。parted -s /dev/sdb mklabel gpt parted -s /dev/sdb mkpart primary xfs 1MiB 100% parted -s /dev/sdc mklabel gpt parted -s /dev/sdc mkpart primary ext4 1MiB 100% partprobe /dev/sdb partprobe /dev/sdc命令的意思是mklabel gpt生成GPT分区表mkpart创建主分区从1MiB到100%结尾。mkpart后面的xfs和ext4只是分区类型标签真正决定文件系统的是后面的mkfs命令。partprobe用来通知内核重新读取分区表避免分区建完了系统还没反应过来。分区完成后分别格式化mkfs.xfs -f /dev/sdb1 mkfs.ext4 -F -m 1 /dev/sdc1sdb1用XFSsdc1用EXT4同时把默认5%的保留空间降到1%。格式化过程很快完成后会用一行输出告知UUID和块大小留意记下来。创建挂载点并临时挂载mkdir -p /data /backup mount /dev/sdb1 /data mount /dev/sdc1 /backup df -hTdf -hT的输出里应该能看到xfs和ext4各一行挂载点分别指向/data和/backup。此时盘已经能读写但只是临时状态重启后会消失。永久挂载的事情放到第四章处理。3.3 用 dd 和 fio 验证真实性能临时挂载完成后我习惯先做一个简单性能验证确认这块盘的读写速度没有严重偏离预期。最朴素的方法是dd跳过缓存直接测物理读写速度time dd if/dev/zero of/data/testfile bs1M count1024 oflagdirect time dd if/data/testfile of/dev/null bs1M count1024 iflagdirect第一条往盘里写1GB如果磁盘缓存挡在前面数据会先落在内存里速度虚高所以用oflagdirect绕过缓存。第二条读1GB同理用iflagdirect。机械盘一般能到100-200MB/sSATA固态能到400-500MB/sNVMe能上GB/s。如果速度差得太离谱就要看看线缆、接口、阵列卡配置了。想更严谨一点可以用fio做随机读写测试命令长一点但参数都是一一对应的fio --namerandwrite --filename/data/fio_test --ioenginelibaio --direct1 \ --rwrandwrite --bs4k --size1G --iodepth32 --runtime30 --group_reporting这条命令模拟4K随机写持续30秒主要看iops和延迟。测试完记得删掉测试文件rm -f /data/testfile /data/fio_test别让测试数据占着盘。3.4 顺手把属主和权限设好挂载点创建出来默认属主是root权限是755。如果这台机器上的业务以普通用户身份跑应用写/data时很可能报Permission denied。所以挂载完直接设置属主和权限chown -R appuser:appgroup /data chown -R backupuser:backupgroup /backup chmod 750 /data chmod 750 /backup这一步很多人会忘等应用跑起来才发现没权限再回头排查。新机器初始化的时候顺手做了后面省心很多。4. 永久挂载一劳永逸的 fstab 配置4.1 为什么重启后盘会丢mount是临时挂载重启之后系统不会记住。Linux启动时只有根文件系统和一些系统必须的挂载点会被自动处理其他分区想开机自动挂载必须写进/etc/fstab。fstab全称就是file systems table系统读它来决定挂哪些盘、用什么选项挂。很多人只做完前面第三步就以为大功告成结果一旦重启数据盘上的内容明明还在系统里却找不到了原因就在这里。4.2 fstab 六个字段逐个拆fstab每一行六个字段顺序不能乱设备标识、挂载点、文件系统类型、挂载选项、dump备份标志、fsck检查顺序。下面这行是典型例子UUID8f2d4c5e-3a18-4b7d-9c62-ef4d2c1a3b2f /data xfs defaults,noatime 0 2字段示例值含义设备标识UUIDxxxx用UUID或设备路径指定哪块盘挂载点/data要挂载到的目录文件系统类型xfs必须和实际格式化一致挂载选项defaults,noatime可选多个用逗号分隔dump备份标志00表示不备份fsck检查顺序20不检查1根分区先检查2其他分区后检查前四个字段不用解释说下后面两个经常被忽略的。第5个字段dump0表示不使用dump备份。第6个字段fsck0表示开机不检查文件系统1表示根分区先检查2表示其他分区后检查。普通数据盘写0或2都可以我习惯写2让系统启动时顺便做一致性检查。挂载选项里defaults是rw、suid、dev、exec、auto、nouser、async这些默认项的总和。noatime表示不记录文件访问时间对大部分数据盘来说能减少写IO值得加上。如果你的应用需要精确知道文件访问时间那就老老实实用defaults。4.3 用 UUID 代替设备名防盘符漂移设备标识这里强烈建议用UUID而不是/dev/sdb1这种写法。UUID是文件系统在创建时生成的一串全局唯一标识写入文件系统超级块不依赖设备名。设备名可能因为重启、插拔而改变UUID不会。获取方法很简单blkid /dev/sdb1 /dev/sdc1输出里能看到每块分区的UUID复制到fstab里对应位置即可。云主机上有些盘没有格式化就没有UUID但我们的盘已经格式化过了一定会有。把UUID写进fstab还有一个好处跟盘序彻底解耦就算系统重启后sdb变成了sdc挂载结果依然准确。除了UUID还要考虑一个问题如果某块盘临时拔走了或者云平台那边卸载了没加保护的话开机会因为fstab里找不到这个设备而卡在紧急模式。解决办法是在挂载选项里加上nofail意思是设备不存在就跳过不阻塞启动。对于可插拔的外部盘和云盘nofail几乎必加对服务器的固定数据盘加了也无妨只是晚一点发现问题。配合nofail还可以加x-systemd.device-timeout30s控制设备等待超时时间但不是必须知道有这个选项就行。4.4 改完 fstab必须 mount -a 验证改完fstab最关键的一步验证。直接执行mount -a这个命令会读取fstab把所有还没挂载的文件系统都挂载一遍。如果fstab有语法错误、UUID写错、类型不对这里就会立刻报错趁系统还能正常启动赶紧把错误改掉。如果一切顺利mount -a不会有输出。确认没问题之后我建议顺手systemctl daemon-reload一下让systemd重新读取配置避免重复挂载的告警。有条件的话直接reboot一次验证开机自动挂载真正可靠。很多问题的确认方法就是重启与其等业务重启时发现不如现在主动重启验证。5. 常见问题与排查技巧实录5.1 重启后进紧急模式不要慌线上最容易碰到的挂载故障就是重启之后系统进入了emergency mode。屏幕上通常显示一段欢迎信息告诉你登录后处理输入root密码回车系统会给你一个维护shell。进去第一件事执行mount -a它会告诉你哪一行失败了。如果报special device /dev/sdb1 does not exist说明fstab里的设备标识找不到可能是UUID写错也可能是这块盘本来就没接入。如果报wrong fs type说明文件系统类型写错查一下blkid输出再改。找到问题行用vim把错误行注释掉或改对然后mount -a再验证一次没问题就reboot。顺带提醒一下如果fstab里加了nofail系统通常不会卡emergency mode而是直接跳过这个挂载项可能业务运行几天之后你才发现某块盘没挂上。所以nofail是防启动失败的双刃剑配置了它日常巡检就更不能少。5.2 系统里看不到新盘另一个高频问题云平台明明已经把数据盘挂到了机器上系统里lsblk却看不到。这通常是因为虚拟机热插拔设备之后内核没有主动扫描新硬件。手工触发一次SCSI总线扫描for host in /sys/class/scsi_host/host*; do echo - - - $host/scan; done命令里的三个短横线分别代表channel、target、lun三个参数写成空值就是让内核自动探测新设备。执行完再lsblk盘大概率就出现了。如果你用的是云平台有些情况下还需要去控制台确认这块盘确实已经挂载到了对应的实例上而不是挂到别的机器去了。物理服务器如果系统里看不到盘先确认RAID卡里有没有把新盘配置成虚拟磁盘或者检查HBA模式、背板槽位、线缆是否插紧这几个环节漏掉任何一个系统都不可能识别出新盘。5.3 挂载到非空目录原有数据消失了挂载到非空目录引起数据消失的案例我见过好几次处理方式其实很简单。假如/backup原本放着一堆文件你把新盘直接mount上去访问/backup看到的全是新盘内容原来的文件像人间蒸发一样。这是Linux挂载机制的正常表现——原目录被挂载点遮挡了不是被删除。正确做法是先把原目录内容搬到新盘里。步骤是先建一个临时挂载点比如/mnt/newbackup把新盘挂上去然后用rsync把原目录内容同步过去rsync -av /backup/ /mnt/newbackup/。同步完成核对一下文件数和大小确认无误后把原/backup下内容移走或清空再umount临时挂载点把新盘正式挂到/backup。整个过程不丢数据也不会有遮蔽问题。5.4 文件系统异常与磁盘健康检查挂载成功后还要关注盘本身健康。如果某天应用写文件报Read-only file systemdmesg里刷出一堆I/O error多半是文件系统出了问题。处理原则是先停掉应用、卸载挂载点再做检查和修复。ext4文件系统用e2fsck -f /dev/sdc1xfs文件系统用xfs_repair -n /dev/sdb1做只读检查需要修复时去掉-n执行。修复前记得先备份文件系统修复工具不是万能的万一结构坏得厉害有备份才不会彻底抓瞎。日常预防上smartctl -H /dev/sdb查看SMART状态有条件就把磁盘空间和SMART告警接到监控系统不用每天手动看。新机器通常不会遇到这些问题但提前知道处理路径真出状况时不至于手忙脚乱。6. 踩过坑之后我整理出的几条固定习惯6.1 开工前必做的三件事踩过几次坑之后我给自己定了一条规矩新机器硬盘挂载开工前先做三件事。第一lsblk加blkid把盘符和UUID记下来第二格式化之前fdisk -l核对容量和序列号第三想好挂载点和文件系统再动工具。看起来多余但每次都能防住低级错误。尤其是多块盘一起上的时候没有记录操作到一半很容易把自己的盘认成别人的盘。6.2 改配置前先备份注释写清楚第二是备份和注释。改fstab之前先cp一份比如cp /etc/fstab /etc/fstab.bak.$(date %F)。改完以后在关键行加注释写明这块盘用来放什么数据、是哪天挂载的、预计给谁用。新机器可能只有你一个人折腾时间一长、人员一换一行清晰注释比什么都管用。我有一次接手一台机器fstab里三块盘全是裸的UUID没有任何说明排查问题只能一块一块mount去试十分被动。6.3 让监控替你看盘第三是让监控替你看盘。磁盘不会自己报错等到它满了才被发现已经晚了。新盘上线后我至少会把空间使用率加入监控设置85%告警有条件再盯inode和SMART。平时就算没时间巡检告警也会替你盯着。对我个人来说做完一次新机器硬盘挂载最踏实的不是确认当前一切正常而是确认后续有任何异常都会有人通知我这比记多少命令都重要。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑