Mac OS X挂载Linux卷(NFS)

即将对Mac笔记本的操纵系统进行升级,升级前需要备份文件。我有一个使用Linux文件系统的大容量移动硬盘,虽然Mac OS X不支持Linux ext4文件系统,但是可以通过在Mac OS X上运行一个Linux虚拟机,通过Linux虚拟机mount好移动硬盘,然后通过NFS或SMB输出给Mac OS X使用。

测试下来开源的VirtualBox通过VirtualBox Extension Pack支持USB 2.0并不稳定,我的3TB Seagate移动硬盘通过VirtualBox访问会出现无法识别使用问题。但是使用Parallels Desktop是能够正常使用的,并且还支持USB 3.0驱动。(总算没有白买这个商用软件,嘎嘎)

Mac OS X使用automounter,也称为 autofs 来挂载NFS输出卷(概览

Autofs包含以下程序和daemons :

autofsd — autofsd 执行 automount 之后 ,就会等待网络配置修改事件以及类似的事件发生。如果发生这样的事件,重新运行一次 automount 来更新挂载以反映当前automounter映射。也可以使用 automount_reread 来运行 automount 。

automountd — automountd 是一个响应从 autofs 发出的请求的服务,用来挂载或卸载网络文件系统,并且提供目录的内容,基于automounter映射的内容。这个 automountd 是通过 launchd 来启动的。

automount — automount 是实际的挂载管理器。使用一些映射文件和配置文件来管理挂载和卸载远程资源。这些配置文件使用 /etc/autofs.conf 和 /etc/auto_master。
automount_reread - automount_reread 可以触发针对 autofs 的网络变更事件。

检查autofs相关服务

可以看到系统中只运行了一个 autofsd

ps -ef | grep auto | grep -v grep

显示输出

0 61 1 0 Sat04PM ?? 0:00.03 autofsd

可以检查一个服务是否通过 launchd 启动

sudo launchctl list | grep -E 'automo|autof'

输出显示

61 0 com.apple.autofsd
- 0 com.apple.automountd

Autofs映射

autofs 有两种映射方式

Direct Map — 直接映射是直接列出目录的文件系统位置,关键字是完成的目录名字,例如

/usr/local      eng4:/export/local
/src            eng4:/export/src

由于直接映射作为一个整体没有关联一个单一目录,它会在主映射文件中设置一个命名为/-的伪目录(dummy directory)。

Indirect Map — 非直接映射是为了用于将大量的对象和一个单一目录关联的情况。每个映射入口是一个目录入口的简化名字。一个非常好的案例是 auto_home 映射,可以检测所有在 /home 目录下的入口,例如:

bill    argon:/export/home/bill
brent   depot:/export/home/brent
guy     depot:/export/home/guy

创建AutoFS的Indirect Map

案例配置在 /cifsdata 目录使用 autofs 管理挂载点挂载Windows共享卷。

使用Autofs自动挂载SMB

先在Windows主机(huatai-win7)上设置共享目录 windata

编辑 /etc/auto_master 配置文件添加如下

/cifsdata    autofs_cifsdata

以上配置告知 OS X 任何位于 /cifsdata 目录下的入口都通过 /etc/autofs_cifsdata 配置文件来配置。

创建 /etc/autofs_cifsdata 配置文件来添加 CIFS 共享挂载

sudo touch /etc/autofs_cifsdata
sudo chmod 600 /etc/autofs_cifsdata

编辑 /etc/autofs_cifsdata配置文件,添加如下内容

huatai-win7-windata -fstype=smbfs ://tester:PASSWORD@huatai-win7/windata

这里 tester 是在 huatai-win7 这个Windows主机上创建的测试帐号

tester:PASSSWORD 中 tester是Windows上帐号名,PASSWORD是该帐号密码

huatai-win7/windata 中 huatai-win7是提供共享卷的Windows主机名(要能够解析,我设置/etc/hosts模拟解析),windata是共享卷名

huatai-win7-windata 是表示挂载到本地的/cifsdata目录下的huatai-win7-windata子目录

激活配置

sudo automount -vc

提示输出

automount: /net updated
automount: /home updated
automount: /cifsdata mounted

此时使用命令 df -h 可以看到有一个映射

map autofs_cifsdata                               0Bi    0Bi    0Bi   100%         0          0  100%   /cifsdata

用 ls /cifdata 可以看到主目录下有一个子目录 huatai-win7-windata ,但是此时还没有挂载Windows共享卷。(autofs的特点就是只有使用才会挂载,不使用就自动卸载)

现在我们进入该目录 cd /cifsdata/huatai-win7-windata ,第一次进入目录的时候会终端提示符返回会比较缓慢,因为在认证和挂载卷。然后就可以看到该目录下挂载的远程Windows卷内容了。此时用 df -h 就可以看到如下内容显示已经挂载成功

map autofs_cifsdata                               0Bi    0Bi    0Bi   100%         0          0  100%   /cifsdata
//tester@huatai-win7/windata                    8.0Gi  4.8Gi  3.2Gi    61%         0 18446744073709551615    0%   /cifsdata/huatai-win7-windata

如果autofs配置中的windows卷访问的用户帐号不是当前Mac OS X的登录帐号,则在 “Finder” 里面看不到这个磁盘卷。需要在”Finder”中点击”Shared”找到远程主机名”huatai-win7”,然后点击”connect to”才能输入帐号密码,在”Finder”中查看卷内容。

使用Autofs自动挂载NFS

编辑 /etc/auto_master 添加 /nfsdata autofs_nfsdata

#
# Automounter master map
#
+auto_master        # Use directory service
/net            -hosts        -nobrowse,hidefromfinder,nosuid
/home            auto_home    -nobrowse,hidefromfinder
/Network/Servers    -fstab
/cifsdata           autofs_cifsdata
/nfsdata            autofs_nfsdata
/-            -static

在auto_master前面的”+”符号表示让OS X查看目录服务(例如Open Directory,LDAP等等)是否有自动挂载记录,如果从目录服务找到自动挂载记录就使用其进行挂载

/home 目录被设置成 auto_home ,但是这个并不是一个完全目录,而是指 /etc/auto_home。这是一个非直接映射(indirect map)的例子。定义本地目录的挂载点,而远程挂载则是 /etc/auto_home 映射文件定义。网络用户登录将使用 /etc/auto_home 中定义的目录挂载到 /home 上。

同样在 /etc/auto_home 配置文件中也可以看到 +auto_home 的配置表示查找使用目录服务的auto_home记录。

/nfsdata autofs_nfsdata 表示非直接映射

编辑 /etc/nfsdata 内容如下

centos7-data        -fstype=nfs,rw,bg,hard,intr,tcp,nolocks,resvport 10.211.55.9:/data

同样和前述smb文件系统 /cifsdata/huatai-win7-windata 挂载一样,远程服务器 10.211.55.9 上的共享NFS目录 /data 将被挂载到本地MAC主机的 /nfsdata/centos7-data 目录下

一定要加上 resvport 参数,否则Mac客户端挂载Linux输出的NFS会出现报错 failed: Operation not permitted

然后执行 automount 命令挂载

automount -vc

此时可以看到输出

automount: /net updated
automount: /home updated
automount: /centos7data updated
automount: /nfsdata mounted
automount: no unmounts

初始 df -h显示输出空间是0

Filesystem        Size   Used  Avail Capacity   iused    ifree %iused  Mounted on
...
map autofs_nfsdata                                0Bi    0Bi    0Bi   100%         0          0  100%   /nfsdata

遇到一个问题,当使用命令 ls /nfsdata/centos7-data/ 去访问挂载目录,原本预期 autofs 应该自动挂载NFS卷的,但是却出现如下报错

ls: : No such file or directory

这是什么样原因?

检查挂载时候日志 /private/var/log/system.log

Oct 16 08:09:28 automountd[75375]: NFS server 10.211.55.9 not responding
Oct 16 08:09:28 automountd[75375]: mount of /nfsdata/centos7-data failed: No such file or directory

参考 CentOS 7 NFS服务器设置 检查 CentOS 7服务器端端口 rpcinfo -p 验证端口是开放的,但是从外部不能访问。使用 iptables -L 检查可以看到默认只开放了ssh端口访问。

比较简单的方法是在服务器端关闭防火墙 iptables -F ,不过访问端口不再报错,显示日志错误是权限不足(虽然已经允许 10.211.55.0/24 访问)

Oct 16 09:58:48 automountd[75375]: mount of /nfsdata/centos7-data failed: Operation not permitted

参考 Mac Os X: Mount NFS Share / Set an NFS Client ,原来 Mac OS X挂载NFS共享需要 -o resvport 参数。

autofs 的通配

可以使用mount map文件来匹配允许子目录通配符。例如,在 auto_master 中设置

/opt    auto_public

则可以在 /etc/auto_public 配置文件中来定义:

*       nfs.mydomain.com:/public/&

这样当访问 /opt/bin 目录时, nfs.mydomain.com:/public/bin 将被挂载到 /opt/bin 上。这个配置可以用于 /opt 目录下所有子目录的使用。

其他映射类型

OS X autofs 支持直接映射(direct maps),本地挂载点可以在mount map文件中定义,并且 非直接直接映射的本地挂载点在 auto_master 中定义。上面通配的例子就是一个非直接映射。还有一种可执行映射的映射文件实际上是一个可执行的shell脚本,用来返回触发目录的挂载点名字。另外,也可以在 /etc/fstab 中定义静态映射(不推荐使用)。

其他文件系统类型

OS X autofs也可以处理Apple File System(AFP)和Microsoft Server Message Block(SMB)文件系统挂载。要使用这些文件类型,添加 -fstype=afp-fstype=smbfs 选项到远程挂载点(注意,除非使用Microsoft Active Directory service plugin,否则无法使用远程home目录的smbfs)

参考

Mount Various File Systems with Autofs on Mac OS X Mountain Lion - 这篇文档写的非常清晰,推荐阅读
NFS mounts in OS X Mavericks
Introduction to Autofs in Mac OS X
Automount NFS in OS X

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 80 queries in 0.399 seconds