はじめに

最近、メインPCをMacBook Air m4に変えました。 今まで、Fedoraを使っていて、外付けSSDをveracryptで暗号化して使っています。

macOSでは、NTFSでフォーマットされたドライブは読み取り専用でしかマウントできません。
さらに、 VeraCrypt で暗号化されたボリュームを使っている場合、復号後のマウントも手動で行う必要があり、非常に面倒です。

そこで今回は、VeraCryptボリュームを復号後に、自動でntfs-3gを使って再マウント(書き込み可能)するシェルスクリプトを紹介します。

準備

必要なもの

  • macOS (Apple SiliconまたはIntel)
  • VeraCrypt インストール済み
  • Homebrew + ntfs-3g のインストール

ntfs-3gのインストール

brew install ntfs-3g

/opt/homebrew/bin/ntfs-3g にインストールされます。

スクリプト

#!/bin/bash
# veracrypt-ntfs-remount.sh

MOUNT_POINT="/Volumes/Untitled"
if [ ! -d "$MOUNT_POINT" ]; then
    sudo mkdir -p "$MOUNT_POINT"
fi

echo "[*] VeraCrypt ボリュームをマウントしてください (GUIでもOK)。"
echo "   → マウントしたら Enter を押してください。"
read

# disk image (VeraCrypt復号後) を探して IDENTIFIER を抽出
DISK=$(diskutil list | awk '
$0 ~ /disk image/ {flag=1; next}
flag && $NF != "IDENTIFIER" {print $NF; exit}
')

if [ -z "$DISK" ]; then
    echo "[!] VeraCrypt デバイスが見つかりません。diskutil list を確認してください。"
    exit 1
fi

echo "[*] 検出したデバイス: /dev/$DISK"

# macOS 標準の読み取り専用マウントを解除
sudo diskutil unmount /dev/$DISK

# ntfs-3g で書き込み可能で再マウント
echo "[*] ntfs-3g で再マウント中..."
sudo /opt/homebrew/bin/ntfs-3g \
    /dev/$DISK "$MOUNT_POINT" \
    -olocal -oallow_other \
    -ouid=$(id -u) -ogid=$(id -g) -oauto_xattr \
    -ovolname=veracryptdrive

if [ $? -eq 0 ]; then
    echo "[+] 正常に /dev/$DISK$MOUNT_POINT に書き込み可能でマウントしました。"
else
    echo "[!] マウントに失敗しました。"
fi

使い方

  1. VeraCryptでボリュームをGUIからマウントします。

  2. 上記スクリプトを適当な名前で保存(veracrypt-ntfs-mount.shなど)。

  3. ターミナルで実行:

./veracrypt-ntfs-mount.sh

注意点

  • macFUSEのインストールが必要な場合があります(brew install macfuse)。

  • 初回使用時は、システム拡張の許可を「セキュリティとプライバシー」から行う必要があります。

  • 1つのドライブでしか動作確認をしておりません。複数ドライブの場合の動作は保証しません。(多分動きません)