NFS/samba マウント と rsync


- OS X に、 NFS や samba をマウントする方法。
	- コマンドライン手動
	- `automount`
- それらを、`rsync` でバックアップする方法。


後者に関しては、NFS が効くんなら（ = *nux 系 OS なら）普通に `rsync over ssh` で良いんじゃね？ と言うことで、ここでは、 Windows を samba でマウントしたものを想定して。




##### 登場するディレクトリについて

|IP|対象パス|machine|OS|役割|
|:-:|:--|:-:|:-:|:-:|
|192.168.XX.XX|C:\Users\bunzaemon\for_smb|A|windows 7|samba サーバ
|192.168.YY.YY|/Users/bunzaemon/for_nfs|B|OS X 10.10|NFS サーバ
|192.168.ZZ.ZZ|/Users/bunzaemon/smb|C|OS X 10.10|samba マウントポイント
|192.168.ZZ.ZZ|/Users/bunzaemon/nfs|C|OS X 10.10|NFS マウントポイント

全て

- ユーザー名: bunzaemon
- パスワード: passwd

マウンポイント以下にマウントする名前は、サーバ側のディレクトリ名（for_smb or for_nfs）

## NFS/samba マウント

### サーバ側での初期設定

#### samba マウントの場合

`A` で。

普通に対象ディレクトリ for_smb を右クリックして、「特定のユーザー」を対象に共有フォルダを作成。



#### NFS マウントの場合

`B` で。

`/etc/exports` で公開するディレクトリを設定。

```
% cat /etc/exports
/Users/bunzaemon/for_nfs -mapall=bunzaemon 192.168.ZZ.ZZ
% sudo nfsd update
```

- アクセスは、ユーザー bunzaemon からのもの（-mapall=）
- `192.168.ZZ.ZZ` からのアクセスのみ受ける
- `nfsd` の `update` しないといけない。

### クライアント側での用意

以下、 `C` にて。

```
% cd /Users/bunzaemon
% mkdir -p nfs/for_nfs smb/for_smb
```

* 手動でのマウントでは、ディレクトリを作ってやる必要有り。

### 手動でのマウント、アンマウント

#### samba マウント

```
% mount -t smbfs //bunzaemon:passwd@192.168.XX.XX/for_smb /Users/bunzaemon/smb/for_smb
```

>Note: You should always use the system mount command and never call mount_smbfs directly.
[引用元] man 8 mount_smb

だそうだ。


#### NFS マウント

```
% mount 192.168.YY.YY:/Users/bunzaemon/for_nfs /Users/bunzaemon/nfs/for_nfs
```


#### アンマウント

```
% umount /Users/bunzaemon/smb/for_smb
% cd /Users/bunzaemon
% rm -rf smb
```

NFS も同様


### 自動マウント

`autofs` を利用。

編集するファイルは四つ
NFS/samba 共通が二つに、NFS/samba それぞれ一つずつ

- auto_master
- autofs.conf
- auto_nfs
- auto_smb

以上のファイルの編集が終了したら、

```
% automount -vc
```

して反映させるか、再起動する。
上記コマンドで、実行後直ぐに反映されるかと思ったら、多少のタイムラグがありそうなので、対象のディレクトリなどを、早急に弄る事はしない。


#### auto_master

NFS/samba 共通
`/etc/auto_master` の最後に、以下を追加

```
/Users/Shared/smb    auto_smb
/Users/Shared/nfs    auto_nfs
```

左がマウントポイントで、右がマップ名

#### autofs.conf

```
AUTOMOUNT_TIMEOUT=0
```

にして自動アンマウントさせない様にする[^1]。
[^1]: 数字は秒数。0 は、自動アンマウントを切る。


余談だが、

```
AUTOMOUNTD_MNTOPTS=nosuid,nodev
```

って書かれているので、`auto_smb` にも `auto_master` にも、 `nosuid` を充てる必要がない（？） @OSX 10.10。

#### auto_nfs

nfs の設定が書かれるマップファイル。

```
for_nfs -fstype=nfs,noresvport nfs://192.168.YY.YY:/Users/bunzaemon/for_nfs
```


#### auto_smb

smb の設定が書かれるマップファイル。

```
for_smb -fstype=smbfs,soft ://bunzaemo:passwd@192.168.XX.XX/for_smb
```



## rsync


Windows のバックアップを取りたくて。

マウントした samba ディレクトリを、 Time Machine してくれたら良いのだけれど、そうは行かないので、 rsync で当該ディレクトリを一旦他のディレクトリにバックアップして、それを Time Machine で保存してく[^2]。

[^2]: いや、 Win 側でバックアップ取れとか、`NAS` を買えとか、`csRsync` を使えとか、ってのは百も承知だけど、権限が無いし、金も無い、、、

同一マシン内で完結するので、`rsync` をデーモンモードで動かすまでもない。

もちろん、 `C` のマシンにて。

```
% pwd
/Library/LaunchDaemons/
% cat com.bunzaemon.rsync.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.bunzaemon.rsync</string>
        <key>UserName</key>
        <string>bunzaemon</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/bin/rsync</string>
                <string>-av</string>
                <string>--delete</string>
                <string>/Users/bunzaemon/smb/for_smb/</string>
                <string>/Users/bunzaemon/bak/for_smb/</string>
        </array>
        <key>StandardOutPath</key>
        <string>/tmp/com.bunzaemon.rsync.stdout.log</string>
        <key>StandardErrorPath</key>
        <string>/tmp/com.bunzaemon.rsync.stderr.log</string>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>
```

普通に root で実行するとマウントしなおした場合に root 権限でマウントしてしまう。
それを回避するには、色々手はあるが、 `rsync` の設定云々で、対応するのも面倒なので、 `man 5 launchd.plist` の `UserName` を利用して、ユーザーでジョブを実行させる。



```
% sudo chmod 600 !$
com.bunzaemon.rsync.plist
% sudo chown root !$
% sudo launchctl load com.bunzaemon.rsync.plist
```

最初の一回目に、コピー元とコピー先を間違えると痛い目に合う。