I'm working on some home automation via a Raspberry Pi 3 B, I've got an external drive attached to it that I want to mount at startup without using fstab because I'll likely remove it at some point and this needs to be adaptable. I'm mounting by label in this scenario.

Currently the service fails at startup, and reports that the connection to the drive timed out. However, once the service is run by a user, the drive mounts without error. I'm beginning to think this is due to a misunderstanding about systemd but I can't think of an alternative, so I'd like some assistance.

Here's some relevant information:



#This is a mounting operation for use at startup.

## Variables

#Replace this with the label of target drive

#The Rest
LABEL_FOUND=$(ls /dev/disk/by-label | grep -c $DRIVE_LABEL)
IS_MOUNTED=$(mount | grep -c /media)

## Function for checking if mounted.
is_mountable() {
  if [ $LABEL_FOUND = 1 ]; then
    if [ $IS_MOUNTED = 0 ]; then
      return 0
      echo "Drive is already mounted"
      return 1
    return 1

## Attempt to connect for 120 seconds
connect() {
  until [ $CONNECTION_ATTEMPTS -gt 119 ]; do
    if is_mountable; then
      mount /dev/disk/by-label/$DRIVE_LABEL /media
      return 0
      sleep 1
  if [ $IS_MOUNTED = 1 ]; then
    echo "Mounted $DRIVE_LABEL"
    exit 0
    echo "Timed out, failed to mount."
    exit 1

## Main


Description=Mount our local drive to /media



On startup...

sudo journalctl -alf

-- Logs begin at Fri 2020-03-27 13:43:24 PDT. --
Mar 27 13:45:33 QTPi mount-media.sh[310]: 116
Mar 27 13:45:34 QTPi mount-media.sh[310]: 117
Mar 27 13:45:35 QTPi mount-media.sh[310]: 118
Mar 27 13:45:36 QTPi mount-media.sh[310]: 119
Mar 27 13:45:37 QTPi mount-media.sh[310]: 120
Mar 27 13:45:38 QTPi mount-media.sh[310]: Timed out, failed to mount.
Mar 27 13:45:38 QTPi systemd[1]: mount-media.service: Main process exited, code=exited, status=1/FAILURE
Mar 27 13:45:38 QTPi systemd[1]: mount-media.service: Failed with result 'exit-code'.

however, when the device is booted and a user runs

sudo systemctl start mount-media.service

Mar 27 13:49:04 QTPi sudo[2467]:       pi : TTY=pts/1 ; PWD=/home/pi ; USER=root ; COMMAND=/bin/systemctl start mount-media.service
Mar 27 13:49:04 QTPi sudo[2467]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
Mar 27 13:49:04 QTPi systemd[1]: Started Mount our local drive to /media.
Mar 27 13:49:04 QTPi sudo[2467]: pam_unix(sudo:session): session closed for user root
Mar 27 13:49:05 QTPi kernel: EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
Mar 27 13:49:05 QTPi systemd[1]: mount-media.service: Succeeded.

pi@QTPi:~$ mount | grep /media

/dev/sda1 on /media type ext4 (rw,relatime)

pi@QTPi:~$ sudo blkid | grep pidrive

/dev/sda1: LABEL="pidrive" UUID="8249a0f7-f020-4c8d-866d-d8728df3b1e7" TYPE="ext4" PARTLABEL="primary" PARTUUID="9504d415-2649-48c1-a294-6869a275164b"

Should note that this UUID shifts every startup.

uname -a

Linux QTPi 4.19.97-v7+ #1294 SMP Thu Jan 30 13:15:58 GMT 2020 armv7l GNU/Linux

Try running it in root's crontab -e with a short sleep 30 at every reboot?

@reboot sleep 30; /sbin/mount-media.sh >> /var/log/mount.log 2>&1

And take it out of systemd

  • This was a much better solution, thank you. – HearMeRawr Mar 27 '20 at 22:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.