资讯动态

Linux磁盘挂载从入门到实战:分区、格式化、fstab与避坑指南

发布时间:2026/10/18 22:00:00 来源:尧图企业网站定制
1. 为什么磁盘挂载是Linux运维里绕不开的活儿干过几年Linux运维或者自己折腾过服务器的人估计都有这种经历刚拿到一台机器df -h一看根目录就几十个G数据盘呢数据盘在哪明明买的时候选了1T的数据盘怎么系统里根本看不见这时候老手会淡定地敲一句lsblk然后开始分区、格式化、挂载一套连招。新手可能就懵了为什么硬盘插上了系统不认到底什么叫挂载其实“挂载”这个词听起来玄乎说白了就是让操作系统知道“这块硬盘上的文件系统对应到我目录树里的哪个文件夹”。Linux里一切皆文件你的硬盘、分区、光驱、U盘本质上都是一个设备文件但这些设备文件本身没法直接当目录用。你得把它们“挂”到某个目录上才能通过这个目录去读写硬盘里的数据。这个过程就叫挂载。磁盘挂载这事看着基础实际上坑不少。分区表选MBR还是GPT文件系统选ext4还是xfs挂载参数要不要加noatime开机自动挂载怎么写才不死机这些问题每一个都有人在生产环境里踩过雷。这篇就把我从裸盘到正常使用、再到开机自挂载的完整流程以及中间踩过的坑一次说清楚。适合刚入门Linux的开发者也适合那些会用mount但从来没深究过的运维。2. 核心思路拆解你挂载磁盘前必须想清楚的几件事2.1 先搞明白为什么新买的磁盘插上后系统“看不见”很多朋友第一次接触服务器会默认硬盘插上就等于能用就像U盘插Windows那样。但服务器和台式机不太一样尤其是云服务器、独立服务器数据盘默认是未初始化的状态。Windows也会给未初始化的磁盘弹窗提示Linux则干脆沉默你进系统里翻半天除了/dev/sda这种设备文件之外什么都看不到。这里要区分一个核心概念设备文件 ≠ 可用存储。/dev/sdb这个文件存在只代表内核识别到了这块硬盘但硬盘上可能没有分区表、没有文件系统。没有文件系统操作系统就没法按目录的方式去读写它。打个比方设备文件就像一块没切过的巨大原木分区就是在原木上划线切割格式化就是在切好的木板上刷漆写标签挂载就是把这块木板钉到你家房子的某个房间里。三步少一步这块木板都用不了。所以挂载这件事本质上要回答三个问题这块盘是谁设备文件名、大小、型号它上面有什么分区表类型、分区结构、文件系统类型我要把它放哪挂载点目录2.2 在动手挂载之前先确认“盘是谁”第一次拿到的机器我一般按以下顺序排查lsblk看块设备树形结构能直接看到磁盘和分区的关系。fdisk -l看磁盘详细信息和分区表类型。blkid查看已有分区的UUID和文件系统类型。df -hT看当前已经挂载的文件系统以及格式。这套组合拳打完基本就能确定哪些盘是裸盘、哪些盘已经分好区了。注意一个细节lsblk和df的区别很多人搞混。lsblk显示的是块设备包括没挂载的磁盘df显示的是已挂载的文件系统。所以df里看不到的盘不代表系统里没这块盘别慌多半是还没挂载而已。2.3 分区表选MBR还是GPT这决定你未来能不能扩容现在的磁盘分区主流就是MBR和GPT两种风格。MBR是老的最大只能支持2T的单个分区而且最多4个主分区想更多得搞扩展分区麻烦。GPT是新的单分区轻松上PB级别分区数量几乎不受限还带冗余的备份分区表坏了能救。结论很简单2024年了除非你的系统是老掉牙的32位UEFI/BIOS环境有兼容性要求否则一律选GPT。尤其是云服务器上的数据盘动不动就是几T用MBR纯属给自己找麻烦。后面实操里我会用fdisk做GPT分区顺便解释为什么命令那么“老”但还是好用。当然你要是熟悉parted或gdisk也行但fdisk在主流发行版上默认就装好了兼容性最稳。3. 实操全过程从裸盘到正常读写3.1 第一步用lsblk确认目标磁盘先说一个真实的场景模拟项目X某公司一台新到的存储服务器系统盘是/dev/sda数据盘是一块/dev/sdb目标就是把/dev/sdb挂载到/data目录下用于存放项目日志和临时文件。开机进入系统先敲这个lsblk输出类似这样NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 39G 0 part / └─sda14 8:14 0 4M 0 part sdb 8:16 0 20G 0 disk看到sdb了吗20G的裸盘没有分区没有挂载点这就是我们要处理的对象。注意看sda下面有子节点sda1、sda14这说明sda已经分过区了而sdb下面空空如也说明它是真正的“素盘”从没被初始化过。这一步别跳。有人不看lsblk直接fdisk -l /dev/sdb碰运气万一搞错盘符把系统盘给格式化了那就真的会谢。操作前务必确认盘符这是磁盘操作的第一铁律。3.2 第二步用fdisk创建GPT分区确认无误后开始分区fdisk /dev/sdb进入交互界面后按键顺序如下输入g创建新的GPT分区表。输入n新建分区。分区号直接回车使用默认值1。起始扇区、结束扇区都直接回车让整个磁盘作为一个分区。输入w写入并退出。实际交互过程长这样Command (m for help): g Created a new GPT disklabel (GUID: xxxx). Command (m for help): n Partition number (1-128, default 1): First sector (2048-41943006, default 2048): Last sector, /-sectors or /-size{K,M,G,T,P} (2048-41943006, default 41943006): Created a new partition 1 of type Linux filesystem. Command (m for help): w The partition table has been altered.有人会问为什么不直接mkfs.ext4 /dev/sdb非得分个区出来直接格式化整块盘理论上也能挂载用但有两个问题一是后续想做LVM或扩容分区结构会更灵活二是某些工具和脚本会默认读分区表没有分区表可能导致兼容性问题。生产环境建议还是规范分区别图省事。3.3 第三步格式化把文件系统“刻”上去分区完成之后/dev/sdb1这个分区就出现了。但这时候它还是一张白纸得写文件系统。选ext4还是xfs这里给个参考文件系统适合场景特点ext4通用场景、小文件多的业务成熟稳定支持在线扩容兼容性最好xfs大文件、高吞吐场景性能强适合大容量存储但缩减容量困难btrfs需要快照、压缩的高级场景功能丰富但复杂度高不建议新手直接用我自己的习惯是默认选ext4除非有明确的性能需求才上xfs。理由很简单ext4是Linux发行版默认选择的文件系统出问题的时候能搜到的资料最多坑最少。格式化命令mkfs.ext4 /dev/sdb1这里会看到一串输出最后提示Writing superblocks and filesystem accounting information: done。格式化完成后可以用blkid /dev/sdb1查看新分区的UUID后面写fstab要用。3.4 第四步创建挂载点并挂载挂载点就是你想让这块盘出现在目录树哪个位置的“门牌号”。一般习惯建一个空目录mkdir -p /data mount /dev/sdb1 /data挂载完成后立刻验证df -hT /data输出应该能看到/dev/sdb1对应/data文件系统类型是ext4大小20G。到这一步临时挂载已经完成进程里的程序往/data写数据就是往这块新盘上写了。但注意mount命令挂载是临时生效的重启系统后挂载关系就没了。要让系统开机自动挂载必须写/etc/fstab这就是下一步的关键。3.5 第五步写fstab实现开机自动挂载/etc/fstab是Linux开机时读取的挂载配置表。编辑它之前先备份这是好习惯cp /etc/fstab /etc/fstab.bak.$(date %F)然后编辑/etc/fstab在文件末尾追加一行UUID你的UUID值 /data ext4 defaults 0 2UUID用blkid查别手抖写错。这行六个字段的含义我逐一说清楚第一字段设备标识这里用UUID不用/dev/sdb1。因为设备名可能在重启后变化比如插拔磁盘顺序变了UUID是唯一的文件系统标识更可靠。第二字段挂载点必须是一个已经存在的目录。第三字段文件系统类型ext4、xfs等。第四字段挂载参数defaults表示用默认参数rw、suid、dev、exec、auto、nouser、async。第五字段是否dump备份0表示不备份。现在基本都用0。第六字段fsck检查顺序0表示不检查1是根文件系统2是其他文件系统。数据盘填2即可。写完之后别急着重启先验证一下配置对不对mount -amount -a会读取/etc/fstab尝试挂载里面所有还没挂载的文件系统。如果没有报错说明配置基本没问题。再df -h看一眼/data已经在列表里了。到这一步重启之后这块盘也会自动就位。4. 容易踩的坑fstab写错、权限不对、挂载目录有数据4.1 坑一fstab写错导致开不了机这是磁盘挂载里最经典的“工伤”。/etc/fstab如果写错了系统开机时挂载失败可能直接进入紧急模式emergency mode屏幕上就是一堆报错和一个root shell。新手见到这阵势往往吓得直接重装系统其实有救。碰到这种状况先输入root密码进入紧急模式的shell然后执行mount -o remount,rw /这一步很重要因为紧急模式下根文件系统通常是只读的不重新挂载为读写你连/etc/fstab都改不了。然后打开/etc/fstab把有问题的那行注释掉或改正确保存重启即可。怎么提前避免写fstab之前一定用findmnt /data确认当前挂载是好的写完fstab之后先用mount -a测试。另外只要不是根分区建议fstab里写上nofail参数意思是“这个设备挂载失败也没关系不要阻塞系统启动”UUID你的UUID值 /data ext4 defaults,nofail 0 2这个参数在云服务器和移动硬盘场景下特别有用。比如你外接了一块USB移动硬盘开机时它没插上如果没有nofail系统就直接卡在等待挂载那里你说冤不冤。4.2 坑二挂载目录里原来有数据挂载后“消失”了假设你原本有个/data目录里面已经存了2G的临时文件然后你直接mount /dev/sdb1 /data再进/data看一眼发现之前的文件全没了。别慌数据没丢它们还在原来的磁盘分区上只是被挂载动作给“遮住”了。Linux的挂载机制就是这样挂载点目录原本的内容会暂时隐藏等卸载之后才会重新出现。所以实操时有个重要建议——挂载点最好是空目录或者在挂载之前把原目录内容迁走。如果原来目录有重要数据正确做法是先mv /data /data_old挂载好新盘后再mv /data_old/* /data/把数据倒进去。4.3 坑三CentOS和Ubuntu的“自动挂载”行为不一致有些朋友在Ubuntu上插U盘发现即插即用根本不用手动mount就以为Linux天生如此。其实那是桌面环境的功劳桌面版系统自带udisks2之类的自动挂载服务。到了纯服务器尤其是最小化安装的CentOS桌面都不一定有也没什么自动挂载服务一切得手动来。我踩过一次印象很深的坑某次在一台CentOS机器上用mount /dev/sdb1 /mnt挂了个临时盘下班走人时忘了卸载第二天同事重启了机器一切正常后来又有一次我挂载到了/mnt下心想反正不影响结果另一个同事往/mnt目录里写了脚本莫名其妙被新挂载的盘“遮住”了排查了半天才发现是挂载点的锅。所以临时挂载用完就umount长期挂载写fstab别用/mnt这种公共目录做数据盘挂载点容易出乱子。4.4 坑四分区格式化后容量对不上新买的20G数据盘格式化完一看df -h只有19G甚至更少很多新人就慌了以为自己买错了。其实这是正常现象原因主要有三硬盘厂商用十进制计算1GB 1000MB操作系统用二进制计算1GB 1024MiB标称20G的盘在系统里本来就只有18.6G左右。文件系统自身有元数据开销ext4会预留5%的块给root用户防止根文件系统写满导致系统异常。数据盘也可以把这5%释放出来tune2fs -m 0 /dev/sdb1这个命令把预留比例调成0对数据盘来说可以把空间全部释放给业务使用对系统盘建议保留默认别乱动。4.5 坑五目标磁盘被占用umount失败挂载好的盘想卸载却提示target is busy这种情况多半是有进程正在使用该目录下的文件。可以用lsof或fuser定位lsof /data fuser -mv /data找到占用进程之后要么停掉进程要么用umount -l执行“懒卸载”。懒卸载的意思是先解除目录树的关联如果此时有进程还在读写旧挂载点它会继续用等进程结束后磁盘才会真正卸载。等份的场合下umount -l能应急但生产环境最好还是确定没有进程占用再卸免得数据没落盘。5. 常见的进阶问题排查速查表下面把我平时在社区答疑和实际项目里收集到的、频率最高的挂载问题整理成一张表对着表排查能省不少时间现象原因排查命令解决办法df -h看不到新盘没格式化/没挂载lsblk、fdisk -l分区格式化后mount开机后进emergency modefstab写错或设备不存在cat /etc/fstab紧急模式中改fstab挂载时报wrong fs type内核缺文件系统驱动cat /proc/filesystems安装对应的文件系统工具包mount时提示already mounted重复挂载或挂载点没卸载findmnt /data先umount再挂载写入文件提示磁盘只读文件系统错误或磁盘故障dmesg | tail卸载后fsck检查修复umount提示target is busy有进程占用目录lsof /data停止占用进程或umount -l挂载后权限不足无法写文件系统或权限配置问题ls -ld /data调整目录属主或挂载参数加uid/gid大分区无法格式化分区表用了MBRparted /dev/sdb print重建GPT分区表再补充两个不太直观的细节。挂载参数里noatime怎么选。每次读文件时系统默认会更新文件的访问时间atime这对磁盘是一种额外的写操作。对于日志、静态资源这类读写比极高的目录挂载时加上noatime可以减少不必要的I/O提升性能。但如果你有程序依赖atime做文件访问审计就别加了否则数据会不准。sync参数对U盘、移动硬盘有用。默认挂载是异步写入数据先写到内存缓存再异步刷到磁盘性能好但断电可能丢数据。移动硬盘这种随时可能被拔走的设备挂载时加上sync可以让写入立刻落盘换的是写入性能降低。对U盘拷贝文件后直接拔盘最安全的就是带着sync挂mount -o sync /dev/sdb1 /mnt/usb6. 挂载之外的延伸思考LVM、Swap与日常维护习惯6.1 数据盘挂载LVM还是单分区一把梭我接手的项目里很多数据盘就是直接一个分区挂上去图简单。但如果你意识到业务以后可能要扩容最好一开始就上LVM。LVM的逻辑卷管理能把多块物理磁盘“池化”逻辑上切成任意大小的卷扩容时可以动态加盘不中断服务。LVM的流程一般是pvcreate /dev/sdb1 vgcreate vg_data /dev/sdb1 lvcreate -L 15G -n lv_data vg_data mkfs.ext4 /dev/vg_data/lv_data mount /dev/vg_data/lv_data /data这样以后空间不够了再加一块盘vgextend加进卷组lvextend扩展逻辑卷再resize2fs扩展文件系统全程不用停机。如果业务不重要、盘也不大单分区省事也就够了。决策依据是这块盘以后会不会扩容会不会跨多块盘大概率会那就别省这一步。6.2 Swap文件系统或交换分区依然不过时内存不够的时候Linux会使用Swap交换空间。云服务器默认系统盘里往往已经建好了swap分区free -h看一眼就知道。如果内存特别紧张可以把数据盘分一小块出来做swap文件虽然性能不如真实内存但总比进程被OOM killer杀掉好。做法也不难dd if/dev/zero of/data/swapfile bs1M count2048 chmod 600 /data/swapfile mkswap /data/swapfile swapon /data/swapfile然后同样需要在/etc/fstab里加一行/data/swapfile none swap sw 0 0一句话说清楚swap不用像普通数据盘那样挂在目录里它直接交给内核当内存用。6.3 日常维护的两条实在建议第一监控磁盘空间。磁盘写满是一个比想象中更常见的故障源。日志、临时文件、容器镜像随时随地都可能把盘吃满。建议在cron里加一条定期检查或者用du -sh /*扫描大目录有条件的上监控系统。等磁盘满了再去看业务早就报错了。第二改完fstab和mount之后养成习惯执行mount -a验证回到家再dmesg | tail看有没有文件系统相关的错误。不要改完就关机走人特别是远程操作的服务器真开不了机了你就只能去机房了。7. 写在最后的个人经验谈磁盘挂载这个动作操作层面真没什么难的难的是对概念的理解和对异常的预判。我见过很多人命令敲得飞快mount、umount、mkfs顺手就来但一遇到fstab开机失败就完全慌了神也见过一些同事每次都老老实实先lsblk确认盘符、先备份fstab再改配置看着慢但几乎从没出过生产事故。这两者的差别不在于谁记得的命令多而在于谁更敬畏“磁盘操作”这四件事。我个人在实际操作中的体会是挂载的每一步其实都在回答“这块盘和设备信息对不对得上”这个问题。别嫌麻烦每次操作前比对新盘的UUID、大小、挂载点确认三遍再动手——这花的不是冤枉时间是买保险。尤其是格式化这种不可逆的操作做错了真要出大问题。最后分享一个小技巧如果你经常要在一台机器上管理多块数据盘建议统一命名挂载点比如/data1、/data2而不是随手挂到/mnt或/media下。这样不论是自己排查还是交接给同事都一目了然。挂载本身不复杂复杂的是把系统维护得井井有条。愿大家挂载顺利数据永在。

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

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

免费获取报价 →
↑