2011年1月7日星期五

用HFS+做文件系统实现Linux和Mac下文件共享

因为长年活动在Windows,Linux和Mac下,因此移动硬盘的分区格式选择成了一个头疼的问题。

首先简单比较一下几个流行的分区格式在3个系统中的兼容情况:
  • FAT/FAT32: Windows/Linux/Mac完美支持读写。但是FAT32有4G的单文件限制,如今,大于4G的文件很常见,FAT32的缺点显然是不可忽视的。
  • NTFS: Windows完美读写,Linux也可以说是完美读写了,但是Mac下,两种NTFS的读写方案都有很大的问题:MacFuse+NFTS-3G,可靠,但是性能太差,写入速度通常在10M/s以下。对于U盘还可以接受,但是对于移动硬盘来说,这样的速度是无法容忍的。Mac OS X 10.6也自带了NTFS的读写支持,性能没的说,但是可靠性太差,很容易出现坏文件,因此Mac自带的NTFS读写支持默认没有开启。
  • exFAT: 是FAT32增强版,没有了4G的单文件限制,而且从Mac OS X 10.6.5开始Mac也完美支持exFAT了。但是Linux对exFAT的支持还不行。
  • HFS+: Windows下可以用Bootcamp的HFS+驱动MacDrive第三方软件,完美读写,性能优异。Linux(已知Ubuntu 10.x)能够完美支持HFS+非日志式文件系统的完美读写,性能优异。HFS+是Mac自己的文件系统就更没话说了。
看起来HFS+是我的最佳选择了。

关于HFS+,还有几个不同的选择:日志式和非日志式,大小写敏感和非大小写敏感。关于大小写敏感的HFS+通常是不推荐的,特别是系统分区——不过这是题外话了。日志是一个必须要考虑的问题。因为它影响HFS+跨平台支持——Linux不支持日志式HFS+的写入。不过日志对于移动硬盘来说并不重要,因此选择非日志式的HFS+也无伤大雅。

还有一个问题:那就是默认条件下,即使是非日志式的HFS+的移动硬盘插到Linux下也不是直接能够读写的(root可以写入)。关于这个问题困扰了我很久,我也花费了很多时间去研究,包括在Linux下装各种HFS+相关的驱动和工具等,绕了很远的路——其实这些都是不必要的。默认的Linux安装(Ubuntu 10.x)就已经包含了对HFS+的支持了

改fstab,chmod -R,chown -R虽然可能可以解决Linux下读写的问题,但是这些方法都太暴力了,我都不想用。幸好,今天找到了一个完美的解决方案。

废话说了一大通,开始说步骤。

1. 格式化移动硬盘。详细我就不说了,看一下截图就知道了。格式化HFS+可以用Mac下的“磁盘实用工具”。操作方法很简单,照着下图做就行了。我这里演示的是一个分区。唯一要说一下的是,格式选择:Mac OS 扩展,也就是非日志式HFS+。
另外,我选择的分区表是GUID分区表。如果你舍不得GUID分区表偷偷的占掉你200MB磁盘空间,你可以选择“主引导记录”。因为我用的MacDrive也支持GUID分区表,所以Windows下用也没问题。关于GUID分区表,请参考维基百科
 2. Linux下设置。格式化完毕,就可以把移动硬盘插到Linux下了。不过默认条件下,Linux的普通用户是无法写入的。

挂载之后的用户和组ID都是99——而Debian系的Linux的普通用户的ID是从1000开始的(Redhat系是从500开始的)。关于UID99有一个有趣的故事,有兴趣的可以到这里围观。
$ ls -l /media/
总计 0
drwxrwxr-x 1 99 99 8 2011-01-07 10:40 USB 160G
$ mount
...(省略其它输出)
/dev/sdb2 on /media/USB 160G type hfsplus (rw,nosuid,nodev,uhelper=udisks)
我们可以看到,移动硬盘已经被挂载为rw,只不过用户和组都不是当前用户,而是诡异的99。最初,我企图通过添加uid=1000选项,让移动硬盘能够读写,不过看了上面提到的文章之后我就决定不这么做。不过,我又注意到一个地方,那就是移动硬盘的权限设置是775!也就是说,只要是GID为99的用户都能对移动硬盘进行读写!

接下来的事情就简单多了。只要创建一个GID为99的组,把当前用户添加进去就OK了。操作过程就不详述了,看下图。



新组创建完毕之后,注销一下,重新登录,挂载移动硬盘——顺利写入!


3. 然后把移动硬盘搬到Mac下看看结果,并尝试写入——当然没啥问题。而且Linux下和Mac下写入的文件在权限上看不出区别。


最后要看的是写入速度——30+MB/s。


至此,问题完美解决! :D

1 条评论:

  1. 用了一段时间exFAT,是一个常接在Mac上的移动硬盘,10.6.7之后经常出现该盘里的文件移到废纸篓后无法清倒的现象,只能用安全清倒废纸篓。奇怪的很。鉴于MacDrive这工具确实挺可靠,还是把exFAT那盘也格成HFS+了。

    回复删除