有馬総一郎のブログ

(彼氏の事情)

2024年12月07日 06:11:10 JST - 2 minute read - Linux

外付けHDDが勝手にマウントが外れるので、自動でマウントされるようにする

それまで外付けHDD2台だったのだけど、3台にしょうと ORICO ハードディスクケース 6558US3を購入して、それぞれ4GB, 8GB, 8GBのHDDを差している。すると、マウントが外れることが起きるようになってしまった…

$ df -T
Filesystem                  Type   1K-blocks       Used  Available Use% Mounted on
tmpfs                       tmpfs     804568       3036     801532   1% /run
/dev/mapper/ubuntu--vg-root ext4    52167452   21977904   27513836  45% /
tmpfs                       tmpfs    4022824          4    4022820   1% /dev/shm
tmpfs                       tmpfs     804564        268     804296   1% /run/user/1000
/dev/sda2                   ext2      481642     249351     207306  55% /boot
/dev/sda1                   vfat      523248       6228     517020   2% /boot/efi
/dev/sdc1                   xfs   3905108984 2328275560 1576833424  60% /mnt/hdd1
/dev/sdd1                   xfs   7811938628 6903331852  908606776  89% /mnt/hdd2
/dev/sdb1                   xfs   7811938304   54499176 7757439128   1% /mnt/hdd3

マウントが外れると、nextcloudとかnavidromeが動かなくなるので困る。なので、マウントが外れたら、検知させないとなぁ、メールでやるか、slackでやるかLINEでやるかとか思っていた。

というか、検知したら通知なんてせずそのままマウントすればいいのでは?バカだねー、そうじゃん。ということでGoogle Geminiに聞いて原型シェルを作ってもらって以下のようにした。

remount.sh

#!/bin/bash

# マウント
MOUNT_POINT="/mnt/hdd1"

# マウントポイント
if [ ! -d "$MOUNT_POINT" ]; then
  echo "$MOUNT_POINT is not found."
  exit 1
fi

# マウントされ
if ! mountpoint -q "$MOUNT_POINT"; then
  # マウントされ
  echo "$MOUNT_POINT is not mounted. Remounting..."
  mount -a
else
  # マウントされ
  echo "$MOUNT_POINT is already mounted."
fi

mountpointというコマンドがあることを初めて知る。これが使えそうだ。

$ mountpoint /mnt/hdd1
/mnt/hdd1 はマウントポイントです
$ echo $?
0
$ sudo umount /mnt/hdd1 
[sudo] arimasou16 のパスワード: 
$ mountpoint /mnt/hdd1
/mnt/hdd1 はマウントポイントではありません
$ echo $?
32

そして、管理者sudoで実行させたいので、sudo crontab -u root -ecron登録する。

0-55/5 * * * *  /home/arimasou16/remount.sh >> /home/arimasou16/remount.log 2>&1
マウント外れてる
マウントされる

上手くいった。本当はマウントが解除されないようにしたらいいんだろうけど、原因はなんだろうなぁ。スペックの問題なのか、ケースなのか、OSもしくは設定の問題なのか。