我猜你搜到这个标题,多半是刚装完双系统,想在Linux里打开Windows那个盘读点资料;或者机器退役之后,把旧电脑的系统盘拆下来当数据盘插到Linux主机上,结果开机一看,分区都在,就是访问不了,终端里还甩给你一句 unknown filesystem type 'ntfs'。这事我干过很多次,从最早的Ubuntu 14.04一路折腾到现在的发行版,踩过的坑比教程里写的步骤多得多。这篇就专门聊Linux挂载其他系统盘这件事,覆盖Windows系统盘(NTFS)、Linux系统盘(ext4/xfs/btrfs),以及自动挂载、权限处理、加密盘和Secure Boot那一堆幺蛾子,适合刚接触Linux的新手,也适合帮别人修电脑的老手。
1. 挂载这件事,先搞清楚底层逻辑
1.1 块设备、分区和文件系统到底是什么关系
要理解挂载,最好把“硬盘”这一整个概念拆开看。一块物理硬盘是一个块设备,比如 /dev/sda,它像一整块地皮。分区则是在这块地皮上划出来的独立地块,比如 /dev/sda1、/dev/sda2,每个地块可以盖不同类型的房子——Windows系统盘通常盖的是NTFS结构的房子,Linux系统盘常见的是ext4、xfs或者btrfs。文件系统就是房子的内部装修规范:房间怎么隔、门牌怎么编、物品怎么摆放。操作系统只有读懂了这套内部规范,才能进去拿东西。
Linux里有个“一切皆文件”的设计哲学,硬盘、分区也不例外。但它们不像Windows那样以 C:、D: 的形式直接出现,而是隐藏在 /dev 目录下。你不可能直接跑到 /dev/sda1 里去翻文件,因为这只是一个设备节点,代表“这个分区存在”,并不代表“这个分区的文件系统已经被解析”。想让文件内容呈现在文件管理器里,就必须通过挂载,把文件系统“贴”到目录树的某个位置上。
这就是为什么许多新手的第一个困惑是:“我明明看到 /dev/sda2 了,为什么双击打不开?”看到了设备和能访问文件是两码事,前者只是认识门牌号,后者需要把门打开、把内部结构梳理清楚。挂载要做的事情,本质上就是这个“开门梳理”的动作。
1.2 mount到底在做什么
挂载命令 mount 的动作可以通俗理解成“把某个分区的文件系统挂到目录树的一个空节点上”。这个目录被称为挂载点,比如 /mnt 或 /media/username/data。执行 mount /dev/sdb1 /mnt/data 之后,/mnt/data 这个目录就相当于变成了那个分区的入口,你进入这个目录看到的文件,实际上来自 /dev/sdb1 上的存储空间。
这里有一个经常被忽略的细节:挂载点的原内容会被“暂时遮蔽”。如果 /mnt/data 原本是空目录还好,如果里面原本有文件,挂载之后这些文件不会消失,但你在挂载期间看不到它们,直到卸载之后才会重新出现。我见过有人挂载到 /home 或者 /root 这种关键目录,结果系统一下子“回到解放前”,桌面、配置全不见了,吓到以为数据丢了。其实数据都还在,只是被挂载点盖住了,卸载即恢复。
挂载本身是有层次的:文件名解析、权限检查、读写控制都由内核的VFS(Virtual File System)统一调度,底层再由具体文件系统驱动(比如ext4驱动、ntfs3或ntfs-3g)负责真正的数据读写。这意味着挂载时可以指定很多选项,例如只读挂载(ro)、按用户ID映射权限(uid、gid)、读写模式(rw)等,这些选项决定了你进入分区后的实际操作边界。
1.3 “挂在其他系统盘”为什么容易失败
挂载普通U盘(FAT32/exFAT)一般成功率很高,因为这类文件系统比较简单,内核自带驱动,权限模型也宽松。但“其他系统盘”就完全不是一回事了。
以Windows系统盘为例,它通常是NTFS格式,而且大概率开了BitLocker加密。NTFS虽然是微软私有格式,但Linux内核从5.15版本开始加入了ntfs3驱动,很多发行版还额外提供ntfs-3g(基于FUSE的实现在用户态操作),所以单纯读NTFS分区现在已经不算难事。问题多出在:系统盘处于“非正常关机状态”、启用了快速启动(Fast Startup)导致文件系统元数据处于非干净状态、或者被BitLocker整个加密。这些情况下,Linux要么拒绝挂载,要么只能以只读方式挂载,要么直接要求输入恢复密钥。
再比如挂载另一块Linux系统盘,看起来同为Linux应该很简单,但实际上不同发行版可能默认使用不同文件系统:RHEL系用xfs,Ubuntu/Debian用ext4,openSUSE也能用btrfs,Fedora甚至把btrfs设为默认。挂载遇到问题,很多时候不是“挂载”这一步出错,而是“文件系统不完整”“分区表不认识”“开机自动挂载配置写错”等连环问题。系统盘往往还有EFI分区、恢复分区,一个干净的挂载方案应该明确知道哪些分区需要挂、哪些根本不用碰。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 挂载前必备:先认盘,再动手
2.1 认盘三兄弟:lsblk、blkid、fdisk -l
拿到一块“其他系统盘”,如果直接瞎猜设备名就挂载,大概率会翻车。系统里可能有多个磁盘,/dev/sda 和 /dev/sdb 的对应关系不一定是你以为的那样。所以第一步永远是认盘。
我常用的命令,第一个是 lsblk,它能把磁盘、分区、挂载点以树状结构列出来,肉眼最直观。第二个是 blkid,它能显示每个分区的UUID、文件系统类型和PARTUUID,这是后面写自动挂载配置的关键信息来源。第三个是 fdisk -l 或 parted -l,用于查看详细的分区表信息,尤其适合确认磁盘大小、扇区布局和分区类型。
bash复制lsblk -f
blkid
sudo fdisk -l /dev/sdb
实际操作中,我一般先 lsblk -f 看整体结构,再用 blkid 确认是不是有加密分区。比如输出里出现 crypto_LUKS 类型的分区,说明这块系统盘做了LUKS加密,直接挂载肯定失败,得先解密再挂。认盘这个动作花不了三十秒,却能省下后面半小时的排查时间,千万别跳过。
2.2 识别目标盘的文件系统类型
识别文件系统类型这步,决定了你后续用哪个驱动、加哪些挂载参数。常见的对应关系如下:
| 文件系统类型 | 常见系统 | 内核驱动 | 特点 |
|---|---|---|---|
| NTFS | Windows 10/11系统盘 | ntfs3、ntfs-3g | 支持大文件,有日志,权限模型封闭 |
| FAT32/exFAT | U盘、跨平台数据盘 | vfat、exfat | 兼容性好,但权限支持有限 |
| ext4 | Ubuntu、Debian、部分Linux | ext4 | 老牌Linux文件系统,稳定成熟 |
| xfs | RHEL、CentOS、Rocky | xfs | 高扩展性,适合大文件,不支持缩减 |
| btrfs | Fedora、openSUSE、部分NAS | btrfs | 支持快照、校验和,功能多但复杂 |
| crypto_LUKS | 加密系统盘 | dm-crypt | 不是文件系统,而是加密层 |
看到 blkid 输出中 TYPE="ntfs" 时,可以先判断内核是否支持ntfs3。ntfs3 驱动从Linux 5.15起进入内核,很多较新的发行版都默认开启。如果使用的还是老内核,或者因为驱动问题加载失败,那就得安装ntfs-3g软件包,走FUSE路线。判断方法很简单,直接执行挂载,如果报 unknown filesystem type 'ntfs',就说明当前环境没有可用的NTFS驱动,需要装ntfs-3g。
2.3 先挂到临时目录,验证无误再正式使用
很多教程会直接教你把数据盘挂到 /mnt/data,这本身没问题,但我更建议第一次操作时挂到临时目录,比如 /mnt/test,先验证文件系统健康、数据可见、权限正常,然后再卸载、挂载到最终位置。这一步主要为了规避两个风险:一是挂载参数不对导致数据写入时出现异常,二是最终挂载点目录如果因为各种原因无法创建或没有写权限,会造成不必要的麻烦。
临时挂载的命令也简单:
bash复制sudo mkdir -p /mnt/test
sudo mount -o ro /dev/sdb2 /mnt/test
ls /mnt/test
这里我用 -o ro 先做只读挂载,确认数据能读出来,再考虑要不要以读写方式重新挂载。尤其是挂载Windows系统盘时,我强烈建议第一次先只读访问,因为NTFS分区如果处于“未干净卸载”状态,读写挂载可能会触发文件系统修复流程,处理不好容易吓自己一跳。
3. 实战:手动挂载、权限处理与开机自动挂载
3.1 Windows系统盘(NTFS)的完整挂载过程
假设你把一块旧Windows系统盘接到了Linux机器上,用 lsblk 看到设备是 /dev/sdb,其中 /dev/sdb1 是EFI分区,/dev/sdb2 才是实际的C盘(通常体积最大),/dev/sdb3 可能是恢复分区。不要把EFI分区当作系统盘来挂,真正的系统数据都在那个最大的NTFS分区里。
挂载过程如下:
bash复制# 1. 确认分区类型
sudo blkid /dev/sdb2
# 2. 创建挂载点
sudo mkdir -p /mnt/win
# 3. 先只读挂载
sudo mount -o ro /dev/sdb2 /mnt/win
ls /mnt/win
如果只读挂载能看到 Users、Windows、Program Files 这些目录,说明NTFS分区健康,数据可读。这时候再决定要不要读写挂载。大多数情况我们只是找文件,只读就够。但如果你需要修改里面的内容,比如清理旧系统盘上的垃圾文件,可以卸载后重新用读写方式挂载:
bash复制sudo umount /mnt/win
sudo mount -o rw,uid=1000,gid=1000 /dev/sdb2 /mnt/win
这里的 uid=1000、gid=1000 是让当前用户的UID映射到NTFS文件的所有者,这样挂载后你就不需要反复用sudo才能往里面复制文件了。用户UID可以用 id -u 查看,GID用 id -g。这是NTFS挂载最常见的需求:看得见、读得出、写得了。
3.2 Windows快速启动和休眠残留的坑
Windows默认开启“快速启动”功能,关机时它其实不是完全关机,而是把内核会话写入休眠文件,下次开机快速恢复。这个特性会带来一个后果:NTFS文件系统在Windows看来不是“干净卸载”状态。Linux挂载时检测到日志状态非干净,可能拒绝读写挂载,或者自动以只读方式保护。
如果你遇到这种情况,最稳妥的办法是回Windows把快速启动关掉,或者选择“重启”而非“关机”后再进Linux。关掉快速启动的方法:控制面板 → 电源选项 → 选择电源按钮的功能 → 取消勾选“启用快速启动”。
如果只是临时读取数据,只读挂载就够了,不需要管这个问题。但如果你需要频繁在Linux下写Windows系统盘,强烈建议把快速启动关掉,不然每次写操作都顶着“非干净状态”的风险,NTFS日志修复机制会不断介入。
3.3 处理普通用户读写权限
挂载ext4、xfs这类Linux原生文件系统时,权限体系是完整保留的。如果你以root身份挂载,进入挂载点时默认以root权限访问,普通用户可能无法写入。这时有两种解决方式:一是让挂载点在挂载后的所有权归属当前用户,二是利用挂载选项进行UID/GID映射。
对ext4来说,如果文件本身属主是1000,那挂载后用户就可以正常访问;如果属主是另一个UID,可能需要 chown 调整。但要注意,chown 是直接修改文件系统上的元数据,针对系统盘里的文件要特别谨慎。对NTFS来说,没有原生的Linux权限概念,所以要靠挂载参数映射:
bash复制sudo mount -o uid=1000,gid=1000,umask=022 /dev/sdb2 /mnt/win
umask=022 表示文件对属主可读写,对组和其他人只读,这是一种比较保守且常见的设置。如果你希望挂载后所有用户都有读写权限,可以改成 umask=000,但除非是专门的公共数据盘,否则我不建议这么干,毕竟系统盘里的敏感数据比普通数据盘多得多。
3.4 设置开机自动挂载,避免每次手动mount
每次开机关机后都要手动挂载确实烦人,尤其当“其他系统盘”是你的常备数据盘时。自动挂载的入口是 /etc/fstab 文件,格式可以理解为六列:设备标识、挂载点、文件系统类型、挂载选项、dump备份标记、fsck检查顺序。
我最推荐用UUID而不是设备名来标识分区,因为设备名可能因为磁盘接入顺序变化而改变,UUID在文件系统创建时固定,基本不会变。先用 blkid 拿到UUID,再写入fstab:
bash复制# /etc/fstab
UUID=2A3B9C4D5E6F7071 /mnt/win ntfs3 rw,uid=1000,gid=1000,umask=022,noatime 0 0
noatime 表示访问文件时不更新访问时间戳,能减少不必要的写入,对系统盘挂载来说这是个很有用的选项,尤其当盘本身已经因为旧Windows的页面文件、休眠文件而变得很忙时。
如果是挂载Linux系统盘,比如ext4分区,fstab行可以写成:
bash复制UUID=1a2b3c4d-5e6f-7a8b-9c0d-123456789abc /mnt/data ext4 defaults,noatime 0 2
最后两列一个 0 一个 0 是最保守的写法,表示不进行dump备份、开机不检查文件系统。如果你挂载的是ext4且希望开机自检,可以把最后一列设为 2。对NTFS,不建议设置开机自检,因为那需要额外工具,而且严格说在Linux环境下自动fsck NTFS盘不是免费午餐。
3.5 挂载其他Linux系统盘:ext4、xfs和btrfs的处理差异
挂载另一个Linux系统盘,和挂载Windows系统盘最大的不同是:文件系统里保留了完整的Linux权限、属主和ACL。如果原系统里的用户UID是1000,而当前系统里也有UID 1000的用户,那么文件属主会直接显示成当前用户,访问起来很自然;如果原系统用户UID是1005,当前系统没有这个UID,文件会显示为数值,读写权限可能受限。
xfs的挂载参数相对简单,常规的 defaults,noatime 就能用。btrfs稍微不同,它支持子卷,系统盘里通常有 @ 和 @home 这类子卷。直接挂载整个btrfs分区,你会看到根目录下有一堆 @ 开头的目录,这其实是子卷的挂载点。更干净的做法是直接挂载子卷:
bash复制sudo mount -o subvol=@ /dev/sdc2 /mnt/btrfs-root
sudo mount -o subvol=@home /dev/sdc2 /mnt/btrfs-home
这里要注意,原系统的根文件系统如果是btrfs子卷形式,直接挂载分区确实能看到文件,但很多发行版会在根目录下按子卷方式组织目录。如果只想读用户数据,挂载 @home 子卷就够了。如果你需要完整恢复原系统,则要把 @、@home 等子卷分别挂载到对应的根目录和家目录位置。
4. 常见问题与排查技巧实录
4.1 unknown filesystem type 'ntfs' 怎么处理
这个报错非常典型,几乎每个挂载Windows系统盘的用户都会遇到。原因就是内核或系统中没有可用的NTFS驱动。Linux 5.15之前的发行版默认不支持ntfs3,很多人还在使用老版本系统,因此会看到这个错误。解决办法是安装ntfs-3g:
bash复制# Debian/Ubuntu系
sudo apt install ntfs-3g
# RHEL/CentOS/Fedora系
sudo dnf install ntfs-3g
安装后,再看一眼内核是否支持ntfs3,如果支持,可以手动指定驱动:
bash复制sudo modprobe ntfs3
sudo mount -t ntfs3 /dev/sdb2 /mnt/win
如果不支持,就使用ntfs-3g的挂载类型名 ntfs-3g。很多发行版在安装ntfs-3g后会自动建立符号链接,让你直接用 mount -t ntfs 也能走ntfs-3g路径。不要盲目试,先看 lsmod | grep ntfs,再决定用哪个驱动。
4.2 autofs、桌面环境无法自动识别系统盘
有些桌面环境(GNOME、KDE)能自动识别插入的NTFS盘,但不会同时识别被BitLocker加密的系统盘。这其实是正常的,因为加密盘需要密钥,桌面环境没有界面输入恢复密钥,所以不会自动挂载。处理方式很简单:要么先解锁,要么手动挂载。如果你实在希望桌面环境能自动识别,可以把BitLocker关闭,但我不建议为图方便而放弃系统盘加密。
另外,如果你使用NAS、开发板这类环境,想挂载远程存储或另一台机器的系统盘,CIFS挂载是常见方式:
bash复制sudo mount -t cifs //192.168.1.100/share /mnt/nas -o username=user,uid=1000,gid=1000
开发板挂载Ubuntu根文件系统的场景也类似,只不过通常是把SD卡或eMMC分区挂到开发板的/mnt目录下,用于修改或更新系统文件,本质逻辑和挂载系统盘没有区别。
4.3 fstab写错导致开机卡死或进入emergency mode
这是自动挂载最常见的翻车现场:fstab里写错了UUID、文件系统类型或挂载选项,开机时系统找不到对应分区,会卡在挂载阶段,或者直接进入emergency mode,让你输入root密码进行修复。我有一个习惯,任何对fstab的修改都先用下面命令验证:
bash复制sudo findmnt --verify --verbose
sudo mount -a
mount -a 会尝试挂载fstab中所有还没挂载的文件系统,如果有错误会直接打印出来。在重启之前先测试一次,能避免绝大多数启动灾难。
如果真的已经重启进不了系统,进入紧急模式后,用root密码登录,执行:
bash复制# 以只读方式重新挂载根文件系统
mount -o remount,rw /
# 编辑fstab,注释掉出错的那一行
vim /etc/fstab
把有问题的行用 # 注释掉,保存退出,重启即可。如果连fstab在哪都不好找,也可以用live系统启动,把系统盘挂载后修改fstab,这也是一种救急手段。
4.4 invalid signature detected / Secure Boot报错
有些新设备开启Secure Boot后,在启动或加载第三方驱动时会遇到 invalid signature detected check secure boot policy 的报错。这个问题在挂载时也可能出现,如果使用ntfs-3g这类需要加载内核模块的场景,模块未签名会被Secure Boot拦截。处理办法有两种:一是进入BIOS,把Secure Boot设置为Setup Mode或直接关闭;二是给需要的模块签名,但比较复杂,一般用户建议直接关闭Secure Boot。
需要注意的是,不同类型的主板对Secure Boot的处理不太一样,有的允许“仅微软签名模式”,有的只有开/关。对大多数桌面Linux用户来说,关闭Secure Boot不会带来多少风险,但如果你是双系统且Windows依赖BitLocker,关闭Secure Boot可能导致BitLocker验证失效,需要提前准备好恢复密钥。
4.5 设备忙、无法卸载:target is busy
卸载挂载点时经常会遇到 target is busy,原因是有进程还停留在挂载点目录或其子目录里,比如文件管理器正好打开着那个目录、终端的当前工作目录就在里面、某个服务正在读取文件。排查方式用:
bash复制sudo lsof +D /mnt/win
sudo fuser -vm /mnt/win
看到是哪个进程占用的,退出或kill掉,再执行 sudo umount /mnt/win。如果无论如何都卸载不了,可以用延迟卸载:
bash复制sudo umount -l /mnt/win
-l 是lazy卸载,意思是立刻从目录树中移除挂载点,但等到所有进程都释放文件后再真正卸载底层文件系统。这个方法很实用,但要注意:如果是U盘或移动硬盘,直接懒卸载可能导致数据没有完全写回,立即拔盘会损坏文件系统。所以我只在数据盘上使用,物理拔盘前一定先确保同步完成。
4.6 排查速查表
| 现象 | 可能原因 | 推荐处理 |
|---|---|---|
unknown filesystem type 'ntfs' |
缺少NTFS驱动 | 安装ntfs-3g,或用 -t ntfs3 |
| 挂载后目录是空的 | 挂载点被遮蔽,或选错了分区 | 先 umount,再确认目标分区 |
| 挂载后只有root能访问 | 权限或UID映射问题 | 加 uid=1000,gid=1000 或 chown |
| 开机卡在挂载 | fstab配置错误 | 紧急模式注释fstab对应行 |
| BitLocker加密盘无法挂载 | 需要恢复密钥 | cryptsetup bitlkOpen 解锁后再挂载 |
| LUKS加密盘无法挂载 | 未解密 | cryptsetup luksOpen 解密 |
| NTFS只读,无法写入 | 快速启动或休眠残留 | 回Windows关闭快速启动,或强制读写挂载 |
| 写入大文件时卡死 | ntfs3驱动bug | 改用ntfs-3g试试 |
5. 几个容易忽略的细节,以及后续还能怎么玩
5.1 系统盘加密时的特殊处理:BitLocker和LUKS
现在越来越多人的Windows系统盘默认开启BitLocker。在Linux下挂载这样的盘,需要额外工具处理,比如 dislocker 或者 cryptsetup 的bitlk支持。流程一般是先识别加密分区,再通过工具用恢复密钥或密码解密出虚拟设备节点,最后挂载这个虚拟设备。
bash复制sudo apt install dislocker
# 假设/dev/sdb2是BitLocker分区
sudo dislocker /dev/sdb2 -u<PASSWORD> -- /mnt/bitlocker
sudo mount -o loop /mnt/bitlocker/dislocker-file /mnt/win
LUKS加密盘的处理更正统,毕竟这是Linux自己的加密方案。用 cryptsetup luksOpen /dev/sdb2 luksdata 打开加密容器,然后挂载生成的映射设备 /dev/mapper/luksdata。这里需要注意,LUKS打开后得到的是虚拟块设备,必须在挂载后才能在文件管理器里看到内容。要是忘了关闭映射,卸载后记得 cryptsetup luksClose luksdata。
5.2 不建议直接在系统盘上做的事
挂载其他系统盘后,有个关键原则:尽量少动原系统的系统文件。尤其是把旧Linux系统盘挂载到新系统里,不要随手改 /etc/fstab、/boot、/etc/passwd 这些关键配置文件。虽然技术上可行,但很容易因为版本差异把原系统弄坏,等你想把盘装回原机器时还得再修一遍。我遇到过有人把挂载盘上的 /etc/localtime 链接替换成当前系统的,导致原系统时间错乱,修复起来非常麻烦。
检查、临时修改用户文件没问题,但涉及系统级配置的修改,务必先在原系统环境下做,或者备份原文件后再改。
5.3 延伸场景:开发板、NAS、虚拟机磁盘挂载
“挂载其他系统盘”其实是一类通用技术的统称,很多上层场景都用同一个思路。开发板上挂载Ubuntu根文件系统,本质上就是把SD卡/eMMC分区挂载后修改启动脚本或驱动;ESXi挂载USB硬盘,是把宿主机的存储设备挂载到虚拟机或Datastore;飞牛、群晖这类NAS系统挂载其他Linux硬盘,用的也是Linux的常规挂载机制,只不过加了一层Web管理界面。理解底层命令,上层再怎么包装都不会被难住。
拿虚拟机来说,如果你有一个虚拟磁盘镜像,比如 other-system.qcow2,还可以用 qemu-nbd 或 guestmount 把里面的系统盘挂载到当前主机查看和修改,都不用启动虚拟机。类似 guestmount 这类工具背后依赖的也是内核的挂载机制,只不过多了虚拟磁盘格式解析。这个思路修虚拟机里坏掉的系统特别管用,建议有虚拟化环境的读者了解一下。
5.4 数据安全永远是第一话题
每次操作系统盘前,先在脑子过一遍:这块盘上是否有需要保留但还未备份的数据?如果是旧机器系统盘,里面有可能是对方唯一的照片、文档和项目代码。默认建议只读挂载,至少先看看目录再决定要不要写。操作fstab之前,先复制一份备份文件:
bash复制sudo cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d)
这样改出问题也能立刻还原。对加密盘,确认恢复密钥妥善存放后再尝试挂载,别等BitLocker密码忘了才到处翻。
根据我个人的经验,Linux挂载其他系统盘这事,真正难的地方不是在mount那一行命令,而是你能不能先搞清楚目标盘的文件系统、加密状态、权限语境,再决定用什么参数、挂到哪里、要不要自动挂载。把一二三章的基本功做扎实,后面大部分问题都能靠 dmesg 加 journalctl 解决,不至于被一个 mount: unknown filesystem type 困住半天。最后再提醒一句:动手前先认盘,动手时先只读,改配置先备份——这三点做到了,系统盘随便挂。
