Как убедиться, что локальные файловые системы монтируются до запуска NFS-сервера?

У меня есть простой домашний сервер 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)
1
задан 19 May 2020 в 16:30

1 ответ

Следуя советам в комментарии @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, который был запущен после того, как точка монтирования была доступна.

0
ответ дан 19 June 2020 в 21:38

Другие вопросы по тегам:

Похожие вопросы: