ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu挂载硬盘全攻略:从lsblk到fstab,解决权限与NTFS问题

Ubuntu挂载硬盘全攻略:从lsblk到fstab,解决权限与NTFS问题 能折腾到挂载硬盘这一步的多半已经不是第一次装Ubuntu了。我见过太多人卡在这一关系统装好了数据盘认不出来插上U盘没反应重启之后挂载又丢了fstab写错直接开机进维护模式。这几个场景基本覆盖了Linux日常使用里和“存储”相关的所有痛点。这篇文章把Ubuntu挂载硬盘从原理到实操整个拆开讲一遍从最简单的查看磁盘信息、手工挂载到开机自动挂载的fstab配置再到各种挂载失败、权限不足、NTFS乱码这类高频问题的排查方法全部覆盖。不管你是刚入门的Linux新手还是用Ubuntu做服务器做NAS的老手这篇文章都适合花十分钟过一遍。1. 动手之前先把你的磁盘看清我一直跟身边的人强调Linux下操作存储设备最忌讳的就是“凭感觉”。拿到一块硬盘第一件事不是急着mount而是先搞明白三件事系统认不认这块盘、盘上有没有分区、分区是什么文件系统。1.1 用lsblk快速摸清磁盘布局lsblk是我在Linux下用得最频繁的命令之一它能把系统里的块设备关系列成一棵树读起来非常直观。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 238G 0 part / sdb 8:16 0 3.7T 0 disk └─sdb1 8:17 0 3.7T 0 part sdc 8:32 0 28.7G 0 disk在这棵树上sda是一块238.5G的系统盘sdb是一块3.7T的数据盘sdc看着像U盘或者移动硬盘。带MOUNTPOINTS列的就是当前已经挂载上的分区比如sda2挂载到了根目录/没有挂载点的sdb1就是我们要处理的目标。加个-f参数还能看到文件系统类型和UUIDlsblk -fNAME FSTYPE FSVER LABEL UUID MOUNTPOINTS sdb1 ext4 1.0 9f7a2c6e-0f42-4a7e-9c56-7d6a132f501e看到这个输出心里就有底了这是一块已经格式化过、文件系统为ext4的分区。如果FSTYPE下面空空如也说明这块盘还没格式化需要先建文件系统才能用。1.2 分区没分区区别很大很多刚接触Linux的人会把“硬盘”和“分区”搞混。物理硬盘是设备文件比如/dev/sdb分区则是在这块盘上划分出来的区域比如/dev/sdb1。你可以把硬盘理解成一间大房子分区就是里面的各个房间。新硬盘默认是没有分区的。这时候你有两个选择直接用整块盘不分区格式化后挂载。比如mkfs.ext4 /dev/sdb这种做法在某些场景下没问题但不推荐。先分区再格式化。用fdisk或者parted工具划分出分区格式化分区再挂载分区。我个人的习惯是数据盘永远先分区哪怕只分一个区。原因很简单——分区的磁盘有更清晰的管理粒度后续要做LVM扩展、换文件系统、做整盘镜像都要方便得多。而且一旦某个分区出问题不影响整块盘的其他区域。如果硬盘已经有分区了比如lsblk里能看到/dev/sdb1、/dev/sdb2就不用重复分区直接跳到格式化或者挂载阶段。1.3 文件系统选型ext4、XFS、NTFS还是exFAT在Linux环境下不同场景要选不同的文件系统这是一个虽然基础但影响深远的决定。ext4Linux传统默认文件系统兼容性最好几乎任何Linux发行版都支持处理大量小文件时有不错表现。如果拿不准选什么选ext4基本不会错。XFSRHEL系默认文件系统擅长处理大文件和高并发读写性能上限较高。Ubuntu也能用适合存放数据库文件、大体积视频素材这类场景。NTFSWindows原生文件系统。如果你是双系统需要和Windows共享一块数据盘那你就得用NTFS通过ntfs-3g驱动挂载。exFAT为闪存设备设计的文件系统U盘、SD卡、相机存储卡最常见的出厂格式解决了FAT32单文件4G限制的问题跨平台兼容性好。Ubuntu自带的内核对ext4支持最好NTFS和exFAT则需要额外的驱动包支持。后面我会详细讲这两个的坑。2. 手工挂载最基本的操作闭环这节是全文的核心操作部分。我会带着你跑完一个完整的“分区→格式化→挂载→卸载”流程里面的每一步都配有实际命令和参数解释。2.1 创建挂载点给硬盘一个“入口”Linux的挂载mount本质上是把某个设备接到目录树的一个节点上。这个节点业内习惯叫挂载点mount point。挂载点只是一个普通目录你可以创建在任何位置但有几条约定俗成的规范根目录下新建如/mnt/data、/media/data是传统做法。遵循FHS规范/mnt适合临时手动挂载/media适合可移除设备自动挂载。数据盘挂载在生产服务器上我更推荐直接用语义化目录比如/data、/home、/srv/share。创建挂载点很简单sudo mkdir -p /data-p参数表示逐级创建目录即使/data的父目录不存在也能一次成功。注意一点如果挂载点目录里原本有文件挂载后会被隐藏起来访问到的是被挂载设备里的内容。等卸载后原文件才会重新露出来。2.2 mount命令的完整用法与参数解析创建好挂载点就可以挂载了。最直接的办法就是指定设备和挂载点sudo mount /dev/sdb1 /data系统会自动探测文件系统类型并挂载不用显式指定-t参数。不过对于某些特殊文件系统显式指定会更稳妥。完整写法是这样的sudo mount -t ext4 /dev/sdb1 /datamount命令还有一些常用参数值得记住-o ro以只读模式挂载查看别人给的磁盘、避免误写入时非常好用。-o rw以读写模式挂载也是默认模式。-o uid1000,gid1000挂载时指定文件所有者的用户ID和组ID对NTFS/exFAT这类非原生Linux文件系统特别管用。-o noexec禁止在该文件系统上执行任何二进制文件安全要求高的服务器上常用。-o remount不卸载直接重新挂载用于修改挂载参数比如mount -o remount,ro /data。挂载完毕后用df -h验证一下df -h | grep data/dev/sdb1 3.7T 28K 3.7T 1% /data看到这个输出说明挂载成功容量、已用、可用信息一目了然。2.3 卸载与重新挂载别在“忙”的时候拔刀卸载命令是umount注意拼写不是unmountsudo umount /data也可以用设备文件来卸载sudo umount /dev/sdb1一个非常常见的坑就是“target is busy”报错。这通常意味着有进程正在使用这个挂载点目录。如果你不确定是哪个进程占用的用lsof或者fuser排查lsof /data fuser -vm /data查到占用进程后关闭相应程序再卸载。如果实在着急可以用umount -l做懒惰卸载即先解除挂载关系等进程结束访问后自动释放资源。但-l不是万能药对正在持续读写的进程可能导致数据不一致生产环境慎用。3. 开机自动挂载fstab的正确打开方式手工挂载最大的问题是重启后失效。想让硬盘在系统启动时就自动挂载好就得修改/etc/fstab文件。这个文件是Linux文件系统挂载的“总配置表”每次开机时系统都会读取它并尝试挂载其中列出的所有设备。3.1 逐字段拆解fstab先看一个典型的fstab条目# file system mount point type options dump pass UUID9f7a2c6e-0f42-4a7e-9c56-7d6a132f501e /data ext4 defaults 0 2六个字段从左到右分别是file system指定要挂载的设备。推荐用UUID因为设备名如/dev/sdb1在系统重启、硬盘顺序变化时可能发生变化UUID则全球唯一、恒定不变。mount point挂载点必须已存在。type文件系统类型常见的有ext4、xfs、ntfs-3g、exfat、swap等。options挂载选项多个选项之间用逗号分隔。defaults是常用默认项实际默认值是rw,suid,dev,exec,auto,nouser,async。按需添加权限选项如uid1000,gid1000。dump是否用dump备份0表示不备份基本都填0。pass开机时是否用fsck检查文件系统。根分区填1其他非swap分区填2不需要检查的填0。填错会导致开机速度变慢甚至卡在检查阶段。3.2 用UUID避免“盘符漂移”我刚才反复强调UUID这里展开说一下原因。系统里硬盘的识别顺序不是一成不变的比如你插了块新硬盘原有的/dev/sdb可能变成/dev/sdc这就是设备名的漂移。如果fstab里写的是/dev/sdb1重启后可能因为设备名漂移而挂载失败。获取UUID最简单的方式sudo blkid输出示例/dev/sda2: UUIDa3f1b20e-3c9d-4f81-a56e-0f8f2f4a6c22 BLOCK_SIZE4096 TYPEext4 PARTUUIDd0a34d02-02 /dev/sdb1: UUID9f7a2c6e-0f42-4a7e-9c56-7d6a132f501e BLOCK_SIZE4096 TYPEext4 PARTUUIDd0a34d02-01把对应分区的UUID复制进fstab即可。我见过有人手敲UUID敲错一位导致开机直接进入emergency模式所以强烈建议复制粘贴不要手动输入。3.3 自动挂载NTFS和exFAT的完整配置NTFS和exFAT是Windows生态下的文件系统Ubuntu要挂载它们需要额外的驱动工具sudo apt update sudo apt install ntfs-3g exfatprogsntfs-3g是老牌NTFS驱动到现在依然是最稳定的方案。exFAT方面自Linux 5.7内核起内核原生驱动已经支持exFATexfatprogs是配套的工具包提供mkfs.exfat和fsck.exfat命令。装好工具后fstab的写法有讲究。常规的ext4分区这样写没问题但NTFS分区直接写typentfs有时会报错最好的写法是typentfs-3gUUIDxxxx-xxxx /media/windata ntfs-3g defaults,uid1000,gid1000,dmask022,fmask133 0 0exFAT分区的写法类似UUIDxxxx-xxxx /media/udisk exfat defaults,uid1000,gid1000,dmask022,fmask133 0 0这里面sandbox、uid、gid、dmask、fmask就是解决“挂载后普通用户没权限写入”这个高频问题的关键。NTFS和exFAT不是Linux原生文件系统没有POSIX权限的概念所以挂载后默认所有者是root普通用户只能读不能写。通过uid1000,gid1000把所有者指定成你的普通用户id命令可以查看自己的uid再通过dmask022设置目录权限755、fmask133设置文件权限644中文不乱码读写也正常。写完之后测试fstab是否有语法错误sudo mount -a这个命令按fstab配置尝试挂载所有尚未挂载的设备没有报错就说明配置基本没问题。千万别跳过这步直接重启否则fstab有误机器会起不来还得手动进救援模式改文件。4. 经典型问题排查实录这一节是全文含金量最高的部分全部是我实际遇到过或在技术社区看到过的真实案例整理了报错现象、排查路径和最终解决方案。4.1 最常见的“wrong fs type”错误报错信息如下mount: /data: wrong fs type, bad option, bad superblock on /dev/sdb1我见过这个报错的次数太多了基本能背下来。出现这个提示原因通常不外乎这几种文件系统类型没指定对mount自动探测失败了。比如U盘是exFAT格式内核没有对应的驱动模块探测不出类型。解决方法是先lsblk -f确认实际的文件系统再显式指定-t exfat或者-t ntfs-3g。内核没有对应驱动如果没有正确识别文件系统可能是驱动没装。像前面提到的那样安装exfatprogs和ntfs-3g可以解决。文件系统损坏分区表或超级块损坏也会报这个错误需要用对应工具的-f参数修复比如fsck.ext4 /dev/sdb1。这个操作有风险执行前先确保没有重要数据或者提前备份。我遇到过最离谱的一次是有人拿一块原本是LVM逻辑卷的磁盘直接当普通分区挂载结果超级块识别不出来。这种情况用pvscan和vgscan先激活卷组再挂载逻辑卷就行了。4.2 普通用户无法写入的权限问题这是挂载NTFS/exFAT之后最典型的问题。现象是root用户可以读写普通用户打开目录后只能读、不能新建或删除文件。原因就是我前面提到的非Linux原生文件系统没有POSIX权限元数据挂载时必须手动指定权限映射。排查步骤非常简单查看当前挂载选项mount | grep /media/windata看有没有uid、gid、fmask这些选项。查看当前用户IDid确认你的uid/gid。重新挂载并指定所有者sudo mount -o remount,uid1000,gid1000,dmask022,fmask133 /media/windata。永久生效则把参数写进fstab。如果是自己编译的Linux发行版挂载ext4分区也遇到“Permission denied”那就是经典的目录权限问题chown -R 用户名:组名 /data解决和文件系统类型无关。4.3 服务器新增磁盘不重启怎么办生产环境最忌讳重启。如果服务器虚拟机里加了块新盘但系统识别不到不需要重启也能刷新磁盘列表。先在管理面板或者物理机上完成“添加磁盘”操作然后在系统里执行SCSI总线扫描echo - - - | sudo tee /sys/class/scsi_host/host*/scan这个命令的原理是把三个-代表适配器、通道、目标ID写入SCSI主机的扫描接口强制内核重新扫描SCSI总线。执行完lsblk应该就能看到新块设备了。如果是热插拔硬盘比如SATA热插拔背板还可以尝试sudo cat /sys/class/scsi_host/host0/scan不行就用上面的echo方式。注意扫描后新盘是“裸设备”还需要parted或fdisk分区、mkfs格式化、mount挂载整套流程走下来从头到尾不需要重启。4.4 其他高频问题速查现象主要原因解决方案挂载点显示文件全部“消失”挂载点原本非空目录文件没丢先umount再检查原目录中文文件名显示为乱码挂载选项没指定字符集加iocharsetutf8选项重新挂载开机进入emergency modefstab配置错误单用户模式删除/修复fstab条目U盘插上没反应文件系统未自动识别手动mount并装exfat/ntfs驱动移动硬盘写入非常慢USB供电不足或挂了USB3的驱动问题换接口、查dmesg日志确认速度协商模式提示“Structure needs cleaning”exFAT/NTFS分区日志异常运行fsck.exfat或sudo ntfsfix /dev/sdb1关于fstab导致开机失败这一点我得单独多讲两句。一旦fstab写错系统启动阶段会提示“Give root password for maintenance”或者直接进入救援模式。这时候不要慌输入root密码后把fstab里错误那行删掉或者注释掉再执行mount -a确认无误后重启即可。操作命令是mount -o remount,rw / vim /etc/fstab救援模式下根分区默认可能是只读的先重新挂载成可读写才能编辑fstab文件。4.5 NTFS分区挂载只读怎么办插上Windows移动硬盘有时会提示挂载成功但只读无法写入。通常的原因是Windows默认启用了“快速启动”和“休眠”导致NTFS分区的状态不干净Linux为了安全起见强迫以只读方式挂载。这个问题典型的解决办法如果磁盘上有大量数据且不想动可以强制读写挂载不推荐数据一致性风险自负sudo mount -t ntfs-3g -o remove_hiberfile /dev/sdb1 /media/win最稳妥的方案拿到Windows里正常卸载一次并关闭“快速启动”。 Windows控制面板 → 电源选项 → 选择电源按钮的功能 → 更改当前不可用的设置 → 取消勾选“启用快速启动”。“快速启动”是Windows 8之后引入的混合关机特性会让系统内核会话转入休眠文件。Linux挂载NTFS时检测到休眠文件会默认只读挂载以避免破坏Windows状态。想彻底解决双系统共用一个NTFS数据盘的问题关掉快速启动几乎是一劳永逸的做法。5. 不得不提的特殊场景与扩展写到这里主流程和常见坑都讲完了。但挂载硬盘这个主题远不止桌面场景还有几个特殊场景值得展开因为它们也频繁出现在各类热搜词里。5.1 在Ubuntu宿主机里挂载VMware虚拟磁盘vmdk很多人需要从VMware虚拟机的虚拟磁盘里抢救文件但不想千辛万苦启动一个虚拟机。其实有办法Ubuntu宿主机也能挂载vmdk文件。前提是安装libvmdk工具sudo apt install libvmdk-tools然后用vmware-vdiskmanager或qemu-nbd把vmdk映射成分区设备。国产化场景下更常见的是qemu-nbd把vmdk作为网络块设备加载sudo modprobe nbd max_part16 sudo qemu-nbd -c /dev/nbd0 /home/user/vm/disk.vmdk加载后lsblk就能看到/dev/nbd0p1这样的分区按普通分区的挂载方式操作即可。用完后记得解绑sudo qemu-nbd -d /dev/nbd05.2 银河麒麟这类国产系统挂载NTFS银河麒麟虽然是基于Debian系打造的Linux发行版但它的软件源做了大量本地化很多Ubuntu的软件包在麒麟上也能用。挂载NTFS硬盘的思路和Ubuntu完全一致装ntfs-3g后用UUID方式写入/etc/fstab即可实现开机自动挂载。要注意的是麒麟默认的图形界面文件管理器可能会拦截手动挂载行为接上NTFS移动硬盘后先用命令行lsblk确认设备名再手动挂载。5.3 RAID6硬盘阵列的挂载考量RAID6阵列出现故障需要把阵列磁盘挂载到Ubuntu上时不能直接对某一块物理硬盘执行mount那只会读到硬盘单盘的数据和元数据看到的是个无法识别的superblock。正确路径是确认阵列卡或软件RAID能正常识别阵列状态如果是Linux的mdadm软RAID用mdadm --assemble --scan把阵列重新组建起来再挂载/dev/md0这样的阵列设备。RAID6允许坏两块盘在线重建这些细节和单盘挂载完全是两套知识体系我提醒一句生产阵列出问题后优先保盘处理而不是急着挂载。我自己的经验是Ubuntu挂载硬盘这件事80%的问题都集中在文件系统类型、权限和fstab这三个点上。把这三点吃透市面上九成以上的挂载问题都能独立解决。最后再分享一个我个人坚持多年的小习惯在给任何一块有数据风险的硬盘做格式化、分区表修改之类的操作之前先给整盘做一个可启动的镜像备份或者至少在另一块盘上做完整备份。挂载本身操作很简单难的是操作之前对风险的判断这一步多想一下能帮你省下无数头疼的夜晚。
返回列表