MacとLinuxで共用できるポータブルドライブを作るのがけっこう大変だった

やわなべです。

うちにあるLinuxサーバーを壊れたテレビの代理にする作業を年末年始にやってました。

てか、ここんとこそれしか書いてませんね。

実はまだ課題が残ってて、サーバーに録り貯めた番組データを快適に見る手段がないんです。

録画データはm2tsという形式で保存してるんですが、1時間番組で約7GBのサイズになります。自宅内のWifi越しに動画再生ソフトで開こうとしても読み込めないし、サーバーからストリーミングさせてもスムースに再生できない。

現実的な落とし所として、録画したデータをLinuxサーバに接続したUSBのポータブルHDDに移動させ、それを見る端末(Mac)に接続させよう、ということになりました。ただ問題は、そのポータブルHDDってどうやってフォーマットすればいいんだろうか、ってこと。

スポンサーリンク

Linuxのファイルシステム(ext4)で構築してみる

IMG_20170105_132718.jpg

ポータブルHDDは余ってるこいつを使います。以前Linuxサーバをセットアップするときにも登場しましたが、これ、ただのケースです。中に入ってるのは昔使ってたノートPCを処分する際に抜き取った80GBくらいのHDD。

こいつをフォーマットして使うんですが、OSによってデフォルトのファイルシステムの形式は異なります。異なるOSのファイルシステムだと、読めるけど書き込みできない、なんてケースもあるようで。

今回の場合、Linux(テレビサーバー)で書き込みができ、Mac(動画ビューワ)で読めればいいので、書き込み担当のLinuxのファイルシステム、ext4でフォーマットすることにしました。

linux側でfdiskで既存のパーティションをすべて削除し、ext4で新しい領域を作ります。そこへ録画したm2tsファイルを入れた状態でMacにつないでみるんですが、、、認識しません。

どうやら、Mac(OSX)でext4のドライブにアクセするにはext4fuseという仕組みが必要なんだそう。インストール時にちょっと罠があったんですが、こちらの記事を参考に回避。

参考 Mac OS X で ext4 マウントする方法(ext4fuse) – アーキテクチャをスマートに。

無事にマウントできたんですが、中にある20GBの動画ファイル(m2ts)をVLCで開こうとするとエラーになります。Finderからダブルクリックするとファイル名の同名のフォルダができ、それをクリックすると中にまた同名のフォルダができ、、、というマトリョーシカ的謎現象。なんかおかしい。

さっきの参考記事をよく読むと追記があって「ext4fuseは32bitを超えるBlock numberをサポートしておらずテラバイト級のドライブではうまく動かないケースがある」んだとか。

自分の場合は、ファイルと同じ名前のディレクトリが見えて、ファイルを開くと謎のディレクトリを開こうとしてエラーになる、みたいな怪奇現象が発生しました。

私が遭遇した怪奇現象と同じです。2014年時点の不具合がまだ解決されてないようなので、こりゃだめだとプランBを検討することに。

Macのファイルシステム(HFS)にLinuxから書き込む

お次はMac側のファイルシステムであるHFSでフォーマットする方法です。これならMacでは確実に読み書きができますが、反対に Linuxで快適に書き込みができるかどうかがわかりません。

HDDドライブをMacに挿して「ディスクユーティリティ」から初期化します。

ss39491.png

portble80という名前のドライブが作成されました。「Mac OS拡張」ってなってるのが「HFS+」という名前のファイルシステムのことのようです。

これをlinuxに挿します。さっきと逆で今度はLinux側に何かHFSにアクセスできるための何かを入れないといけないんだろうと、思ってリモートデスクトップでlinuxマシンのパッケージ管理ツールを使おうと思ったんですが。

ss28398.png

…なんかもう認識してるんですけど。テスト用にMac側で入れた小さい動画ファイルも見えてます。dfコマンドを叩くと、

> df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdc2 77814832 216888 77597944 1% /media/ywnb/portable80

/media/ywnb/portable80 にマウントされてる状態。これは話が早い。とういわけで前日に取ってた番組データ2件、あわせて10GB程度をここへ移動させます。が、、、

unable to remove target: Read-only file system

「読み込み専用だから、書き込みできません」とのお言葉。出たーっ

参考 UbuntuでMac OS(HFS+)のディスクを読み書きする – Qiita

こちらのサイトによると、Macのファイルシステムはジャーナリングという書き込みの信頼性を高める仕組みが備わってるらしいんですが、それがあるとLinuxから読み書きができないんだそう。

再度Macにつなぎ変え、ターミナルからdfコマンドでディスク名(この場合/dev/disk3s2)を確認してから、下のコマンドでジャーナルをオフにします。

> diskutil disableJournal /dev/disk3s2
Journaling has been disabled for volume portable80 on disk3s2

再度再度linuxに再接続しますが、さっきすぐに認識したのがいくら待っても認識されません。さっきと同じ要領で、もういちどリモートデスクトップでログインすると認識されました。どうやら、デスクトップのログインの際にドライブをスキャンするみたいですね。そうでない場合はマウントコマンドを叩けばいいでしょう。

そして動画データの、ポータブルドライブへの移動にリトライ。

cannot create regular file xxxx: Permission denied

あら、今度は書き込み権限のエラーのようです。さっきの参考記事に「ジャーナルオフにしたあと、権限変えないとだめだよ」とちゃんと書いてました。すみません。再度再度再度Macにつなぎ替えて、パーミッション付与。

>chmod 777 /Volumes/portable80

再度再度再度再度linuxにつなぎ替えてマウントさせると、今度はファイルの書き込みに成功しました。10GBのデータの書き込みにゆうに5分くらいかかりましたが、もともとMac用のフォーマットなので、書き込みさえできればこっちのもんです。

ss46794.png

再度再度再度再度再度Macへのつなぎ変えで、ようやくVLCで録画したデータが視聴できました。ネットワーク負荷を気にする必要が無いので快適です。

まとめ

というわけで結論。

「Mac(OSX)とLinuxとの共有ドライブのファイルフォーマットはHFSで。Mac側でフォーマットしたあと、ジャーナルをオフにして書き込み権限をオンにすればいい。」