ローカルPC・開発環境周り

MacからNTFSの外付けHDDにファイルを作成・コピーする

昨年からリモートワークがメインになり、それまではWindowsを使用していた自分ですが、会社支給のMacBookを自宅で本格的に使うようになりました。

Mac(のファイルシステムAPFS)から、Windowsの(ファイルシステムNTFSでフォーマットされた)外付けハードディスクにファイルをコピーしようとしたのですが、自分のMacの環境が原因なのか、すんなり書き込めなかったので備忘録としてメモっておきます。

スポンサーリンク

Macの環境

Catalina で外付けHDDにはバッファローのHD-PNTU3という古いものでした。

% sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.7
BuildVersion:	19H15
% 
% mount   
...

/dev/disk2s1 on /Volumes/HD-PNTU3 (ntfs, local, nodev, nosuid, read-only, noowners)
%


普通にUSBを指してファイルコピーしようとすると読み取り専用と怒られます。Finder上でもビープ音が鳴り、コピーできません。

$ cp ~/Documents/hoge.txt /Volumes/HD-PNTU3/99_etc
cp: /Volumes/HD-PNTU3/99_etc/hoge.txt: Read-only file system
$

HDDへの書き込み有効化手順

マウント済みの外付けHDDをアンマウントする

一旦アンマウント(接続を解除)します。

% sudo umount /Volumes/HD-PNTU3

## HD-PNTU3 が表示されないことを確認
$ mount

書き込みオプションを指定して再マウントする

まず diskutil コマンドを使って、どのようなデバイス名で外付けHDDが認識されているかを確認します。

以下の例では disk2s1 という名前で認識されています。

$ diskutil list
...

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *1.0 TB     disk2
   1:               Windows_NTFS HD-PNTU3                1.0 TB     disk2s1 
$


マウントポイントを作成し、書き込み(rw)とFinderで表示しない(nobrowse)オプションをつけてマウントします。

$ sudo mkdir /Volumes/mnt_hdd
$ sudo mount -t ntfs -o nobrowse,rw /dev/disk2s1 /Volumes/mnt_hdd
$

書き込む

以下のようにエラーなく書き込めたらOKです!

$ cp ~/Documents/hoge.txt /Volumes/mnt_hdd/99_etc/
$ ls  /Volumes/mnt_hdd/99_etc/hoge.txt
/Volumes/mnt_hdd/99_etc/hoge.txt
$


Finderから操作したい場合は、以下のように適当なディレクトリにシンボリックリンクすれば、当該ディレクトリにショートカットが作成され、GUIで操作可能になります。

$ ln -snf /Volumes/mnt_hdd ~/Desktop
$

アンマウントして後片付けする

作業が終わったらアンマウントします。(作成した場合は)シンボリックリンクも消しておきます。

$ sudo umount /Volumes/mnt_hdd
$ rm ~/Desktop/mnt_hdd
$


Tips

とここまですんなり行く予定だったのですが、冒頭に書いたとおり自分の環境のせいか最初うまく行かず、以下の手順をやっているうちに、いつの間にか上記の通りにできるようになっていました。
(そして以下の手順で入れたパッケージを削除しても動く。。なぜだ。。)

一応メモっておきます。

書き込みオプションが効かない

まず nobrowse,rw オプションでマウントがうまく行きませんでした。

% sudo mkdir /Volumes/mnt_hdd
% sudo mount -t ntfs -o nobrowse,rw /dev/disk2s1 /Volumes/mnt_hdd 
Password:
mount_ntfs: /dev/disk2s1 on /Volumes/mnt_hdd: Read-only file system
mount: /Volumes/mnt_hdd failed with 71
%

(追記 : 後日、別の外付けSSDでやったときも同様の事象でした。このエラーが出た場合、後述のntfs-3gでのマウントを試してみてください。僕の環境では、ntfs-3gでのマウントを一度やると、それ以降は通常のマウントコマンドでも書き込みオプションありで正常にマウントできるようになりました。

ntfs-3g でチャレンジ

別な方法でやるしかないかーと思い、ntfs-3g という ファイルシステムドライバを利用すればいけるとあったので入れてみました。

インストール途中で非推奨(deprecated)のメッセージが出ていましたが、なぜ??MacでFUSEが推奨されなくなるから?

% brew install ntfs-3g
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 4 taps (hashicorp/tap, homebrew/core, homebrew/cask and mongodb/brew).
...

Warning: ntfs-3g has been deprecated because it requires FUSE!
==> Downloading https://homebrew.bintray.com/bottles/ntfs-3g-2017.3.23_3.catalina.bottle.1.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/512daef6a2d9d74416ebb67c08d1c750cae0ba717b6338bd188b3434ad5725db?response-content-disposition=attachm
...
%


ntfs-3g をインストールしたのでマウントしてみようとしましたが、スクショのダイアログの通り、Fuseが古いとのエラーが出ました。

% sudo /usr/local/bin/ntfs-3g /dev/disk2s1 /Volumes/mnt_hdd 
Password:
The disk contains an unclean file system (0, 0).
The file system wasn't safely closed on Windows. Fixing.
mount_osxfuse: the file system is not available (2)
%

OSXFuse インストール

MacFUSE の後継が OSXFuse らしいので入れてみます。
どうやらCaskで入れるのが正しかったらしいのですが、ログを見る限り自動的にCaskでインストールされていました。

% brew install osxfuse
Updating Homebrew...
==> Auto-updated Homebrew!

==> Downloading https://github.com/osxfuse/osxfuse/releases/download/osxfuse-3.11.2/osxfuse-3.11.2.dmg
==> Downloading from https://github-production-release-asset-2e65be.s3.amazonaws.com/1867347/ab8d9600-06f1-11eb-9e31-17e04b5951ce?X-Amz-Algorithm=AWS4-HMAC-SHA2
######################################################################## 100.0%
==> Installing Cask osxfuse
==> Running installer for osxfuse; your password may be necessary.
...

🍺  osxfuse was successfully installed!
%


再度ntfs-3gでマウントしようとすると今度はスクショのダイアログの通り権限不足のエラーが出ました。ダイアログは2つ出てた気がします。

% sudo /usr/local/bin/ntfs-3g /dev/disk2s1 /Volumes/mnt_hdd 
mount_osxfuse: the file system is not available (1)
%


メッセージの通り [ システム環境設定 ] → [ セキュリティとプライバシー ] 画面の左下の鍵アイコンをクリックして、アプリケーションの実行を許可します。


三度目の正直、ntfs-3gでマウントして正常に書き込みできるようになりました。

% sudo /usr/local/bin/ntfs-3g /dev/disk2s1 /Volumes/mnt_hdd 
% mount
...
/dev/disk2s1 on /Volumes/mnt_hdd (osxfuse, synchronous)
%

とまあいつの間にかntfs-3gは使わなくて良くなってたのですが。。

以上です〜ノシ

参考

(о ̄∇ ̄)/ぁざ~~っす

MacでNTFS形式のUSB外付けHDDに書き込む方法
MacOSのLinuxコマンド「sudo fdisk -l」に相当するものは何ですか?
NTFSファイル書き込み(Lion/Mountain Lion編)