本文部分引自https://blog.csdn.net/baimaozi/article/details/3134267?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase。感谢baimaozi的分享!
我用的是manjaro发行版,属于arch系,所以大部分arch的方法都可以尝试。然后archwiki上的方法虽然也是安装ntfs-3g,但是配置方法与下文有所不同,并且我没弄起来,终端报错,不知道什么鬼。
正文:
装好manjaro后,虽然可以访问windows的盘,但是只能读不能写入文件,有点烦。而且一开始在dolphin中会这样显示:
没挂载的盘上有黄色的东西。
就是没挂载的盘一开始linux是检测不到的,比如用kdiskfree。
为了实现读写ntfs文件系统的功能,我们采用ntfs-3g方案。
我们先安装ntfs-3g.
sudo pacman -S ntfs-3g
tips:我发现装了这个包重启后我就可以在windows盘中新建文件了,虽然我也不知道为什么。也就是说你已经可以写盘了。但是要做到开机即能检测到盘,我们还是将它挂载。
我们查看下哪个分区是NTFS分区.
sudo /sbin/fdisk -l
例如我的:
Disk /dev/sda:476.94 GiB,512110190592 字节,1000215216 个扇区
磁盘型号:SAMSUNG MZNLN512
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:4BFE448F-5A16-4E19-807A-53C69FFCD1FA
设备 起点 末尾 扇区 大小 类型
/dev/sda1 2048 616447 614400 300M EFI 系统
/dev/sda2 616448 878591 262144 128M Microsoft 保留
/dev/sda3 878592 208931835 208053244 99.2G Microsoft 基本数据
/dev/sda4 208932864 210595839 1662976 812M Windows 恢复环境
/dev/sda5 210595840 439187455 228591616 109G Microsoft 基本数据
/dev/sda6 439187456 606957567 167770112 80G Microsoft 基本数据
/dev/sda7 832444416 1000214527 167770112 80G Microsoft 基本数据
/dev/sda8 606957568 832444415 225486848 107.5G Linux 文件系统
分区表记录没有按磁盘顺序。
Disk /dev/loop0:67.56 MiB,70844416 字节,138368 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/loop1:86.25 MiB,90435584 字节,176632 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/loop2:96.63 MiB,101318656 字节,197888 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
知道哪个是 NTFS分区 后,(我想挂载sda6和sda7)我们来编辑/etc/fstab,实现自动挂载.
sudo vi /etc/fstab
或者sudo nano /etc/fstab
来打开/etc/fatab
加入类似如下的内容:(只是一个例子)
/dev/sda1 /mnt/windows ntfs-3g users,noauto,uid=1000,gid=100,fmask=0113,dmask=0002,locale=zh_CN.utf8 0 0
/dev/sda6 /mnt/backup ntfs-3g users,uid=1000,gid=100,fmask=0113,dmask=0002,locale=zh_CN.utf8 0 0
#/mnt是根目录下路径,是你的NTFS文件系统的挂载点。windows或者backup都是名字,可以随便取。
重启,你就会发现开机后dolphin中原来windows盘上的黄东西没了。用kdiskfree查看会发现我的sda6和sda7挂载完毕:
写入代码的特点为:
- 可以让任何用户挂载和卸载你的NTFS分区。
- user(uid=1000)和group(gid=100)拥有分区的所有文件,并且对文件有-rw-rw-r-- (0664)权限,对目录有drwxrwxr-x (1775)权限。
- 使用zh_CN.utf8作为locale
- /dev/sda6在启动时自动挂载,/dev/sda1则不会
其模式为:
典型的、非常有用的ntfs-3g选项
* users - 假如ntfs-3g可执行文件设置了SUID root(命令:chmod u+s /bin/ntfs-3g),则允许任何人挂载/卸载NTFS分区。请注意,你要用users而不是user
* noauto - 启动时不要自动挂载分区 #慎用!
* uid - 指定NTFS分区中文件和目录的拥有者(用十进制数表示)
* gid - 指定NTFS分区中文件和目录的用户组(用十进制数表示)
* fmask - 文件权限(八进制数掩码)
* dmask - 目录权限(八进制数掩码)
* locale - 通常用来让使用国际化字符集的文件可见
掩码值
要无需任何计算就可以较易弄懂特定权限的掩码值,可以这样做:
- 启动一个新的shell会话。使用任何你喜好的终端模拟器。
- 使用umask命令获得指定权限设置的八进制数。
- 使用umask"设置"文件创建时掩码。例如:
$ umask ug=rw,o=r
请注意ug=rw,o=r等于-rw-rw-r--或者0664。 - 直接不带参数执行umask获取八进制数。
$ umask
将会显示
0113
原文基础上补充:如果你不小心写错了,导致系统启动时找不到文件系统,然后进入了emergency mode,别慌。输入你的root密码(不会显示),按回车,进入终端模式,然后sudo nano /etc/fstab
把原来改的东西改回去或者查看错误,保存重启就应该ok了。另外,如果Linux系统只有一个用户,建议参阅archwiki上ntfs—-3g 的配置方案。因为上述方案即使是关闭了Windows的快速启动,仍偶尔会发生挂载失败的问题。
- 使用umask"设置"文件创建时掩码。例如: