Windows + Ubuntu 双系统共享文件夹最稳的一套方案
双系统用久了之后,会遇到一个很现实的问题:
Windows 下有资料,Ubuntu 下也要用;Ubuntu 下载了代码包,Windows 下也想直接拿。每次靠 U 盘、微信、网盘来回传,真的很麻烦。
我这台机器是 Windows + Ubuntu 双系统,硬盘是 1TB SSD,大概分区如下:
C盘:Windows 系统盘,300G D盘:Data 数据盘,200G,NTFS Ubuntu /:约208G,ext4 Ubuntu /home:约208G,ext4 swap:约15G最终我选择的方案是:
Windows 下:D:\Share Ubuntu 下:/mnt/winD/Share Ubuntu 快捷入口:~/Share这样两个系统看到的是同一个文件夹。
Windows 往D:\Share里放文件,Ubuntu 在~/Share里就能看到;反过来也一样。
先说结论:为什么选 D 盘?
我没有重新分区,也没有再单独切一个 Share 分区,因为现有 D 盘已经很适合做共享盘:
D盘:200G,NTFS,剩余约190GNTFS 是 Windows 原生文件系统,Ubuntu 也能稳定读写。
所以最简单、最安全的方案就是:直接用 D 盘建一个 Share 文件夹。
最终规划:
D:\Share\Docs 文档、PDF、笔记 D:\Share\CodePackages 代码包、SDK包、版本包 D:\Share\Installers 安装包 D:\Share\Images 镜像、截图 D:\Share\Backup 备份 D:\Share\FromUbuntu Ubuntu 临时传给 Windows 的文件一个关键点:共享盘能不能放代码?
可以放代码包,但不建议 Ubuntu 直接在共享盘里编译。
更准确一点:
Windows 在 D 盘开发/编译:可以,没问题。 Ubuntu 在 D 盘读写资料:可以,没问题。 Ubuntu 直接在 D 盘编译 Linux 工程:不推荐。原因也不复杂。D 盘是 NTFS,Ubuntu 自己的/home是 ext4。
Linux 编译环境更依赖 ext4 的权限、软链接、可执行属性、大小写敏感等特性。
如果把 Linux 工程直接放在 NTFS 共享盘里编译,可能遇到这些问题:
chmod +x 权限异常 软链接行为不符合预期 Git 提示一堆权限变化 CMakeCache 缓存混乱 Makefile 大小写问题 大量小文件编译速度变慢 Windows 杀毒或索引锁文件所以我最后的习惯是:
共享盘:放代码压缩包、SDK、版本包、资料 Ubuntu 编译:复制到 /home/work 里再编译 Windows 编译:可以直接放 D:\Code_Windows 编译比如:
D:\Share\CodePackagesUbuntu 里复制到本地 ext4 再处理:
mkdir-p~/workcp~/Share/CodePackages ~/workcd~/worktar-xvfmkdir -p ~/work:创建 Ubuntu 本地开发目录。cp …:把共享盘里的代码包复制到 Ubuntu 本地。cd …:进入开发目录。tar -xvf …`:解压源码包。
正式配置步骤
下面开始配置。
1. Windows 里创建共享文件夹
先进入 Windows,打开 D 盘,新建:
D:\Share建议顺手建几个子目录:
D:\Share\Docs D:\Share\CodePackages D:\Share\Installers D:\Share\Images D:\Share\Backup D:\Share\FromUbuntu目录尽量用英文,尤其是代码、SDK、工具包相关目录,少用中文和空格,后面跨系统会省很多事。
2. Windows 关闭快速启动
这一步非常重要。
如果 Windows 开了快速启动或休眠,Ubuntu 可能会提示 NTFS 分区被锁,只能读不能写。
管理员方式打开 PowerShell,执行:
powercfg/h offpowercfg:Windows 电源管理命令。/h off:关闭休眠,同时也会关闭快速启动相关功能。
执行完之后,正常关机,再进入 Ubuntu。
3. Ubuntu 安装 NTFS 支持
进入 Ubuntu,打开终端:
sudoaptupdatesudoaptinstall-yntfs-3gsudo apt update:刷新软件源列表。sudo apt install -y ntfs-3g:安装 NTFS 读写支持。
4. 创建 D 盘挂载目录
我准备把 Windows 的 D 盘挂载到/mnt/winD:
sudomkdir-p/mnt/winDsudo:用管理员权限执行。mkdir -p /mnt/winD:创建挂载目录,目录已存在也不会报错。
5. 手动挂载 D 盘测试
我这台电脑的 D 盘 UUID 是:
F3...所以挂载命令是:
sudomount-tntfs-3g-ouid=1000,gid=1000,umask=022,windows_namesUUID=F3... /mnt/winDmount:挂载磁盘分区。-t ntfs-3g:指定用 ntfs-3g 方式挂载 NTFS。uid=1000,gid=1000:让当前普通用户拥有读写权限。umask=022:设置默认权限。windows_names:禁止创建 Windows 不支持的文件名。UUID=F3...:指定要挂载的 D 盘。/mnt/winD:挂载到这个目录。
挂载完成后检查一下:
df-hT|grepwinDdf -hT:查看磁盘挂载情况和文件系统类型。grep winD:只筛选包含 winD 的那一行。
再看看 D 盘内容:
ls/mnt/winDls /mnt/winD:查看 Windows D 盘根目录内容。
如果能看到Share,说明挂载成功。
6. 测试 Ubuntu 能不能写入 D 盘
在 Ubuntu 里创建一个测试文件:
touch/mnt/winD/Share/ubuntu_test.txttouch:创建一个空文件。/mnt/winD/Share/ubuntu_test.txt:这个文件实际会出现在 Windows 的D:\Share里。
查看一下:
ls-l/mnt/winD/Sharels -l:以详细列表方式查看文件。
然后重启进 Windows,打开:
D:\Share如果能看到ubuntu_test.txt,说明双系统共享已经打通了。
7. 创建 Ubuntu 快捷入口
每次输入/mnt/winD/Share太麻烦,可以给它做一个软链接:
ln-s/mnt/winD/Share ~/Shareln -s:创建软链接,类似 Windows 快捷方式。/mnt/winD/Share:真实位置。~/Share:Ubuntu 家目录下的快捷入口。
以后在 Ubuntu 里直接访问:
cd~/Sharecd ~/Share:进入共享文件夹。
实际访问的就是:
Windows 的 D:\Share8. 设置 Ubuntu 开机自动挂载
手动挂载成功后,再配置开机自动挂载。
先备份配置文件:
sudocp/etc/fstab /etc/fstab.bak.$(date+%F-%H%M)cp:复制文件。/etc/fstab:Linux 开机自动挂载配置文件。$(date +%F-%H%M):自动生成日期时间,方便回滚。
编辑配置:
sudonano/etc/fstabnano:终端里的文本编辑器。/etc/fstab:系统挂载配置文件。
在文件最后加这一行:
UUID=F3... /mnt/winD ntfs-3g defaults,uid=1000,gid=1000,umask=022,windows_names,nofail,x-gvfs-show00这行的意思是:
开机自动把 Windows D 盘挂载到 /mnt/winD 给普通用户读写权限 挂载失败也不影响 Ubuntu 启动 并且在文件管理器里显示保存方式:
Ctrl + O Enter Ctrl + X9. 测试自动挂载配置
先卸载刚才手动挂载的 D 盘:
sudoumount/mnt/winDumount:卸载挂载点,不是删除文件。
然后测试 fstab 配置:
sudomount-amount -a:按/etc/fstab配置重新挂载所有分区。
如果没有报错,基本就稳了。
再检查:
df-hT|grepwinD能看到/mnt/winD就说明自动挂载配置没问题。
最后测试快捷入口:
cd~/Sharelscd ~/Share:进入共享目录。ls:查看目录内容。
最终使用方式
以后就很简单了。
Windows 下:
D:\ShareUbuntu 下:
~/Share这两个位置看到的是同一份文件。
我的最终目录习惯
Windows 自己开发编译:
D:\Code_Windows D:\Work_WindowsUbuntu 自己开发编译:
/home/work /home/project双系统共享资料:
D:\Share也就是:
D盘可以给 Windows 正常开发编译。 Ubuntu 不在 D 盘编译 Linux 工程。 D:\Share 只负责资料、代码包、版本包、安装包共享。这样分工最清楚,也最不容易踩坑。
常见问题
Ubuntu 提示 D 盘只能读,不能写
大概率是 Windows 快速启动或休眠没关。
回 Windows 管理员 PowerShell 执行:
powercfg/h off然后正常关机,不要休眠。
Ubuntu 开机后没看到 Share
先检查 D 盘是否挂载:
df-hT|grepwinD如果没输出,手动测试:
sudomount-a看有没有报错。
不小心 fstab 写错怎么办
因为前面做过备份,可以恢复:
sudocp/etc/fstab.bak.你的备份时间 /etc/fstabcp:把备份文件复制回原配置。/etc/fstab:恢复后的自动挂载配置。
最后总结
这套方案适合大多数 Windows + Ubuntu 双系统用户:
Windows D盘作为共享盘 Ubuntu 自动挂载 D盘 共享资料放 D:\Share Linux 编译仍然放 Ubuntu 自己的 ext4 分区 Windows 编译可以直接放 D盘一句话:
共享盘负责传资料,系统盘负责跑环境,开发编译各回各家。
