Raspberry PiのUSB端子に、SSDやHDD等のストレージを接続したとき。
オートマウント(autofs)を使用すると、接続したストレージ固有のID(UUID)によって、指定したディレクトリに自動マウントすることが可能です。
またオートマウントの場合、アクセスが無いと自動的にアンマウントされるため、電力の節約やストレージの寿命に優しいかと思います。
設定方法を記録しておこうと思います。
目次
USBストレージのautofs設定
OSは、Fedora 27のaarch64版を使用しましたが、標準的なサービスのため、他のOSでも利用可能かと思います。
USBストレージのフォーマット・UUID確認
rootでログインしたため、sudoは省略してあります。他のディストリビューションなど、必要な場合sudo付きでコマンドを実行して下さい。
- USBストレージを接続、fdiskやcfdisk等でパーティションを作成します。
cfdisk /dev/sda
- Free Spaceを選択、Newでパーティション作成、Writeでパーティションテーブルを書き込みますが、必ず「yes」と入力する必要があるようです。
- mkfsで作成したパーティションをフォーマットします。
mkfs.ext4 /dev/sda1
- blkidでパーティションのUUIDを確認しておきます。
blkid /dev/sda1
UUIDが表示されますが、同時に/dev/disk/by-uuid/<UUID>にシンボリックリンクが作成され、そちらの名称でデバイスへアクセス可能になります。
autofs設定
autofsをインストール後、設定を作成して起動するかたちです。
- autofsをインストールします。
# Debian,Ubuntu,Raspbian apt-get install autofs # Fedora dnf install autofs
- USBストレージ用のマウントポイントを作成します。/usbにしようと思います。
mkdir /usb
- /etc/auto.master.d/usb.autofsファイルを作成します。
mkdir /etc/auto.master.d vi /etc/auto.master.d/usb.autofs
次の内容になります。
/usb /etc/auto.usb
作成した/usbディレクトリの設定は、/etc/auto.usbファイルに紐付きますよ、という内容です。こちらのコマンドでも作成可能です。
echo "/usb /etc/auto.usb" | sudo tee /etc/auto.master.d/usb.autofs
※23.8.1追記:既定のタイムアウト設定は600秒のため、10分アクセスが無いと自動アンマウントされます。タイムアウトを0秒に設定すると、自動アンマウントされなくなります。
自動マウントに時間がかかって困る場合は、タイムアウトを0秒に設定することで即アクセスが可能になります。echo "/usb /etc/auto.usb --timeout=0" | sudo tee /etc/auto.master.d/usb.autofs
- 先程フォーマットしたUSBストレージは、/usb/hdd1というディレクトリにマウントしようと思います。
/etc/auto.usbファイルを作成します。vi /etc/auto.usb
次の内容になります。
hdd1 -fstype=ext4,rw :/dev/disk/by-uuid/<ストレージのパーティションのUUID>
次のコマンドでも設定が可能です(/dev/sda1の部分は適宜変更して下さい)。
echo "hdd1 -fstype=ext4,rw :/dev/disk/by-uuid/"`sudo blkid /dev/sda1 | grep -o '\sUUID=\"[0-9a-f\-]*\"' | grep -o '[0-9a-f\-]*'` | sudo tee -a /etc/auto.usb
他のストレージもマウントしたい場合、このファイルに設定を書き足します。
- autofsの自動起動を有効にします。
systemctl enable autofs --now #コピペ用 # systemctl start autofs # systemctl status autofs # systemctl stop autofs # systemctl disable autofs
- automountコマンドでマッピングを確認します。
automount -m
/usbマウントポイントの設定は、指定したUUIDのストレージが接続された場合、hdd1というサブディレクトリにマップするよ、というような内容です。
以上で設定が完了しました。
atufos.serviceが動かない場合
※23.8.1追記
Tinker Board 2では、autofsインストール後、autofs.serviceが動きませんでした。理由は、カーネルのautofsドライバが入っていないためでした。
そのような場合ですが。autofsドライバモジュールをパッケージでインストール可能の場合はインストールします。
Tinker Board 2のDebian 10はモジュールパッケージはありませんでした。その場合は、カーネルのソースから、autofsドライバをビルドしたところ、autofsが使用できるようになりました。
オートマウントのタイミング
実際にストレージがマウントされるのは、Raspberry Piを起動した時やUSBストレージを接続した時ではなく、指定したサブディレクトリ(/usb/hdd1)にアクセスしたタイミングになります。
/usb/hdd1にアクセスするとマウントされる・・・こんな感じです。
アンマウント方法
オートマウントは通常のマウントとは異なり、一定時間アクセスがないと、自動的にアンマウントされるようです。HDDの場合は省電力モード(ディスクの回転OFF)に移行するかと思います。
とはいえ、USBケーブルを外す場合、念のために手動でアンマウントしてから取り外したほうが良さそうです。
sudo sync
sudo umount /usb/hdd1
ストレージの寿命を延ばすためにも、頻繁にアクセスする必要がない場合は、通常のマウント方法よりも、オートマウントを使用したほうが宜しいかと思います。
UUIDにより、ドライブごとに指定した個別のサブディレクトリにマウントされますので、誤って別のドライブに書き込むようなミスも無くなるかと思います。
ぜひお試し下さい。