macOSでNTFSドライブを読み書き可能で再マウントする perlスクリプト

マウント済みの NTFSフォーマットのドライブを、読み書き可能な状態で再マウントするスクリプトを公開します。
以下の特徴があります。
・非常駐
・セキュリティを落とすような設定変更を行わない
・よく使われている一般的な無料のソフトでなんとかする
・ただし毎回コマンドラインから起動する必要がある
・Mojave, Catalina で動作確認済み

前提

  • FUSE for macOSが入れてある
  • brew install ntfs-3g がしてある。
  • 私の環境で実験しただけなので無保証です。

【お知らせ】 2019/10/19 修正しました。
変更点はマウントポイントに空白文字が入っていた時への対応と、なぜか読み込み時に<MNT>が抜けていたので追記です。

【補足】2019/10/19 macOS Mojave、および macOS Catalinaでの動作確認を行いました。動作確認時の各ソフトのバージョンは以下です。
・perl v5.18.4 (macOSに付属の物)
・Homebrew 2.1.15
・ntfs-3g stable 2017.3.23
・macFUSE 3.10.3
・Xcode 11.1 (Homebrewを使うのに必要だったような)

perlスクリプト

#! /usr/bin/perl

open(MNT, "mount |") || die;
@trg = grep {m|/Volumes|} <MNT>;
foreach my $t (@trg) {
	$t =~ /\(([^\)]+)\)$/;
	next if(! grep {$_ eq 'ntfs'} split(/\s*,\s*/, $1));
	print "remount: $t";
        (my $device, $mntpt) = $t =~ /^(.+)\son\s(.+)\s\(.+\)$/;
	system("sudo umount \"$mntpt\"");
	system("sudo mkdir \"$mntpt\"") if(! -e $mntpt);
	system("sudo /usr/local/sbin/mount_ntfs -o umask=022 \"$device\" \"$mntpt\"") if(-d $mntpt);
}

使い方

上記スクリプトを、remount.pl等の名称で保存します。
使用前に、chmod +x remount.pl しておくと良いと思います。
このスクリプトを実行すると、パスワードが要求されるので、ログインパスワードを入力します。(sudoを使用しているため)
すると、その時点で ntfs でマウントされていたボリュームが osxfuseで再マウントされます。
※ 初回にアクセシビリティ系の許可を有効にする必要があるかもです。

ざれ言

以前は /etc/fstabの変更程度で NTFSで読み書きできたのになーと、久々に調べたところ、色々と面倒な事になっていたみたいで。
それほど自動マウントにこだわらないし、OSがアップデートされる都度手を入れるのも面倒だしなー。
と考えながら、ふと mount_ntfsを直接起動すりゃいけるんじゃね? と思いつき、試してみたらできたので、じゃースクリプト化してみよう。ってんで でき上がったのが上記のスクリプトでした。

試行錯誤して気付いた事を以下にメモしておきます。

  • /Volumesに作られたディレクトリは、アンマウント時に勝手に消えるみたい。
    (当初は、自分のHOMEディレクトリに作成してマウントしてた)
  • ntfsの -o オプションは、独自。というかそれぞれ違うのね。
    mount後のパーミッションが思い通りに行かなかったので、man mount して -oのあたりを見てたんだけど、umaskの存在に気がつくまでは挫折に向かって試行錯誤してました。
    mount後に chmodしてみたり、-o のオプションを色々変えて(uid/gidを指定してみたり、dmode/fmodeを試してみたり)失敗してました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください