obsolute Netatalk
netatalkが3.1.12(2018/12)からアップデートが止まったまま。
既に死亡宣告されたPhython2系に依存してる上に、portsとしても2020-09-15には削除予定とマークされてしまってます。
追記:4/27付でPython3.x対応にportsとして更新さてました。
少なくともFreeBSD上では、時々発生する原因不明のSignal11によるcore落ち、不定期におかしくなるEAなど問題山積み。
これはもう、今度こそ捨てるしか無いと決意。
今時のmacOS(Mojave)のafp/smb事情
macOS側としても、ファイル共有への接続がsmb優先になって久しく、このままafpは消えていくんじゃ無いかとも言われてます。
xNIX界隈のmacユーザーに対する認識も「もうsambaあれば十分でしょ?」って雰囲気を感じますが、そう簡単な話でもない。結論から言うと、今時のmacOSにとってsmbはafpを完全に置換え出来ていないし、たぶん今後もずっとそう。
恐らく使っているAPIに依存するのだと思うのですが、ローカルDBを持つアプリ(iTunesとかPhotosとかFinalCutProとか)なんかだと、ファイル共有上でまともに使えるのは、afpしか無いんですわ。
smbはというと、どうもローカルファイルシステムやafpより格下の扱い。ファイルパス指定でなんとなくsmb上のファイル指定できちゃったりするけど、そんなことするとDBに不具合続出。
そもそもそういうアプリは、アプリからファイル選択ダイアログ上開くとafp共有は見えても、smb共有はマウント済みの物も含めて選択出来なくなっています。
案1-ファイル共有経由のSparse image
そんなわけで苦肉の策として、smb上にSparse imageを置き、Sparse image内をAPFSでフォーマットして各ライブラリを配置することに。TimeMachineがやってるやり方ですね。
smb共有をマウントしてからSparse imageを又マウントする訳で、最初に開くまでえらく時間が掛かるんですが、iTunesでライブラリとしてSparse image内のディレクトリを指定しておくと、かってにsmb共有からマウント初めてくれるようです。
Sparse bandle imageとFinderのバグ?の罠
今時ならインクリメンタルバックアップ対応なSparse bandle imageでイメージファイル作成したいところですが、ここにFinder側?の罠が。
Sparse bandle imageで容量が増えてくると、bandsディレクトリ内のファイル数が膨大な数に増えていきます。
どうもね、macOSからsmb共有上にある1ディレクトリ数万件のディレクトリを開くと、smbの接続が強制的に切断されてしまいます。
Windows10からだとそんなことなかったので、どうにもmacOS(10.14.6/Mojave)側のバグ臭い。Catalinaだとどうなんでしょうね。使ってないから知らんけど。
で、Sparse bandle imageだとどうなるかというと…、
- Finderからimageをダブルクリックして開こうとすると、マウント中にsmb共有が切断されて失敗する。(マウントできない)
- バックアップしようとimageファイル自体をHDDなどにコピーしようとすると、コピー前にsmb共有が切断されて失敗する。(コピーできない)
- ディスクユーティリティ.appからimageを開くとマウント出来る。
- image内のファイルに張ったエイリアス経由でなら、問題なくマウントされる。
- マウントさえ出来てしまえば、中のファイルアクセスには問題無さそう。
…と、こんな感じ。実用上は問題無さそうだけれども凄く気持ち悪い。
そんなわけでbandleじゃないSparse imageに。ZFSならブロック単位で変更点のスナップショット取ってくれるし。
案2-iSCSIを使う
まぁSparse imageでとりあえずは使えるんですが、ファイル共有の先のイメージファイル開いているもんだから「割と遅い」。
近頃のmacOSでは、互換性の高いafpを放り投げつつ、smbの対応も互換性は格下の扱い。そもそもAppleとしてネットワーク上のストレージどうしたいん?って考えてみると「ファイル共有」ではなくて、SANを使えってのが回答なのかと思い至る。
でもApple謹製のXsanだと個人で使うにはかなり敷居が高い。もっと手軽に…となるとiSCSIに行き着く。
これならOSから見れば、互換性の面ではローカルディスクと遜色ない。
iSCSIイニシエーター
macOS用で使えそうなのはこの二つ。フリーなのはiSCSIInitiatorなんですが、1年半くらい更新が無く、うちのMojaveにはエラーが出てインストールできませんでした。
ちょいお高いんですが、ちゃんとCatalinaまで対応してるglobalSANのを使いました。
GUIあって設定は簡単。
iSCSIターゲット
FreeBSDに付いてくるctld、ボリュームはいつものzfsで。
容量ケチりたいんで、zfs create -sV
ってして大きめにサイズ割り当てて見るも、後述のAPFS使うと台無し。
4TBの割当てして、2TB書込み>2TB消去>また2TB書込み…ってしようとしたら、zfs側の消費が4TBめい一杯まで増えてる感じ。
APFSではCoWみたいなことするから、APFS上に空き容量あっても読み書きしているうちにzfsの割当て使いきっちゃう様で…。
APFSのサイズ可変機能が便利
iSCSI上のボリュームはAPFSでフォーマットしました。なんでAPFSなのかというと、再フォーマット無しにパーティションサイズを可変できるから。
ディスクユーティリティ.appからはイマイチ操作しずらくコマンドラインのdiskutilの方が直感的に扱えるんですが、中身を維持したままリサイズ可能。十分な空き領域があるなら縮小も可能。
サーバー上の空き容量が心許ないので、いっぺんにiSCSI用に容量割当てするわけにも行かなかったんですが、これでNAS上のiSCSI領域割当てを使用状況に応じて可変出来ます。
そして結論
- アプリのDB→iSCSI
- ただのファイル→Samba(+vfs_fruit)
- TimeMachine→Netatalk継続
こんな感じに
アプリのDB
iSCSIでちょびっとベンチマーク取ったら、Read系はかなり早いんですがランダムライトが異様に遅い。それと、ほぼ毎日macを持ち出してるんですが、その時のmount/unmountもちょっとやりにくい。
使い勝手の面から行くとSparse imageで行きたい所ですが…って、そうするつもりだったんですが、ちょっとUnmountせずにLAN切断しちゃったらSparse imageが吹っ飛んだ…。
それはもう、FirstAidで復旧も出来ずマウントすら出来ないくらい完膚なきまでに…。(壊れる直前のsnapshotあったから事なきを得ましたが…)
そういえばTimeMachineも、数ヶ月に1回くらいのペースで壊れてたんですよね。バックアップなので、またオリジナルから取り直せば良いや…と、余り深刻に考えていませんでしたが。
そんなわけで、アプリのライブラリ関係はiSCSIに。
ただのファイル
そして特に問題の出ない、ただのファイル置き場はSamba(+vfs_fruit)で。
ただね、4.10はまぁ問題なく動いてますが、4.11入れるとmacOSからのフォルダ単位のコピーが失敗したりとか。
具体的にはコピー終わってもフォルダが半透明表示のまま開けない。何かのメタデータ更新失敗している臭い?
追っかけるの面倒だったので、さっくり4.10に戻しました。
どうもこちらも予断を許さない模様。
TimeMachine
巷では「Sambaで置換え可」なんて言われてますが…、
初回作成はSambaから出来ないとか。(2回目以降はSambaからOK)
同じくハマりました。
FreeBSD限定かもしれませんが、ちょっと怖くてTimeMachineをSambaに移行出来ませんでした。
そんなわけでだいぶNetatalk依存減らせましたが、まだまだ全廃には至らず。
う〜ん。
ピンバック: 今度こそnetatalkすてすて…? | ファイルサーバーの研究