资讯动态

Linux新硬盘分区挂载全指南:认盘、格式化到永久挂载

发布时间:2026/10/21 5:45:32 来源:尧图企业网站定制
1. 新硬盘装上去之后系统里为什么看不到可用空间先说个我经常遇到的场景某同学给一台Linux服务器加了一块新数据盘开机进系统后df -h一看容量没变化再打开“计算机”之类的图形界面找一圈也没看到新盘符。他第一反应是硬盘坏了或者主板没认出来折腾半天最后发现其实系统早就看到了设备只是这块盘既没有分区、也没有文件系统更没有被挂载到任何目录下所以它的容量对操作系统来说就像不存在一样。这就是本篇“Linux硬盘分区挂载”要解决的核心问题把一块物理硬盘变成系统里真正可用的存储空间。整个过程可以拆成三段——认盘、分区格式化、挂载到目录。你要做的不是背命令而是理解每一步在干什么这样以后不论系统提示什么异常你都能自己判断是哪一步出了岔子。这个系列面向的读者主要是三类人刚接触Linux想把手头机器盘清楚的初学者公司里要接管服务器、需要给机器加容量的小运维以及做开发时候需要在虚拟机里挂一块新虚拟磁盘做实验的同学。我们假设你已经能进到命令行并且以root权限或者sudo方式执行命令下面所有操作我都按这个前提来写。1.1 设备不是你想的C盘D盘而是/dev下的文件Windows用户习惯把硬盘看成“C盘”“D盘”但在Linux里硬盘设备本身被抽象成了/dev目录下的一个特殊文件。刚接触的人会觉得这个设计很绕可一旦你接受了“设备也是文件”的哲学后面的分区、挂载、卸载就都好理解了。传统的SATA盘、USB盘在系统里通常显示成/dev/sda、/dev/sdb这种名字字母从a开始往后排代表物理上的识别顺序。如果你的机器装的是NVMe固态设备名会变成/dev/nvme0n1这种格式名字里的0代表nvme控制器序号n1代表命名空间下的块设备它的分区则是/dev/nvme0n1p1注意这里的“p1”和SATA盘那种“sda1”写法不一样很多人第一次看到都愣一下。我见过不少新手对/dev/sda和/dev/sda1的区别搞不清楚。简单说sda是整块盘sda1是这块盘上的第一个分区。往整块盘上直接写文件系统不是不行但除非是特殊场景比如某些云盘的整块直挂我都不建议原因后面讲分区的时候会解释。你只要记住认盘看sda分区看sda1。1.2 用lsblk和fdisk把硬盘的“出生状态”摸清楚我拿到一台陌生机器第一步永远是敲lsblk这个命令比df -h更适合看设备结构。它不像df那样只显示已经挂载的文件系统而是把所有块设备以及它们之间的层级关系完整列出来就像给硬盘做了一次全身体检报告。lsblk输出大概长这样根据实际环境会略有差异NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 238G 0 disk ├─sda1 8:1 0 600M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 236.4G 0 part / sdb 8:16 0 465G 0 disk └─sdb1 8:17 0 465G 0 part /data注意看最后一列MOUNTPOINT这就是挂载点的意思。新加的盘如果从来没操作过你会看到类似于sdb这样的裸设备它下面没有分区子项MOUNTPOINT列也是空的。这就已经说明问题不是“系统没识别”而是“盘还没进入可用的存储体系”。如果lsblk里压根没看到这块盘那才需要考虑硬件层面的问题。比如先确认接口是不是插好了、供电有没有接上然后可以用dmesg | grep sd看内核有没有在启动或者热插拔时发现新设备。遇到虚拟化平台还要检查是不是忘了在虚拟机设置里把磁盘挂载给这台机器这个坑在云服务器和虚拟化环境里尤其常见稍后单说。1.3 那种“识别不出来”的硬盘到底怎么回事先说结论大多数“识别不出来”都是假象盘实际上被看见了只是没有分区没有文件系统所以你在文件管理器里看不到任何容量。真正系统层面看不见的情况通常集中在三个原因。第一是热插拔场景下的驱动或总线问题SATA盘的顺序在热插拔后可能从sda挪到sdb而fstab里如果写死了旧设备名就会出现开机挂载错位第二是分区表本身损坏这种情况fdisk -l会直接报错说找不到有效的分区表第三是虚拟化环境忘记挂载磁盘比如某云控制台新增了数据盘但实例内部要等操作系统重新扫描总线才能看到。判断“系统到底看没看见”有一个比较可靠的办法用lsblk和fdisk -l互相验证前者看的是内核已知的设备树后者是直接读取磁盘分区表两个命令都看不到才基本可以确定是物理或者虚拟化层面的问题。如果只是df -h看不到那多半是接下来要讲的分区与挂载环节还没做。2. 分区到底是在做什么用哪个工具更顺手确认硬盘被系统认出来之后下一步就是分区。这一步很多教程都是一句话带过但分区其实是“给硬盘定规则”的过程规则没定对后面格式化、挂载都会跟着别扭。我打个比方。一块新硬盘就像一块还没划分房间的空地。空地本身不能用你得先在地上画出道路和区域界线标明哪块是住宅、哪块是仓库、哪块留白这个“画线”的动作就是分区。MBR和GPT就是两种不同的“画线规范”而fdisk、parted这些工具就是拿着规范在地上画线的“施工队”。2.1 MBR和GPT的差异决定了你要不要一路回车分区表类型直接决定这块盘能支持多大容量、能分多少个区以及哪些系统能识别。我见过一些老教程还在默认用MBR新人不假思索照做结果2TB以上硬盘只有前2TB可用剩下部分全部浪费等发现的时候数据已经写进去了尴尬至极。MBRMaster Boot Record是老派规范分区表放在磁盘最开始的那512字节里结构简单兼容性极好连上世纪的老机器都能认。但它的天花板很明显单块盘最大只能管理到2TB而且只允许4个主分区想多分就得用扩展分区的办法绕。如果你只是给一台老机器加一块小容量盘当启动盘MBR完全够用真的不用纠结。GPTGUID Partition Table是现代规范也是目前所有新机器、新系统的主流默认。它对容量的支持上限大得多理论上有多少空间就能用多少空间分区数量方面标准设计支持到128个日常完全不会撞到限制。它还在头部之外保留了冗余的分区表备份容错性也更好。我给你的选型建议很简单新装的机器、数据盘、2TB以上的大容量盘一律用GPT只有当你明确知道某块老主板或者老系统对MBR有硬性要求时才回退到MBR。在Linux下用fdisk新版工具分区时默认就会帮GPT说话这对新人反而是个保护。2.2 fdisk交互式操作记录从新手角度走一遍很多人怕fdisk是因为它是个交互式工具进去之后屏幕上全是字母提示不敢乱按。其实常用的按键一只手数得过来p打印分区表n新建分区d删除分区w保存退出q不保存退出。记住这五个就够走完整个流程。操作前先确认设备名。假设我要给设备/dev/sdb分区fdisk /dev/sdb进入交互界面后按n开始起一个分区。默认会问你是主分区还是扩展分区新手用GPT的话不会碰到这个问题直接用默认值。然后会让你输入起始扇区我建议直接回车用默认值现在工具默认会按1MiB对齐来设置起始位置对SSD比较友好不需要手填一个神秘的数字。结束扇区那里同样可以直接回车表示用满整块盘或者写200G这种格式来指定分区大小灵活性在你手上。搞定之后按p看一眼分区计划确认无误再按w写盘。这一步特别重要因为w一旦执行分区表就真的写入磁盘了。如果你中途发现自己划错了按q退出就行刚才按过的n、d全部作废磁盘不会有任何改变。这个“w和q的区别”是新手最容易忽略的安全阀。2.3 parted翻车实录为什么脚本化方案未必适合新手新手有另一个常踩的坑就是我图新鲜用了parted结果被它的操作风格打得措手不及。parted的优势是支持脚本化、能直接在命令行后接参数一步到位比如parted /dev/sdb mklabel gpt parted /dev/sdb mkpart primary ext4 1MiB 100%这两条命令确实能完成从建分区表到划区的全部工作看起来比fdisk高效得多。但parted对用户输入非常“实诚”很多操作一旦确认就会立即执行不存在fdisk那种先草稿后提交的机制。我认识不止一个人用parted时把设备名写错了本想分区sdb结果稀里糊涂对正在使用的sda执行了建表命令那酸爽的滋味我不太想替你体验。所以我给初学者的建议是交互式用fdisk谨慎推进脚本化用parted务必确认设备名。如果你正在给生产环境机器加盘我强烈建议你至少把fdisk流程走完每一步打印出来的分区计划都跟备份记录核对一遍再提交。这个习惯能救你很多次。3. 文件系统这一步才是“分区变存储空间”的关键分区表画完之后你有了/dev/sdb1这样一个分区设备但这还不是终点。这时候你去挂载它系统会直接报错说“unknown filesystem type”因为分区里还没有组织数据的规则。分区的下一步是创建文件系统也就是俗称的格式化。还是拿空地打比方分区画好了区域界线但区域内部还是一片荒地需要你铺设道路、建编号门牌、制定堆放规则文件系统就是这个“内部规整”的过程。没有文件系统操作系统不知道数据该怎么存放、怎么索引、怎么清理所以格式化绝不是可有可无的一步。3.1 分区表只是地图文件系统才是数据的组织规则很多人以为格式化就是“清空数据”这个理解偏了。格式化更准确地说是“初始化”它在分区内创建一套数据组织框架。不同的文件系统类型就是不同的组织框架就像仓库里既有按货架编号管理的也有按颜色分区的各有各的玩法。Linux下常见的文件系统有ext4、xfs、btrfs还有面向特殊使用场景的vfat、ntfs等。对于一块数据盘选型主要看用途。ext4是最稳妥的老将兼容性好、出问题容易恢复日常文件和普通数据库使用都很不错xfs在超大规模文件和吞吐性能上更有优势是不少分布式存储和虚拟化环境的默认选择btrfs功能丰富支持快照和压缩但对使用者的理解能力要求更高生产环境里不是我的首选。选择文件系统有个很现实的原则不要为了“理论上最厉害”去选自己不了解的选你出问题时最容易找到资料、最可能问得到人的那一个。ext4就是这种“平庸但安心”的选择xfs则在需要大容量高吞吐时值得考虑。3.2 ext4和xfs怎么选别被“性能最好”带偏我把常用文件系统放在一张表里对照看这样的差异会非常直观文件系统特点适合场景注意事项ext4老牌稳健工具链成熟排查资料多普通数据盘、数据库、虚拟机镜像最大单文件16TB单分区上限可达1EB实际受工具限制xfs大文件性能好扩展性强适合大容量海量大文件存储、备份目录、虚拟化平台不支持缩容扩容只能增加btrfs快照、压缩、自愈等高级功能需要快照和子卷特性的高级场景功能多但复杂度高新手慎入生产vfat/ntfs与Windows交换数据时的兼容选项USB移动盘、双系统共享盘权限支持极其有限不适合装Linux程序我用一段白话帮你做决定如果是机器上的普通数据盘ext4几乎不会出错如果你预期这块盘里以后会堆大量日志、备份、或者虚拟机镜像文件那xfs更合适如果只是临时倒腾文件用vfat也没毛病。3.3 mkfs命令实操及格式化前需要想清楚的事创建文件系统的命令格式非常直接mkfs.ext4 /dev/sdb1 # 或者 mkfs.xfs /dev/sdb1格式化之前有几件事必须想清楚这是我最想反复强调的。第一确认你格式化的目标设备是对的那一个。mkfs执行时不跟你儿女情长如果你手一抖把设备名写成了正在用的分区那个分区里的所有数据会瞬间归零而且这个过程没有回收站。我自己的习惯是格式化前一定要先看一遍lsblk和fdisk -l设备名、容量、挂载点全部对上才动手宁可多花三十秒也不要拍脑袋。第二确认这个分区未来不会需要缩容。分区规划时如果觉得不确定我的建议是“宁大勿小”尤其不要轻易把系统盘和数据盘放在同一个分区里以后想拆开难度翻倍。用LVM逻辑卷管理当然能缓解这个问题但那是后面系列文章的内容这一篇我们先用传统方式把事情跑通。第三也是很多教程不提的格式化操作会消耗时间。小盘几秒搞定几TB的大盘可能要好几分钟期间千万不要强制中断。如果你在虚拟机上格式化一块“预分配”的大容量磁盘时间会更长别误以为死机了看进程状态就好。4. 挂载的底层逻辑把设备接到目录树上的那一瞬间分区格式化完之后设备拥有了一套完整的存储空间但Linux用户要访问它还差最后一道手续——挂载。挂载这个词听起来有点玄其实就是“给这个文件系统找一个门牌号让它出现在系统目录树的某个位置”。很多初学者挂载之后就完事了也不理解为什么要这样做。这里面的底层逻辑其实一句话就能讲透Linux中没有Windows那种独立的“盘符”全系统只有一个从根开始的目录树任何存储设备里的文件系统想被访问都必须“接入”这棵树的某个目录节点上。那个目录就是挂载点。4.1 Linux只有一个根目录树挂载点就是设备的“入口”如果你进入一个目录后用df -h查看会发现它显示的是某个分区这是因为你看到的文件实际存在那个分区的文件系统里。挂载的本质就是告诉系统从目录/data开始往下的所有子树路径都由我这份文件系统提供内容。没有挂载分区里的文件系统只是个封闭空间只有内核知道它存在普通程序访问不到。这个设计解决了一个非常实际的问题你完全不用担心“系统里有几个盘、每个盘叫什么盘符”只要挂载点规划合理用户可以无感地跨设备使用文件。比如/home挂一个大分区、/data挂另一个大分区对用户来说都只是路径不同而已。设置挂载点有几个小讲究。目录名最好能体现用途比如/data用于数据盘、/backup用于备份盘挂载点目录必须预先创建好mkdir一下不费劲尽量别把挂载点建在系统盘的顶层繁忙目录里避免两个文件系统在同一路径上打架。4.2 mount命令的完整打开方式挂载命令的基本结构是mount [参数] 设备 挂载点实际操作里大多数场景只需要指定设备和挂载点系统会从设备上的文件系统类型自动判断挂载方式mkdir -p /data mount /dev/sdb1 /data执行完可以用df -h验证你会看到/dev/sdb1已经挂在/data下剩余容量一目了然。有时候还需要加参数比如只读挂载可以写成mount -o ro /dev/sdb1 /data这种只读挂载非常适合备份恢复场景防止误操作把数据改坏。这里必须提醒一个所有新手都会犯的错挂载前要确认挂载点目录是空的。如果目录里原来有子目录和文件挂载后这些旧文件会被“盖住”你访问到的全是新分区的内容而旧文件并没有被删除只是暂时看不见了。等你解除挂载它们又会重新出现。这就像在一个房间门口贴了张新图门开着还是旧房间但隔着图你只能看到新图的内容。这个机制既能保护数据也容易让人误以为“文件丢了”。4.3 挂载参数与性能noatime为什么是很多人忽略的一行mount命令的-o参数不只是管读写权限它直接关系到基础性能。最被我常挂在嘴边的一个参数是noatime。Linux默认记录文件访问时间atime意味着每次读文件都要写一次时间戳。在数据库或日志类高并发读写场景下这种“读文件还得写磁盘”的行为会产生不必要的IO开销。挂载时加上noatime就相当于告诉系统“不更新访问时间别做这笔多余开销”对性能往往有肉眼可见的改善。对绝大多数数据盘来说放弃atime并没有实际损失所以我建议普通数据盘一律加上。另一个常用参数是nofail它在上一步fstab场景中更有用先记下这个名字下一节细说。还有defaults它相当于一堆默认选项的组合包括读写、异步写入、设备允许执行程序等适合一无所知时先跑起来。5. 永久挂载fstab里的每一列都是一个坑挂载命令执行完一切看起来都正常了但你重启一遍机器就会发现/data目录又空了设备也没有自动挂载。这是因为 mount 命令只对当前开机周期生效它不会写进任何持久化配置。想让系统每次启动都自动挂载就得修改/etc/fstab这个文件。fstab的全称是File Systems Table它是系统启动时读取的“挂载清单”。如果你没配置它重启后就得手动mount这在日常测试没问题放到生产环境就是灾难。我见过不少同学辛辛苦苦把数据写进新盘结果机房断电重启后程序找不到路径全公司业务报警原因仅仅是没有写fstab。所以一台正经服务器上的数据盘是必须要做永久挂载的。5.1 为什么重启就没了mount是临时的fstab才是清单我把这个过程再掰开一点讲。Linux开机后内核完成基本初始化就会去读/etc/fstab文件把里面登记的每一项设备按照指定路径挂载好。整个过程可以理解成fstab是一份早餐订单系统开机那一刻就是厨房开工时间订单里写了什么桌面就上什么。你手动敲的 mount 只是临时点了一份餐吃完重启就什么都没了。所以配置永久挂载的正确姿势是在/etc/fstab里写清楚“哪个设备、挂到哪、什么文件系统、哪些选项、是否备份、是否自检”一共六列缺一不可。5.2 UUID、设备名与卷标选谁当身份凭证写fstab时最关键的决策是用什么来标识“哪个设备”。有三个候选设备名、UUID、卷标。各自特点我直接列出来标识方式例子优点缺点设备名/dev/sdb1直观一眼看懂设备顺序可能变化重启后可能变成sdc1不稳定UUID2f8e9a5c-...全球唯一只要分区没重建就不会变不直观需要查卷标LABELdata有语义好看卷标可能冲突且依赖文件系统支持我的建议是默认用UUID。理由很简单设备名在热插拔、多盘场景下可能乱序UUID却等于每个文件系统唯一的身份证号稳定得多。拿到UUID的方法blkid /dev/sdb1输出里会直接给出那一串UUID。当然如果你用的文件系统正好支持卷标并且你能保证卷标在整个系统里唯一用它也不是多大的罪过只是UUID始终是最稳妥的选择。5.3 fstab六列完全拆解加一个恢复流程/etc/fstab里每一行都有六列这里用一行示例拆开讲UUID2f8e9a5c-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data xfs defaults,nofail 0 0第一列是设备标识这里写UUID第二列是挂载点必须是已存在的目录第三列是文件系统类型对上了分区格式即可第四列是挂载选项多个选项用逗号隔开我前面说的noatime和nofail都可以放这里第五列是是否备份一般写0第六列是开机时是否做文件系统检查根分区通常写1其他数据盘写0或2都行。这里专门说一下nofail。加了它之后如果系统启动时发现这个设备不存在不会卡死等待、也不会报错中断开机流程。这对U盘、可移除设备尤其有用不然拔掉U盘后重启系统有可能直接卡在某步等你按ctrld。数据盘要不要加nofail见仁见智有些人觉得数据盘必须存在失败了就应该停下来让人处理我个人的倾向是云服务器上默认加本地物理机视情况而定但我会先在测试环境验证。改完fstab后可以用mount -a让系统重新读取并尝试挂载所有条目确认配置没有语法错误再重启。如果真的一不小心写错了导致开机卡住不要慌进到单用户模式或者用系统安装U盘进入急救模式把/etc/fstab里出错的那一行注释掉重启即可。这个恢复流程建议在任意一台测试机上模拟一遍别等生产事故时第一次练手。6. 挂载之后还会碰到的事扩容、换盘与卸载分区挂载跑通只是开始真正的坑往往在后续维护里。我见过太多人分区表、文件系统建完之后就不管了直到磁盘空间不够才发现当初分区划小了、文件系统选型不好改悔之晚矣。所以把挂载之后的常见操作和坑也一并交代清楚。6.1 给正在使用的分区扩容时最容易犯的错扩容是个高频需求但不同文件系统的操作方式截然不同而且很多不能“缩回去”。ext4扩容的常规流程是先用工具调整分区大小然后执行resize2fs让文件系统扩展到新大小。xfs则是调整分区之后执行xfs_growfs。注意xfs不支持缩容“想缩小一个xfs分区”这个需求基本上是无解的只能备份重来。这个差异在你当初选文件系统时就应该心里有数别等装满了才临时抱佛脚。还有一个更隐蔽的坑很多人以为调整完分区大小后文件系统会自动变大实际上内核识别到的分区表信息和文件系统元数据不一定同步更新。所以你扩容后一定要执行resize相关的命令不要只改分区表就以为完事了。操作顺序错了或者漏了就会出现“分区显示变大了可用空间却不变”的诡异现象。6.2 卸载时target is busy的处理要卸载一个分区用umount /data可你经常会碰到系统回一句target is busy意思是还有进程在使用这个挂载点下的文件。这时候别急着强拆先用lsof /data或者fuser -mv /data看看是哪个进程占着。最常见的是你的shell当前工作目录就在里面cd出来就没事也有可能是某个服务还在后台读写。找到罪魁祸首之后要么结束对应进程要么用lazy unmountumount -l /data这种懒卸载让系统先断开挂载关系等所有进程不再使用时自动清理比强制卸载温和一点。但要注意它仍然有风险如果此时有进程正在写数据可能会丢数据。所以生产环境里的卸载操作我建议宁可多花时间确认进程也不要赌那一个 -l 参数。6.3 数据盘换新机器的迁移思路换机器、换机房、换云平台的时候数据盘的迁移是个硬活。最安全的思路永远是先文件级备份比如用rsync把/data的内容同步到新机器的对应目录校验无误后再切换服务。直接拔盘插新机器在纯物理环境也许能跑但涉及虚拟化平台、驱动差异、分区表类型兼容性的时候踩坑率陡增。如果非要拔盘迁移操作前至少要做这些事记录分区表结构检查文件系统完整性确认新机器内核支持该文件系统类型并提前准备好内核模块。迁移完成后第一时间检查挂载点权限和所有者这个细节很多人漏掉结果数据都在程序却因为权限不对起不来。权限文件在文件系统里同样有元数据拔盘迁移之后经常出现user ID对不上的情况。我个人在实际操作中的最大体会是整套分区挂载流程真正的门槛不在命令而在于操作前有没有建立“确认目标设备、确认分区表、确认数据可丢”的三确认习惯。你在/dev/sdb1上敲一条 mkfs敲之前多花三十秒看一眼lsblk比什么高级技巧都管用。后面如果继续写这个系列我可能会接着展开LVM逻辑卷管理、swap分区、以及系统盘和数据盘分离的最佳实践。这一篇你先把从零到一跑通后面的东西自然就顺了。

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

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

免费获取报价 →
↑