USBに入れたデータをいろんな環境で使いたいと思って、一番汎用性があるexFATでフォーマットしたまでは良かったのですが、Raspberry PiでマウントしてWebDAVで共有するまでに幾つか引っかかったので残しておきます。
使ってるOSはRaspbian Liteです
USBメモリをマウントする。
自動マウントするために/etc/fstabに書くと思うんですが、マウント元の記載方法をモダンなものにしてみました。
マウント元の記法はいくつかあって、
1.sdaやsda1のような/dev以下に置かれたデバイスファイル
2.USBメモリに割り振られたUUIDを指定する
3.ストレージに貼られたラベルを指定する。
があります。
1は
/dev/hogehoge /mnt/hoge vfat defaults 0 2
2は
UUID=xxx-xxx-xxx-xx /mnt/hoge vfat defaults 0 2
3は
LABEL=hoge /mnt/hoge vfat defaults 0 2
1に比べて2と3はデバイスファイルが変わってもマウントできるというメリットが有り、2と比べて3は何をマウントしているのかわかりやすいというメリットが有ります。
1.2は特に何もしなくてもそれぞれデバイスファイル/UUIDを調べれて指定すればOKですが、3はまずUSBメモリにラベルを貼る必要があります。
ラベルを貼るコマンドですが、フォーマット形式ごとに使用するコマンドが違いますので注意しましょう。
Linuxで一般的なext2/3はe2labelというコマンド、あまりLinuxでは使わないと思いますがNTFSではntfslabel(多分パッケージをインストールする必要あり)を、vfat(FAT32)ではmlabelを、そしてexFATではexfatlabelを使います。
exFATでフォーマットしたUSBメモリにラベルを付けるには以下のようになります。
なお、USBメモリはsda1であるとします。
$ sudo exfatlabel /dev/sda1 usbmem
そして、ラベルをつけた後、/etc/fstabで
LABEL=usbmem /mnt/hoge exfat defaults 0 2
と指定すればマウントファイルが変わろうと自動的にマウントされます。わかりやすいですね。
ちなみに、exfatでフォーマットされたストレージをマウントする場合はフォーマット形式をexfatとします。
#マウントしたUSBメモリを任意のパーミッションにする
Linuxですと、ext2/3/4でないかぎり、マウントした後中に入っているファイル/フォルダのパーミッションを変更できないと思います(ここはもしかしたら違うかも)
じゃあどこで定義するのかというとマウント時に定義するのですが、fstabに書くときに引っかかりました。
LABEL=usbmem /mnt/hoge exfat defaults,gid=30,umask=003,dmask=003,fmask=003 0 2
上のと比べるとdefaultsの後に幾つかパラメータを追加しています。
詳しいパラメータの種類は各自で調べてもらうとして、ここにマウント時のオプションを書きます。
ここで指定しているのはgidと3つのmaskです。
gidはこのUSBメモリに入っているファイル/フォルダは複数のソフトで使うことを想定しているので所属グループを指定しています。
uidというパラメータで所属ユーザーを指定することも出来ます。
どちらとも指定しなければ所属はrootになります。
重要なのはその次、umask,fmask,dmaskのmaskシリーズです。これでマウント時と新規作成時のパーミッションを指定できます。
それぞれ、
umask=新規ファイル作成時のパーミッション
fmask=マウントしたストレージ中の「ファイル」のパーミッション
dmask=マウントしたストレージ中の「フォルダ」のパーミッション
指定しなければ自動的に751になります。
ここでは所属グループにも書き込み権限が欲しかったので774にすることを想定し、003としています。
こうすることによって、マウントしたストレージ中のデータのパーミッションを指定することが出来ます。
なお、個別にパーミッションを指定することは出来ません。
exFATやFATにはパーミッションという概念がないみたいですし、仕方ないと言ったら仕方ないのかもしれません。