Проблема с nfs-шарой в Le Potato, transmission

Случай из практики - nfs-шара не подключалась после перезагрузки.

Intro - Введение

Использую le potato c OS Debian как торрент-клиент Transmission.

Transmission работает без проблем, но место маловато на самой плате, решил подключить nfs-шару c другого сервера.

Создал systemd mount файл, включил nfs-шару, включил transmission - все работает.

cat<<EOT | sudo tee /etc/systemd/system/opt-transmission/downloads.mount
[Unit]
Description=NFS Share Mount
After=network-online.target

[Mount]
What=192.168.1.2:/public/torrent
Where=/opt/transmission/downloads
Type=nfs
Options=defaults,noatime,hard,intr,tcp,vers=4

[Install]
WantedBy=multi-user.target
EOT

Создал override-файл для transmission-daemon.service

cat<<EOT | sudo tee /etc/systemd/system/transmission-daemon.service.d/99-after-nfs.conf
[Unit]
Requires=opt-transmission-downloads.mount
After=opt-transmission-downloads.mount
EOT

Делаю запуск - все работает

sudo systemctl daemon-reload
sudo systemctl enable --now opt-transmission-downloads.mount
sudo systemctl start transmission-daemon.service

Делаю перезагрузку, nfs-шара не подключена, transmission не запущен.

Ну начал разбираться.

Problem - Описание проблемы

Основная проблема - network-online.target - быстро стартует и сообщает systemd, что все хорошо, systemd начинает загружать units, mounts, в которых указана зависимость от network-online.target.

Это происходит очень быстро, nfs-client не успевает правильно загрузится и не может подключить nfs-шару.

Solution - Решение проблемы

Ну я пришел к простому решению - создать новый unit, который будет:

  • ждать, пока сеть будет готова;
  • подключить nfs-шару;
  • запустить transmission.

Нам понадобится скрипт

cat<<EOT | sudo tee /usr/local/bin/nfs-transmission-starter.sh
#!/bin/bash

# Borrowed from here
# https://askubuntu.com/questions/929659/bash-wait-for-a-ping-success

printf "%s" "waiting for NFS Server ..."
while ! ping -c 1 -n -w 1 192.168.1.2 &> /dev/null
do
    printf "%c" "."
done
printf "\n%s\n"  "NFS Server is back online"

systemctl start opt-transmission-downloads.mount
systemctl start transmission-daemon.service
EOT

sudo chmod a+x /usr/local/bin/nfs-transmission-starter.sh

Systemd unit

cat<<EOT | sudo tee /etc/systemd/system/nfs-tranmission-starter.service
[Unit]
Description=NFS Transmission Starter
After=network-online.target
StartLimitIntervalSec=0

[Service]
Type=simple
ExecStart=/usr/local/bin/nfs-transmission-starter.sh

[Install]
WantedBy=multi-user.target
EOT

sudo systemctl daemon-reload

sudo systemctl disable --now opt-transmission-downloads.mount
sudo systemctl disable --now transmission-daemon.service

sudo systemctl enable --now nfs-transmission-starter.service