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

发布时间:2026/9/18 8:29:14
Ubuntu新硬盘挂载实战:从分区格式化到fstab自动挂载 给Ubuntu加了一块新硬盘结果开机后系统里完全看不到。这不是个例我当年第一次操作用了整整一个下午才搞定中间还因为配置不对差点把系统搞崩。后来摸清了整套流程——识别硬盘、分区、格式化、手动挂载、配置开机自动挂载每一步踩过的坑都变成了经验。这篇就把完整的操作过程写出来包括命令、参数和原理给需要给Ubuntu加装硬盘、做数据盘、搭私有存储的朋友做个参考。整个过程不复杂但有几个关键点容易出错比如设备名会变、fstab配置错了开不了机、权限不对挂载后用不了等。这些我都会一一讲清楚保证你照着操作能一次搞定。1. 挂载新硬盘前先弄明白这几件事1.1 为什么系统里看不到新硬盘很多新手装好硬盘后发现Ubuntu里看不到第一反应是硬盘坏了或者没识别到。实际上Linux对硬盘的管理方式和Windows不一样。Windows会把新硬盘自动分配盘符并在“此电脑”里显示出来Linux则需要经历“识别—分区—格式化—挂载”这个完整的流程才能使用。刚装好的新硬盘在系统里通常只存在于底层设备层比如/dev/sdb但它没有文件系统也没有被挂载到目录树中所以你在文件管理器里自然看不到它。这就像你买了一块空地还没打地基、没建房子、没通水通电当然没法住人。判断硬盘是否被系统识别用一条命令就能搞定lsblk。这条命令会列出所有块设备包括硬盘、分区、U盘等。如果接入了新硬盘但没看到那才是真正的硬件层面没识别到需要检查SATA线、电源线或者BIOS设置。1.2 设备名、分区名和UUID别傻傻分不清在Linux里硬盘设备有自己的命名规则理解这些命名规则是挂载的前提。目前常见的命名方式主要有两种/dev/sda、/dev/sdb这类对应传统的SATA、SCSI、USB接口硬盘。字母a、b、c表示第几块硬盘。/dev/nvme0n1、/dev/nvme1n1这类对应NVMe协议的固态硬盘。nvme0n1表示第一块NVMe硬盘分区就变成nvme0n1p1。分区之后的命名就是在硬盘名后面加数字比如/dev/sda1就是第一块硬盘的第一个分区。这里有一个非常关键的坑设备名不是固定的你插拔硬盘、改BIOS设置、更换SATA口设备名都可能发生变化。今天还是/dev/sdb重启一次可能就变成/dev/sdc了。所以在配置自动挂载时千万别用/dev/sdb1这种写法一旦设备名变了系统就会找不到挂载目标导致开机失败。正确的做法是用UUIDUniversally Unique Identifier通用唯一标识符。UUID是格式化时生成的一串128位的全局唯一标识每个分区都有自己独立的UUID基本不会重复也不会因为设备名变化而改变。这就像给每个分区发了张身份证系统靠身份证认人而不是靠外貌特征。查看分区UUID用blkid命令这个后面会详细演示。1.3 文件系统怎么选才不后悔分区格式化需要选择文件系统这是决定硬盘性能、兼容性和功能的关键一步。常见的Linux文件系统有ext4目前Linux最主流、最稳定的文件系统兼容性好、成熟度高日常使用首选没有特殊需求选它准没错。XFS擅长处理大文件和高并发场景性能优秀Red Hat系发行版默认使用。如果你的用途是视频存储、数据库备份等大文件读写XFS也是不错的选择。Btrfs支持快照、压缩、校验和等高级功能但稳定性和兼容性相对前两者略逊一筹适合喜欢折腾新技术的老手。exFAT微软为解决FAT32单文件4GB限制推出的格式主要用来做跨平台U盘和移动硬盘在Linux下需要安装exfat-utils才能支持。NTFSWindows原生文件系统Linux读写NTFS需要安装ntfs-3g。如果是给Windows和Linux双系统共用数据盘可以考虑但性能和兼容性都不如各平台原生格式。对于绝大多数人来说在Ubuntu上挂载一块内置数据盘用ext4是最稳妥的选择。它是Ubuntu的默认文件系统稳定性经过大规模检验出了问题也能找到大量参考资料。2. 实操第一步识别硬盘、分区并格式化2.1 用lsblk和fdisk确认新硬盘在动手之前先确认系统已经识别到新硬盘。打开终端输入lsblk输出大致是这样的NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 237.8G 0 part / sdb 8:16 0 931.5G 0 disksda是系统盘已经分好区并挂载了。sdb是一块931.5G的新硬盘没有任何分区旁边也没有MOUNTPOINT说明它还没被使用。再运行sudo fdisk -l确认一下硬盘详细信息sudo fdisk -l在输出中找到/dev/sdb开头的部分确认容量无误。如果这里能看到硬盘说明硬件层面没问题可以继续下面的分区操作。提示如果lsblk里看不到新硬盘先查硬件连接。台式机检查SATA线是否插紧笔记本检查硬盘是否完全插入卡槽然后用sudo dmesg | grep sd查看内核日志有没有报错。2.2 分区fdisk和parted如何取舍Ubuntu里常用的分区工具有fdisk和partedfdisk经典的分区工具交互式操作适合小于2TB的硬盘和MBR分区表。绝大多数教程都用它学起来成本低。parted功能更强大支持GPT分区表和大于2TB的硬盘还能直接调整分区大小。服务器运维、大容量存储场景用得多。判断需要哪种如果硬盘小于2TB用fdisk就足够了如果大于2TB必须用parted配合GPT分区表因为MBR最多支持2TB寻址。这里以一块普通的1TB硬盘为例演示fdisk的分区过程sudo fdisk /dev/sdb进入交互模式后按n创建新分区Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-1953525167, default 2048): Last sector, sectors or size{K,M,G,T,P} (2048-1953525167, default 1953525167):默认参数直接回车两次表示从第一个可用扇区开始用完全部空间即整块硬盘分成一个分区。然后按w写入分区表并退出Command (m for help): w The partition table has been altered.分区完成。再运行lsblk应该能看到/dev/sdb1这个分区了。注意如果你的硬盘大于2TBfdisk会提示无法使用MBR分区表这时要改用parted。命令是sudo parted /dev/sdb在交互界面输入mklabel gpt创建GPT分区表然后mkpart primary 0% 100%创建整个硬盘大小的分区。2.3 格式化并检查结果分区只是给硬盘画好了格子要让Linux能往里写东西还需要建立文件系统也就是格式化。用mkfs.ext4将/dev/sdb1格式化为ext4sudo mkfs.ext4 /dev/sdb1执行过程会有一些输出提示文件系统创建成功。此时可以格式化一些小参数的细节mkfs.ext4默认会预留大约5%的空间给root用户用于防止磁盘写满导致系统崩溃、以及碎片整理等维护操作。对大容量数据盘来说5%的预留空间意味着几十个GB被占用了。如果你确实需要最大化可用空间可以在格式化时加-m 0参数sudo mkfs.ext4 -m 0 /dev/sdb1但我不建议普通用户这么做尤其是用作系统盘或关键数据盘时预留空间在关键时刻能救命。数据盘如果空间非常紧张倒是可以考虑。格式化完成后再用blkid查看分区的UUIDsudo blkid /dev/sdb1输出类似这样/dev/sdb1: UUIDa1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx TYPEext4 PARTUUIDyyyy-yyyy把这里的a1b2c3d4-xxxx-...记下来后面配置自动挂载要用。这是这个分区的唯一身份标识比/dev/sdb1可靠得多。3. 手动挂载与数据目录规划3.1 创建挂载点并完成第一次挂载挂载的本质就是把分区和一个目录关联起来之后访问这个目录就相当于访问这块硬盘。在Linux里一切都以文件的形式存在所以挂载点必须是一个目录。挂载点的位置有讲究。根目录/下通常有/mnt和/media两个专门用于挂载的目录/mnt是mount的缩写传统的通用挂载点适合临时手动挂载。/media主要用于系统自动挂载U盘、移动硬盘等可移动设备。但对于长期稳定使用的数据盘更好的做法是在根目录下自建一个有意义的挂载点比如/data、/mnt/data、/home/你的用户名/data等。这样路径语义清晰方便管理和备份。我个人的习惯是用/data或者/mnt/data因为简短、便于脚本引用。当然如果这块盘专门给某个用户用挂到home目录下会更符合权限模型。创建挂载点然后手动挂载sudo mkdir -p /data sudo mount /dev/sdb1 /data挂载成功后有几种方式验证# 查看挂载信息 mount | grep sdb1 # 或者查看磁盘使用情况 df -hdf -h输出中应该能看到/dev/sdb1挂载在/data下容量和已用空间都正常显示。测试读写cd /data sudo touch test.txt ls -la sudo rm test.txt能正常创建和删除文件说明挂载成功且读写正常。提示手动 mount 的挂载在重启后会消失。你重启系统后会发现/data目录还在但里面是空的硬盘的内容并没有消失只是这次开机没有被系统自动挂载上来。这正是标题里“开机自动挂载”要解决的问题。3.2 挂载点权限与目录规划经验挂载之后还有一个容易踩的坑权限问题。用root挂载的ext4分区默认所有者是root普通用户只能只读访问。如果你需要用普通用户读写这块盘里的数据必须调整权限或者修改挂载选项。最简单的解法是直接把挂载目录的所有权交给当前用户sudo chown -R $USER:$USER /data这样当前用户就能完全控制/data下的所有文件。如果是多用户共同使用的场景可以考虑创建一个公共组并把多个用户加进去sudo groupadd storage sudo usermod -aG storage user1 sudo usermod -aG storage user2 sudo chown -R root:storage /data sudo chmod -R 775 /data这样storage组里的成员都能读写数据盘普通用户则保持只读。目录规划方面如果你是给这台机器加一块数据盘建议提前想好用途再决定挂载位置。比如你想扩容/home目录可以直接挂载到/home但更常见的做法是把大数据量目录如/var/lib/docker、/srv、/www转移到数据盘上。挂载位置一旦确定后期迁移会比较麻烦建议刚开始就想清楚。还有一种做法是在数据盘上先建好子目录比如/data/music、/data/downloads、/data/backup然后把经常访问的目录软链接到home目录下避免程序路径层级过深。比如ln -s /data/music ~/Music这样既不影响挂载点结构又能方便日常访问。4. 实现开机自动挂载fstab配置详解4.1 fstab每一列到底是什么意思手动挂载解决了“现在能用”的问题但重启系统后就失效了。想要开机自动挂载就要用到Linux的 fstab 配置文件。fstabFile System Table文件系统表是一个系统级配置文件路径是/etc/fstab。系统启动时会读取这个文件按照表里的配置依次挂载所有文件系统。打开文件看一下cat /etc/fstabUbuntu系统默认的fstab内容类似这样# /etc/fstab: static file system information. UUIDxxxx-xxxx / ext4 errorsremount-ro 0 1 UUIDyyyy-yyyy /boot/efi vfat umask0077 0 1每一行代表一个挂载配置共六列用空格或Tab分隔。六列的含义分别是列号含义示例第1列设备标识推荐用UUIDUUIDa1b2c3d4...第2列挂载点目录/data第3列文件系统类型ext4第4列挂载选项defaults第5列是否用dump备份0表示不备份0第6列fsck检查顺序根目录为1其他分区为20表示不检查0第5列dump备份现在已经很少用了基本都填0。第6列1只应该给根目录/其他分区填2固态/机械硬盘为0也行。如果填错顺序开机时fsck可能会在挂载顺序上出问题。第1列是最核心的用UUID而不是设备名。原因前面说过了设备名会变UUID不会变。用设备名写死的fstab一旦设备名变了系统启动时找不到对应的分区就会进入紧急模式或者直接开不了机。4.2 用UUID搞定自动挂载配置开机自动挂载的步骤可以用blkid获取UUID并复制然后用编辑器修改fstab。先获取你要挂载的分区UUIDsudo blkid /dev/sdb1记住输出里的UUID值不带引号的部分比如a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx。然后编辑fstabsudo vim /etc/fstab在文件末尾添加一行UUIDa1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 2添加完成后先用umount卸载当前已经手动挂载的/data因为如果不卸载就执行mount -a系统会提示设备已挂载容易产生混淆sudo umount /data然后执行sudo mount -a这个命令的作用是重新读取fstab把配置中所有未挂载的文件系统挂载上。如果没有任何错误提示用df -h检查一下确认/dev/sdb1已经成功挂载到/data。这里再解释一下我为什么把挂载选项写成defaults。defaults是一组默认选项的组合包含rw可读写、suid允许suid、dev允许设备文件、exec允许执行程序、auto开机自动挂载、nouser只有root可以卸载、async异步写入。基本覆盖了绝大多数使用场景省心。如果你有不执行二进制程序的需求比如挂载一个存放文档的目录可以改成UUIDa1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults,noexec,nosuid 0 2这样即使是root也不能在这个分区上执行程序对安全敏感的数据盘有意义。如果分区原本是Windows下格式化的NTFS需要先装ntfs-3gsudo apt update sudo apt install ntfs-3g然后fstab里文件系统类型写ntfs-3g比如UUIDxxxx-xxxx /media/windows ntfs-3g defaults,uid1000,gid1000,umask022 0 2uid1000,umask022是为了解决NTFS分区上文件权限和所有者的问题。修改完fstab之后重启系统验证一下是否真的实现了开机自动挂载sudo reboot重启后运行df -h如果/dev/sdb1自动挂载到了/data配置就成功了。提示fstab配置前先备份养成习惯。执行sudo cp /etc/fstab /etc/fstab.bak改错了随时可以恢复。4.3 修改fstab后的验证和急救很多人配置完fstab就直接重启结果系统起来后进入了一个黑屏或带文字提示的界面也就是紧急模式emergency mode。这通常就是fstab配置错误导致的。出现紧急模式的原因有几种可能UUID写错了系统找不到对应的分区。文件系统类型写错了比如实际是ext4却写成了xfs。挂载目录不存在。第6列的fsck顺序配置有严重问题。处理方式系统在紧急模式下会提示输入root密码或者直接给一个shell。用mount -o remount,rw /把根文件系统挂载为可读写紧急模式下根目录默认是只读的然后查看fstab把刚才添加的那一行注释掉在行首加#或者直接改正错误配置再重启恢复正常# 在紧急模式 shell 中执行 mount -o remount,rw / vim /etc/fstab因此建议在修改fstab之后、重启之前一定先执行一遍sudo mount -a。这个方法虽然不能100%保证配置无误但绝大多数语法错误和逻辑错误都能提前暴露出来。另外再分享一个小技巧测试fstab配置时不要直接重启可以执行sudo findmnt --verify --verbose来校验fstab配置sudo findmnt --verify --verbose这个命令会逐条检查fstab里的每一项配置如果发现错误会明确指出来是一个比mount -a更严格的检查工具。5. 常见问题与排查技巧实录5.1 重启后进不了系统一直提示维护模式遇到这个问题先别慌绝大多数情况下不是硬盘或数据出了问题而是fstab配置有误。处理流程前面提过进入维护模式的shell把根目录重新挂载为可读写然后修复fstab。如果系统给出的是一个类似这样的提示Give root password for maintenance输入root密码后进入shell执行mount -o remount,rw /然后查看fstab最后一行将可疑配置注释掉。如果没有root密码那就麻烦一点需要用Ubuntu安装U盘进入Live环境挂载系统盘后修改fstab。这里有一个非常实际的建议在确认fstab配置正确之前最好不要重启。我见过太多人改完fstab不检查就直接重启然后卡在 emergency mode 里手足无措。严格来说正确流程是修改fstab执行sudo mount -a无报错执行sudo findmnt --verify --verbose无错误再考虑重启两步验证都通过后再重启基本不会出问题。5.2 外接移动硬盘、NTFS格式怎么处理很多人不只是给电脑加内置硬盘还会外接移动硬盘、NAS、U盘等设备。这些设备的文件系统和Linux默认的ext4不同处理方式也有差异。如果是NTFS格式的移动硬盘Ubuntu默认可能已经可以通过nautilus文件管理器挂载但命令行下操作需要安装ntfs-3g。安装后挂在/mnt/usb目录下sudo apt install ntfs-3g sudo mount -t ntfs-3g /dev/sdc1 /mnt/usb如果是exFAT格式的U盘容量大于4GB的U盘基本都是exFAT了因为FAT32限制单文件不能超过4GBsudo apt install exfat-utils exfat-fuse sudo mount -t exfat /dev/sdc1 /mnt/usb这些移动设备如果也需要开机自动挂载同样在fstab里加一行文件系统类型写ntfs-3g或exfat即可。还有个常见问题是cifs挂载也就是挂载Windows共享目录或NAS共享重启后失效。这个本质上是fstab里写的是//server/share这种网络地址网络没起来之前挂在不了。解决办法是在挂载选项里加_netdev//192.168.1.100/share /mnt/nas cifs usernamexxx,passwordxxx,_netdev 0 0_netdev告诉系统这个文件系统依赖网络需要等网络服务启动后再挂载。标题里的“开机自动挂载”如果是网络存储的场景就离不开这个参数。5.3 挂载点目录不见了或权限乱了怎么办有些遇到过这种情况fstab配置好了重启后硬盘并没有挂在预期位置。检查后发现挂载点目录/data消失了。原因通常在文件管理器上如果之前手动卸载了挂载点或者系统异常关机挂载点目录有可能被清理。挂载点目录其实只是普通目录如果它在/根目录下在分区卸下时该目录还是存在的但如果整个/数据出错或被人删了就没办法了。所以选择挂载点时最好放在根目录下一个专门的分区上或者确保它在系统根分区上。其实挂载点的目录在系统启动时一定会被创建如果不存在fstab 挂载会失败但不会自动创建。Ubuntu 的 systemd 在某些版本里会用x-systemd.before等参数处理不过通常认为挂载点目录必须预先存在。例如你创建/data时它默认在根分区/上就算/dev/sdb1没有挂载这个目录也是存在的。但如果你把挂载点放在/mnt下某个子目录而/mnt挂载了另一个分区那这个目录就不存在了需要先创建好。这也是我推荐在根目录下自建挂载点的原因简单、清晰、安全。权限乱了的场景也常见。比如换了一台机器、用另一个系统启动了硬盘原来的文件权限对不上号或者从别的Linux机器上搬来一块硬盘原系统的UID和现系统不一样。这时可以直接用root用户把整个数据盘的属主改成当前用户sudo chown -R $USER:$USER /data如果文件特别多chown会比较慢但耐心等一下就好。如果提示权限不够大概率是磁盘以只读方式挂载了用mount -o remount,rw /data重新挂载为可写即可。还有一类问题往NTFS分区里拷贝文件时提示Permission denied即使你是root也一样。这是因为NTFS文件系统本身有自己的权限机制NTFS文件系统不支持POSIX权限所有文件在Linux下默认由挂载时指定的uid和gid控制。解决办法是在挂载参数里指定uid1000,gid10001000通常是第一个用户的UIDsudo mount -t ntfs-3g -o uid1000,gid1000,umask022 /dev/sdc1 /mnt/usb这样挂载后用户ID为1000的用户就能正常读写NTFS分区了。最后分享一个我自己的习惯任何涉及fstab的改动前都先备份一份。此外在给系统加盘之前先记下当前lsblk的输出这样即使搞混了盘符也能轻松分辨哪块是系统盘、哪块是数据盘。曾经有一次我就是没注意盘符格式化的时候把老系统的数据盘给误清了那种教训一次就够了。挂载这件事本质上不难无非就是“分区-格式化-挂载-配置开机自动挂载”四步走。真正考验人的是出问题时能否快速定位。希望这篇能帮你在加装硬盘这条路上少踩几个坑。