自宅の Raspberry Pi サーバで samba で NAS を運用しているんですが、iPad からだけなぜか「読み取り専用」となってしまって書き込めない問題が起きていました。Windows からでも macOS からでも普通に書き込めるのに、iPad だけ書き込めません。

IMG_3423

というわけで、今回はこれをサクッと解決しましょう。

実行環境

  • サーバ
    • Raspberry Pi 5
    • Ubuntu 24.04.3 LTS (Linux 6.8.0)
    • samba 4.19.5-Ubuntu
    • ファイルシステム:ext4 (on dm-crypt on dm-linear)
  • クライアント
    • iPad Air m3
    • iPadOS 18.6.2
    • 標準のファイルアプリ

解決策

samba に vfs_fruit と vfs_streams_xattr を追加する

macOS 端末との互換性に向けられた vfs_fruit モジュールと vfs_streams_xattr モジュールを有効にします。

vfs_fruit モジュールは samba の VFS モジュールで、下記の機能を有効にします。

  • AFP 互換メタデータへの対応(AppleDouble など)

  • macOS の拡張属性(com.apple.*)の保存

  • Finder のリソースフォークへの対応

  • Time Machine SMB

結果的には Apple SMB との互換性が確保される効果が得られると。

また、streams_xattr はクライアント側からの代替データストリーム(ADS)を POSIX の xattrs に格納できるようにするための機能です。主に NTFS 用と説明されていますが、iPad 側から書き込むにも ADS が書き込めないと「書き込み不可」になってしまうようで、vfs_fruit とセットで使う必要があります(少なくとも手元の環境ではそうでした)。

進め方

まずはお好みのエディタで /etc/samba/smb.conf を開き、[global] セクションの下に下記の行を追加します。

[global]
vfs objects = fruit streams_xattr

(今回は使わないのでスキップしますが)TimeMachine を使いたい場合は、TimeMachine サポートも有効にしておきましょう。

fruit:time machine = yes

smb.conf を保存したら、設定を再読込して完了です。

$ sudo smbcontrol all reload-config

これで完了です。簡単ですね。

手元の環境でも、iPad からファイル書き込みやディレクトリ作成ができるようになりました。

IMG_3428

参考文献