web-dev-qa-db-ja.com

シャットダウンする前にsystemdでネットワークドライブをマウント解除する

私のシャットダウンにはかなり時間がかかり(Debian 8.1を使用しています)、システムをシャットダウンする前にネットワークドライブをアンマウントすることで解決できることがわかりました。どうやら、すべてのドライブがアンマウントされる前にネットワークが切断されます。

これを自動的に行うには、systemdサービスを作成しようとしましたが、機能しません。つまり、アンマウントが間に合わず、シャットダウンプロセスにまだかなり時間がかかります。私のアプローチは この質問への回答 とsystemd.service manページの閲覧に触発されています...

[unit]
description=Unmount network drives on shutdown
Before=shutdown.target reboot.target halt.target network.target

[Service]
type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/bin/sh umount /media/networkdrive1 /media/networkdrive2

[Install]
WantedBy=multi-user.target

編集

ネットワークドライブは、/ etc/fstabに次の行でマウントされます。

//192.168.1.5/networkdrive1 /media/nw1 cifs _netdev,uid=myuser,credentials=/home/myuser/.credfile
//192.168.1.5/networkdrive2 /media/nw2 cifs _netdev,uid=myuser,credentials=/home/myuser/.credfile
5
pandita

3日間の検索とテストの後、私は実用的なソリューションを開発しました。これは、Debian-Jessie、Linux Mint、i386(32ビット)インストール用です。私はネットワークのCIFS共有を持っています。これらの共有が最初にアンマウントされていない場合、シャットダウンまたはリブートが120秒間ハングします。このスクリプトを使用すると、再起動またはシャットダウンする前に手動で共有をアンマウントする必要はありません。

自動CIFS umountスクリプト、シャットダウンおよび再起動時に実行

  • 次のスクリプトを/etc/init.d/aaaumountとして作成します(スクリプトは番号順に実行されます。そのため、aaaが最初に実行されます)。

    #!/bin/sh
    
    #
    # aaaumount initscript
    #
    ### BEGIN INIT INFO
    # Provides:          aaaumount
    # Required-Start:    $local_fs $remote_fs
    # Required-Stop:     $remote_fs
    # Default-Start:     S
    # Default-Stop:      0 1 6
    # Short-Description: umounts cifs shares
    # Description:       This script unmounts cifs shares
    ### END INIT INFO
    
    case "$1" in
     stop)
                umount -t cifs -af
    esac
    
  • 実行可能にする:

    Sudo chmod 755 /etc/init.d/aaaumount
    
  • / lib/systemd/system /にあるサービスへのシンボリックリンクを作成します。

    cd /lib/systemd/system/
    Sudo ln -s /dev/null aaaumount.service
    
  • /etc/rc0.d/etc/rc6.dの両方にシンボリックリンクを作成します(06はシャットダウン/再起動の実行レベルです):

    Sudo ln -s /etc/init.d/aaaumount /etc/rc0.d/K01aaaumount 
    Sudo ln -s /etc/init.d/aaaumount /etc/rc6.d/K01aaaumount 
    
  • それをアクティブにします:

    Sudo systemctl enable aaaumount.service
    
2
KenH

_netdevマウントオプションを/etc/fstabのリモートファイルシステムに追加します。 systemctl daemon-reloadを実行すると、remote-fs.targetの依存関係がネットワークにマウントされます。 systemctl list-dependencies remote-fs.targetで確認してください。このようなファイルシステムは、ネットワークが停止する前にマウント解除されます。

2
Ferenc Wágner

試行錯誤の末、Ubuntu 16.04では、システムがWi-Fiを使用するために必要なwpa_supplicant.serviceがsystemdで管理されていない(そしてそのsystemdユニットが「無効」になっている)と考えました。 DBusを介して何かによって開始されたようです。理由はまだわかりませんが、シャットダウンされますbeforenetwork-online.targetおよびnetwork.target

最後に、ドライブが正しくマウント解除されたことを確認するために、マウントユニットにAfter=graphical.targetを追加しました。これを行うには、次のようにx-systemd.requires=graphical.target/etc/fstabファイルのオプションに追加します。

mount.cifsで始まるオプションを無視するには、マウントユーティリティ(私の場合はx-)が必要です。これは、バージョン6.5より前のmount.cifsの場合とは異なります。

0
Hugal31