[Dev] ubuntuにusbハードディスク(FAT32)を接続してみる
こんにちは、@yasuです。
後で、もっと楽な方法があることに気づく。
USBハードディスクを接続したら、
接続を確認して、フォルダを追加して、マウントする操作が必要。
ただし、デスクトップを起動していれば、自動でマウントしてくれる。
Ubuntu Desktop環境の場合(ターミナルで外部接続)
なんの設定も必要ない。
USBハードディスクを接続すると、
Ubuntu Desktop環境(ただし、ログインしていない状態)の場合(ターミナルで外部接続)
マウント
udisksctl mount -b /dev/sdb1

※アンマウントコマンド
udisksctl unmount -b /dev/sdb1
現在の環境がUbuntu Desktop環境なので、以下の内容は参考まで。
Ubuntu Server環境の場合(手動)
lsblk
USBハードディスクを接続した状態。認識している

ディレクトリ作成
sudo mkdir -p /mnt/usb

マウント
sudo mount -t vfat /dev/sdb1 /mnt/usb -o uid=steem,gid=steem,umask=077

Ubuntu Server環境の場合(自動)
自動マウントスクリプト作成
sudo nano /usr/local/bin/usb_mount.sh
#!/bin/bash
# usb_mount.sh
# usage: usb_mount.sh <device_name> <add|remove>
DEV="/dev/$1"
MOUNT_POINT="/mnt/usb"
LOGFILE="/var/log/usb_mount.log"
USER_NAME="steem"
GROUP_NAME="steem"
export PATH=/usr/sbin:/sbin:/usr/bin:/bin
# ログ関数
log() {
echo "$(date '+%F %T') - $1" >> "$LOGFILE"
}
case "$2" in
add)
# デバイスが準備されるまで最大10秒待つ
for i in {1..20}; do
[ -b "$DEV" ] && break
sleep 0.5
done
if [ ! -b "$DEV" ]; then
log "Device $DEV not ready"
exit 1
fi
mkdir -p "$MOUNT_POINT"
# マウント
if mountpoint -q "$MOUNT_POINT"; then
log "$MOUNT_POINT already mounted"
else
if mount -t vfat "$DEV" "$MOUNT_POINT" -o uid=$USER_NAME,gid=$GROUP_NAME,umask=077 >> "$LOGFILE" 2>&1; then
log "Mounted $DEV at $MOUNT_POINT"
else
log "Mount failed for $DEV"
exit 1
fi
fi
;;
remove)
# マウント解除
if mountpoint -q "$MOUNT_POINT"; then
umount -l "$MOUNT_POINT" >> "$LOGFILE" 2>&1
log "Unmounted $MOUNT_POINT"
else
log "$MOUNT_POINT not mounted"
fi
# マウントポイント削除
if [ -d "$MOUNT_POINT" ]; then
rm -rf "$MOUNT_POINT"
log "Removed $MOUNT_POINT"
fi
;;
*)
echo "Usage: $0 <device_name> <add|remove>"
exit 1
;;
esac
udevルールを作成と反映
sudo nano /etc/udev/rules.d/99-usb-mount.rules
# USB接続時に systemd サービス呼び出し
#ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[b-z][0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}="usb-mount@%k.service"
#ACTION=="remove", SUBSYSTEM=="block", KERNEL=="sd[b-z][0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}="usb-mount@%k.service"
反映
sudo udevadm control --reload
sudo udevadm trigger
USB マウントサービスの作成と起動
/etc/systemd/system/usb-mount@.service
[Unit]
Description=USB auto mount for device %I
After=dev-%i.device
BindsTo=dev-%i.device
[Service]
Type=oneshot
ExecStart=/usr/local/bin/usb_mount.sh %I add
ExecStop=/usr/local/bin/usb_mount.sh %I remove
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
systemctl start usb-mount@sdb1.service
systemctl status usb-mount@sdb1.service




