挂载硬盘这件事,说难不难,说简单也翻过车。明明硬盘插上去了,系统里却看不到,或者看到了但重启后又消失,甚至不小心把系统盘给格式化了,这些坑我都踩过。这篇就围绕 Ubuntu 下的硬盘挂载,从识别设备、分区格式化、手动挂载,到开机自动挂载和常见问题排查,完整捋一遍,给你一套能直接照着操作、也能帮你避开雷区的方案。
1. 挂载到底在做什么:搞清三个关键概念
想彻底搞懂挂载,先得把“分区”“文件系统”“挂载点”这三个词拆开。很多人一开始就是被这三个词绕晕的。
1.1 分区不是格式化,两者千万别混淆
硬盘买回来是块“白盘”,上面什么都没有,没法直接存数据。第一步是分区,相当于给硬盘划定使用区块。比如把一块 4TB 的盘分成一个整区,或者分两个 2TB 的区,这取决于你的规划。分区本身不产生任何数据读写能力,它只是定义了硬盘的“空间布局”。
分区之后才是格式化,也就是创建文件系统。文件系统决定数据以什么结构存放在分区里,比如 ext4、XFS、Btrfs 这些。可以这么理解:分区是建房子时划分房间,格式化是给每个房间装上储物架、贴上标签,之后才能往里放东西。
在 Ubuntu 下,分区工具是fdisk或parted,格式化工具是mkfs。新手最容易犯的错误就是把分区和格式化混为一谈,以为分完区就能挂载使用了,实际上没格式化就挂载,系统会直接报错“wrong fs type”。
1.2 挂载点就是个“接入口”
Linux 里没有 C 盘 D 盘的说法,所有文件和硬盘都是通过目录来访问的。挂载,就是把某个分区“接”到某一个目录下,之后往这个目录里写东西,实际就是往那个分区里写。
挂载点本身可以是任意空目录,比如/mnt/data、/srv/storage,甚至/home。选择挂载点时有个原则——建议用专门的空目录,不要随便挂到已有内容的目录上。如果挂载点目录里原本有文件,挂载后这些文件会被“遮住”,访问不到了,但数据还在,只是暂时隐藏。等卸载之后又会重新看到。
规划挂载点时,通常建议:
- 临时挂载:用
/mnt下的子目录 - 长期数据盘:建议
/data、/srv/data这类自己创建的目录 - 家目录或特定用途:挂到
/home的某个子目录
我一般会在根目录下建一个/data,把机械硬盘、SSD 都按作用挂进去,比如/data/media、/data/backup,这样所有数据路径清晰,后续备份、迁移也方便。
2. 上手实操:分区、格式化、挂载的完整流程
下面这段是核心操作,按步骤走就行。演示环境是 Ubuntu 22.04 LTS,硬盘是新增的一块 4TB 机械硬盘,设备名可能是/dev/sdb,以你的实际输出为准。
2.1 找到你的硬盘:用 lsblk 识别设备名
操作开始前千万要搞清楚哪块盘是哪块。打开终端,执行:
lsblk这个命令的结果非常直观,类似:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 238.5G 0 part / sdb 8:16 0 3.7T 0 disklsblk按树状结构展示块设备,sda是你的系统盘,sdb就是刚插上去的新硬盘。在没有分区之前,sdb下面不会显示任何子项。也可以用sudo fdisk -l看更详细的信息,包括磁盘型号、扇区大小,用来交叉确认硬盘身份。
注意:
sda、sdb这种设备名不是永久固定的。如果新插一块硬盘,系统可能把设备名重新排列。所以确认身份时要结合容量大小来判断,避免把系统盘当成新盘操作。
确认好哪块盘是新盘之后,后续所有操作都以它为目标。
2.2 创建分区:使用 fdisk 还是 parted?
新硬盘分区有两种常用工具:fdisk适合 2TB 以下的盘和 MBR 分区表,parted或gdisk适合 2TB 以上的大容量盘使用 GPT 分区表。
MBR 分区表最大只能支持 2TB 的容量,超过 2TB 的硬盘必须用 GPT。现在的新硬盘,建议统一使用 GPT 分区表,这也是 UEFI 时代的主流标准。所以即便是小容量盘,我一般也用parted或gdisk。
用parted创建一个 GPT 分区表和一个整盘分区:
sudo parted /dev/sdb进入 parted 交互界面后:
(parted) mklabel gpt (parted) mkpart primary 0% 100% (parted) print (parted) quit这段命令的意思是:先把磁盘分区表设为 GPT,然后建一个从 0% 到 100% 空间的主分区。如果之后想拆成多个分区,把 100% 改成具体的百分比就行,比如 0% 50% 和 50% 100%,分两个区。
如果更习惯传统方法,用fdisk也完全可以,但和 parted 有个明显差异:fdisk 创建的 MBR 分区表遇到大容量盘会有问题,所以只要盘大于 2TB,直接选 parted 或 gdisk 就没这么多事。
分区完成后,再用lsblk检查,能看到sdb1这个分区出现了。
2.3 格式化:ext4、XFS 还是 Btrfs?
分区好了,下面要创建文件系统。选什么文件系统,影响性能和后续维护,目前最常见的三种:
| 文件系统 | 适合场景 | 优势 | 劣势 |
|---|---|---|---|
| ext4 | 通用数据盘、系统盘 | 稳定成熟,兼容性好,几乎任何 Linux 发行版都支持 | 大目录性能一般,不支持数据校验 |
| XFS | 大文件、多媒体存储 | 高吞吐量,处理大文件性能出色 | 不能缩小分区,遇到断电需要修复 |
| Btrfs | 快照、压缩、高级功能 | 支持快照、子卷、压缩、数据校验 | 复杂性高,一些时候性能波动 |
个人建议,如果你只是挂个盘存文件、放视频照片这些,用 ext4 最省心;如果是跑数据库、存虚拟机镜像这类对读写性能有要求的场景,XFS 表现更好;如果你喜欢折腾快照和备份,Btrfs 值得尝试,但需要提前熟悉它的管理命令。
格式化命令:
sudo mkfs.ext4 /dev/sdb1如果是格式化成 XFS:
sudo mkfs.xfs /dev/sdb1格式化中途不要断电、不要强制中断,否则文件系统结构会损坏,虽然 mkfs 会检测出大部分问题,但还是要尽量避免意外中断。
重要:格式化会把整个分区的数据全部清空。操作前务必确认
/dev/sdb1这串字符没有写错。我见过有人因为设备名看走眼,sdb和sdc混了,结果把存满资料的分区格式化了。确认方法很简单:打开另一个终端,执行lsblk -o NAME,SIZE,MODEL,对照硬盘品牌和容量,再执行格式化。
2.4 创建挂载点并挂载
格式化完成后,创建挂载目录并手动挂载验证:
sudo mkdir -p /data sudo mount /dev/sdb1 /data挂载后检查是否成功,看输出结果:
df -h /dataFilesystem Size Used Avail Use% Mounted on /dev/sdb1 3.7T 24K 3.5T 1% /data看到这个结果就说明挂载成功了。还可以使用findmnt /data,输出的信息会更详细,包括文件系统类型和挂载参数。
但这里有个大坑,重启之后挂载就会消失,系统不会自动帮你挂载。这是 Linux 的默认行为,想要开机自动挂载,必须要往/etc/fstab里写配置。
3. 开机自动挂载:fstab 配置的正确姿势
3.1 为什么用 UUID 而不是设备名
/dev/sdb1这个设备名不是稳定的。同一块硬盘,开机顺序变了,内核发现了先后顺序变了,设备名就可能变成/dev/sdc。等你重启完发现挂载失败,就很折腾。
Linux 给每个文件系统分配了一个全局唯一标识符,叫 UUID。这个值在格式化时生成,只要不重新格式化,它永远不变。所以 fstab 里应该用 UUID 来引用分区。
查看 UUID:
sudo blkid /dev/sdb1/dev/sdb1: UUID="a1b2c3d4-1234-5678-abcd-1234567890ab" TYPE="ext4" PARTUUID="..."拿这里UUID=后面引号里的内容,就是你要在 fstab 里用的标识。
3.2 手把手配置 /etc/fstab
打开 fstab:
sudo nano /etc/fstab每行一个挂载配置,六个字段,分别代表:
<设备> <挂载点> <文件系统类型> <挂载选项> <dump> <fsck>我的推荐配置:
UUID=a1b2c3d4-1234-5678-abcd-1234567890ab /data ext4 defaults,noatime 0 2逐个字段解释:
- 第一个字段:设备,这里填 UUID
- 第二个字段:挂载点目录
- 第三个字段:文件系统类型 ext4,用 XFS 就填 xfs
- 第四个字段:挂载选项,
defaults是标准组合。noatime表示不更新文件访问时间,可以减少写盘次数,对 SSD 和机械盘都有一定性能提升 - 第五个字段:是否备份,通常填 0
- 第六个字段:开机时文件系统检查顺序。根分区
/填 1,其他数据盘填 2,不需要检查就填 0
保存退出后,用下面命令验证配置有没有写错:
sudo mount -amount -a会依据 fstab 自动挂载所有尚未挂载的条目。如果执行后没有报错,再用df -h确认/data已经挂载上。只要mount -a报错,先别急着重启,仔细看错误提示,fstab 写错可能导致系统开机无法进入桌面。
挂载选项里还有一个常见的坑,就是添加nofail选项:
UUID=xxx /data ext4 defaults,noatime,nofail 0 2nofail的含义是,如果系统启动时这个设备不存在或挂载失败,不报错、不卡住,继续正常启动。对于外接移动硬盘、USB 硬盘、有时会断开的设备,这是一个非常实用的选项。固定内置硬盘可以不加,但加了也没什么坏处。
3.3 一个值得注意的顺序问题
如果你是给服务器、NAS 这类 7x24 小时运行的机器配置新硬盘,建议把数据盘挂载在独立的目录下,比如/data、/srv/data。如果直接挂到/home或/var这类系统关键目录,万一盘挂了,系统服务也会跟着连带出问题。
4. 挂载后的权限设置与常规维护
4.1 普通用户如何读写挂载盘
用 root 挂载的 ext4 分区,默认挂载后只有 root 能写入。普通用户访问时经常会遇到Permission denied。解决方式有两种。
临时简单的方式是直接给挂载点目录授权:
sudo chown -R $USER:$USER /data把/data的属主改成当前用户。要注意chown修改的是目录和现有文件的权限,新盘上还没有文件所以这个方式很直接。
但要注意:如果 fstab 里配置了noatime等选项,或者以后新增其它用户,这个目录的属主就是固定写死在盘上的,所有文件都以这个属主身份存取。多用户场景可以考虑用更细粒度的权限方案,但家用场景chown已经足够。
4.2 检测硬盘健康状态
挂载不是终点,Linux 下机械硬盘需要定期关注健康状态,否则等你发现数据丢失的时候就晚了。
看 S.M.A.R.T. 信息:
sudo smartctl -a /dev/sdb重点关注这几项:
Reallocated_Sector_Ct:重映射扇区数,数值持续增加意味着盘片出现坏道Current_Pending_Sector:待重映射扇区,如果这个数字不为 0,赶紧备份数据UDMA_CRC_Error_Count:这个数字一般和不当关机、接口松动相关,如果持续增长要考虑换线
如果系统没装 smartctl,先安装:
sudo apt install smartmontools使用-a参数之前先确认硬盘支持 S.M.A.R.T.,一般硬盘都会支持,输出里能看到相关信息。
4.3 卸载硬盘的正确做法
不要直接拔掉活动硬盘,建议先卸载再断电:
sudo umount /data如果提示target is busy,说明有进程正在使用这个目录。用lsof +D /data查看哪个进程占用,确认无误后关掉那个进程再卸载。
提示:
umount不是unmount,不要写错。写成unmount会让你直接收到 command not found 的报错。
5. 常见报错和排查思路汇总
挂载硬盘的过程中,有几个报错我反复见过,这里整理成速查表,方便对照处理。
| 现象 | 可能原因 | 解决方式 |
|---|---|---|
mount: wrong fs type, bad option... | 分区还没格式化,或指定的文件系统类型不对路 | 用blkid确认分区格式,再按实际类型挂载 |
mount: /data: mount point does not exist | 挂载目录没创建 | 执行sudo mkdir -p /data |
mount: /data: mount point is not empty | 挂载点目录里已有文件,挂载后会隐藏原内容 | 换一个空目录,或者把原目录里文件先移走 |
mount: /dev/sdb1 already mounted or /data busy | 设备和挂载点已被占用了 | 用findmnt查看当前挂载情况,确认是否正确 |
| 重启后挂载消失 | 没写进 fstab | 按第 3 节配置好 fstab |
开机后提示Failed to mount /data卡住 | fstab 配置有问题 | 检查 UUID 是否输入错误,或加上nofail选项 |
Permission denied无法写入 | 权限不够 | 参考 4.1 节用 chown 调整属主 |
fsck.ext4: unable to resolve 'UUID=...' | fstab 里 UUID 和实际不符 | 用lsblk -f或blkid核对 UUID |
还有一个很多人问过的场景:新加的硬盘在lsblk里能看到,但系统里就是找不到对应的设备路径。一般是挂载点创建在非标准目录导致的错觉,lsblk的 NAME 列和挂载点是两个概念。比如/dev/sdb1存在并不代表访问/dev/sdb1就等于访问/data,必须先 mount。
6. 额外的一些实测心得
最后分享几个我自己实际使用中得出的经验。
第一,fstab 配置变更后,一定先用mount -a验证再重启。有几次我改完 fstab,自信满满直接重启,结果卡在挂载失败界面,还得手动进入系统修复模式改回来。验证这个动作只要几秒钟,比事后修复省事太多。
第二,长时间运行的数据盘,建议开启日志型文件系统的定期检查。ext4 有e2fsck工具,默认每 30 次挂载或 180 天会自动检查一次。不要把自动检查的周期改得过于频繁,否则会影响正常使用时的体验。如果发现访问速度莫名变慢,可以手动执行一次:
sudo e2fsck -f /dev/sdb1注意,这个命令必须在分区未挂载的情况下运行,不然会报错,还可能损坏文件系统。
第三,机械硬盘挂载后如果出现咔嗒异响、读写速度断崖式下跌,马上备份。这类症状十有八九是盘体或磁头出现问题,趁数据还没彻底丢失前及时抢救,不要心存侥幸。我有块硬盘就是开始时只是偶尔咔嗒声,觉得还能用,直到系统彻底认不出盘才后悔。定期跑一次smartctl,重要数据再额外做一份备份,配合定时任务,长期来看能少很多麻烦。
第四,如果以后要把硬盘从一台机器移到另一台机器,迁移前用umount安全卸载,重新插到新机器后直接改 fstab 里的 UUID 即可,数据都在,不需要重新格式化。这一点看起来简单,但真到迁移的时候能省不少事。
这块新硬盘装好之后,我那台旧机器上原本紧张的空间问题直接解了,大文件、虚拟机镜像、备份存档都有了去处,读写速度也比想象中稳定。Linux 下挂载硬盘就是这么一套流程,把握住分区、格式化、挂载、自动挂载这几个关键步骤,基本就能畅通无阻。