macOS是苹果公司个人电脑操作系统,由于未知的原因,macOS没有给默认的用户提供NTFS文件系统的写入权限,当用户将包含NTFS格式分区的磁盘连接电脑主机后,macOS默认以“只读”的方式挂载,为用户提供最基本的文件读取服务。因此,很多第三方公司开发了收费应用,实现macOS中对NTFS文件系统的写入功能。例如NTFS for Mac这款软件,就可以实现和操作系统无缝结合,当用户插入包含NTFS分区格式的磁盘后,可以自动使用“读写”的模式挂载磁盘分区。
相比收费的商业软件,macOS操作系统原生提供了NTFS格式分区读写功能,不过因其具体操作比较繁琐,不便于日常应用。笔者利用bash脚本编程技术,提出了一种使用脚本命令的方式,可以快速方便地将NTFS格式分区以“读写”模式挂载和卸载的解决方案,将macOS原生对NTFS支持的特性和简便易操作的特性完美结合。以下将详细介绍实现原理和基本实现应用。
macOS操作系统对移动存储设备采用了类似Unix系统的处理方式,当移动设备物理上连接后,需要先挂载(可以使用控制台中的mount命令实现)到现有的文件系统目录树上才能访问使用。默认macOS对NTFS的挂载是“只读”,而实际上macOS操作系统提供了完善的NTFS格式分区的访问,因此只要重新采用“读写”模式将NTFS卷挂载,就可以实现NTFS格式分区的写入。macOS控制台环境中提供了mount和umount命令实现“挂载”和“卸载”各种分区格式。
以上大多数的参数在本文中不需要特别设置,主要需要关注以下参数:
-o options:option 是挂载参数,这里需要使用rw,nobrowser参数实现读写挂载,并且使用nobrowser参数才能生效。
-t external_type:external_type是需要挂载的文件系统类型,这里使用ntfs作为参数挂载NTFS文件系统卷。
special:用于指定设备文件,例如 /dev/disk2s1。
mount_point:指 定 文件系统挂载的位置,如~/Desktop/hello。
对照以上的命令调用 格 式,sudo mount -o rw,nobrowse -t ntfs /dev/disk2s1 ~/Desktop/udisk可以实现将disk2s1文件分区按照ntfs文件分区格式以读写模式挂载到桌面的udisk文件夹中。
注意:由于挂载磁盘操作需要管理员权限,因此一般使用sudo提升权限。
另外,由于macOS环境中umount卸载磁盘分区功能没有diskutil umount功能的稳定性好,本文脚本中也采用了diskutil umount代替了mount命令。
以上代码中,Devices变量用语保存系统中只读的文件系统的挂载设备名,也就是当一个NTFS卷被macOS系统默认挂载的设备。脚本接受mount和umount两种参数,分别用于挂载和卸载NTFS分区。脚本挂载NTFS卷前会在桌面新建一个与挂载设备名同名的一个空文件夹,用于作为文件系统的挂载点。
以上脚本使用前必须进行合适的安装,具体来说就是需要将脚本保存到操作系统PATH搜索路径内,便于脚本的调用。笔者将该脚本保存为/opt/local/bin/mount-ntfs文件。文件保存后,还需要使用chmod命令给脚本添加执行权限。
通过以上的方法正确安装好脚本后,脚本一般的使用过程如下:
1.插入带有NTFS卷的U盘或者移动硬盘。
2.当桌面显示出磁盘分区后,在控制台终端输入mount-ntfs mount命令执行脚本,脚本正确执行后,会重新以读写模式挂载NTFS分区。
3.对分区进行读写操作……(用户操作)。
4.在 弹出U盘或移动硬盘前,在控制台终端输入mount-ntfs umount卸载分区。
在以上的操作中,如果不希望每次都进入到控制台输入命令,可以将以上的命令制作成符号链接或者“替身”放在桌面上,这样就可以通过简单的双击实现挂载和卸载分区。
使用bash脚本打开macOS操作系统原生对NTFS卷的访问功能的关键是,采用rw和nobrowse参数重新“挂载”NTFS卷。脚本将mount、umount、awk 等 Unix命令有机结合起来,将原本复杂的多个操作简化为一个脚本调用命令,使用户不需要花费额外的费用,就能稳定安全地实现NTFS文件系统的写入功能。
本文主要考虑了移动存储介质NTFS文件分区挂载的情况,如果macOS系统的本地磁盘中也有采用NTFS分区格式的,可以直接在/etc/fstab文件中创建相关配置,这样就可以实现开机自动采用读写模式访问NTFS分区。