У меня есть простой домашний сервер Ubuntu 20.04, совместно использующий каталог по NFS. Общий каталог содержится в локальной файловой системе, но не в корневой файловой системе. Иногда при загрузке сервер NFS запускается до того, как монтирование готово, и поэтому сервер NFS выдает ошибки. Мне нужно войти в систему и перезапустить сервер NFS ( sudo systemctl restart nfs-server.service
), или перезагрузить компьютер и получить удачу.
Есть ли способ гарантировать, что сервер NFS запускается только после того, как эта файловая система готова?
Ошибка от сервера NFS выглядит следующим образом:
$ systemctl status nfs-server.service
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2020-05-19 11:16:34 BST; 3h 10min ago
Process: 927 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=1/FAILURE)
Process: 931 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
Process: 932 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
May 19 11:16:34 box systemd[1]: Starting NFS server and services...
May 19 11:16:34 box exportfs[927]: exportfs: /etc/exports [2]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/storage/Shared".
May 19 11:16:34 box exportfs[927]: Assuming default behaviour ('no_subtree_check').
May 19 11:16:34 box exportfs[927]: NOTE: this default has changed since nfs-utils version 1.0.x
May 19 11:16:34 box exportfs[927]: exportfs: Failed to stat /storage/Shared: No such file or directory
May 19 11:16:34 box systemd[1]: nfs-server.service: Control process exited, code=exited, status=1/FAILURE
May 19 11:16:34 box systemd[1]: nfs-server.service: Failed with result 'exit-code'.
May 19 11:16:34 box systemd[1]: Stopped NFS server and services.
выглядит строка / etc / fstab
примерно так:
UUID=<blah> /storage btrfs nofail,subvol=@storage,compress-force=zstd 0 0
/ etc / exports
примерно так:
/storage/Shared *(ro,insecure,all_squash)
Следуя советам в комментарии @steeldriver и @Rinzwind, мне удалось получить эту работу.
Сначала определите имя модуля systemd, который генерируется для точки монтирования (в моем случае / storage
):
$ systemctl list-units | grep '/storage' | grep 'mount'
storage-.snapshots.mount loaded active mounted /storage/.snapshots
storage.mount loaded active mounted /storage
Затем, следуя этим документам о том, как изменить существующий файл модуля, я добавил новый After =
твик для nfs-server.service
:
$ cat /etc/systemd/system/nfs-server.service.d/custom.conf
[Unit]
After=storage.mount
Затем примените изменения и перезапустите nfs-server
, чтобы подтвердить, что новая конфигурация выбрана (обратите внимание, что в списке custom.conf
):
$ sudo systemctl daemon-reload
$ sudo systemctl restart nfs-server.service
$ systemctl status nfs-server.service
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/nfs-server.service.d
└─custom.conf
Active: active (exited) since Sun 2020-05-24 20:52:08 BST; 6s ago
Process: 20384 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Process: 20385 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Main PID: 20385 (code=exited, status=0/SUCCESS)
May 24 20:52:07 box systemd[1]: Starting NFS server and services...
May 24 20:52:07 box exportfs[20384]: exportfs: /etc/exports [2]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/storage/Shared".
May 24 20:52:07 box exportfs[20384]: Assuming default behaviour ('no_subtree_check').
May 24 20:52:07 box exportfs[20384]: NOTE: this default has changed since nfs-utils version 1.0.x
May 24 20:52:08 box systemd[1]: Finished NFS server and services.
Наконец, перезагрузите компьютер и запустите на сервере NFS, который был запущен после того, как точка монтирования была доступна.