リモートコンピュータのディレクトリを自分のリモートコンピュータにマウントしたいです/home/stew/shared
。インストールしてリモートコンピュータでsshfs
作業したら、次のことができます。ssh-copy-id
stew@stewbian:~$ sshfs [email protected]:/path/to/remote-dir ~/shared
その後、削除
stew@stewbian:~$ umount ~/shared
または
stew@stewbian:~$ fusermount -u ~/shared
stew
うまく機能しますが、ログイン時に自動的にインストールし、ログアウト時に削除したいと思いますstew
。可能なオプションの1つは、.service
ユーザーバスでsystemdを使用することです。
# ~/.config/systemd/user/shared.service
[Unit]
Description=Mount ~/shared
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=sshfs %[email protected]:/path/to/remote-dir %h/shared
ExecStop=umount %h/shared
[Install]
WantedBy=default.target
systemctl --user {start,stop} shared.service
効果も素晴らしいです!しかし、.mount
ユニットがより強力になるのは疑問です。
次のようにマウントユニットを使ってみました。
# ~/.config/systemd/user/home-stew-shared.mount
[Unit]
Description=~/shared
[Mount]
What=%[email protected]:/path/to/remote-dir
Where=%h/shared
Type=fuse.sshfs
[Install]
WantedBy=default.target
このインストールユニットを起動すると問題はありませんが、停止すると次の問題が発生します。
$ systemctl --user status home-stew-shared.mount
● home-stew-shared.mount - ~/shared
Loaded: loaded (/home/stew/.config/systemd/user/home-stew-shared.mount; static)
Active: active (mounted) (Result: exit-code) since Mon 2021-05-24 16:49:40 CEST; 6min ago
...
May 24 16:49:40 stewbian systemd[1046]: Unmounting ~/shared...
May 24 16:49:40 stewbian umount[22256]: umount: /home/stew/shared: must be superuser to unmount.
May 24 16:49:40 stewbian systemd[1046]: home-stew-shared.mount: Mount process exited, code=exited, status=32/n/a
May 24 16:49:40 stewbian systemd[1046]: Failed unmounting ~/shared.
$ umount ~/shared
ディレクトリをアンマウントしてデバイスを失敗させることができます。
質問:
- アパート
*.mount
よりユニットを好む理由がありますか?*.service
- 実際に使用する必要がある場合は、
*.mount
ユーザーバスで動作させる方法はありますか?それともシステムバスに行き、遅延インストールを実行し、UIDとGIDを手動で設定する方法を知る必要がありますか?
使用の利点の1つ*.service
は、このサービスをに追加できることですskel
。これにより、各ユーザーが自分の個人用共有ディレクトリを自動的にマウントして、自宅のすべてのコンピュータ間で効果的に同期できます。*.mount
正しいホームディレクトリにアクセスするには、ファイル名にユーザー名が必要です。
答え1
Ubuntu 21.04とsystemd 246.6でも同じ問題があります。マウントデバイスをアンマウントしようとすると、systemdは最初にアンマウントヘルパー/sbin/umount.<type>
(sshfsなど/sbin/umount.fuse.sshfs
)を見つけようとし、失敗すると呼び出されますumount2(<where>)
。ユーザーの systemd ランタイムが失敗します。
@fra-sanでこれがなぜ機能するのかわかりません。除去ヘルパーがあるかもしれないと思いました。
その質問に関しては:
- SysVスタイルのinitスクリプトで何でもできるように、サービスユニットで何でもできますが、systemdのアイデアは、一般的なシステム管理タスクを理解し、過度に複雑ではなく必要な機能を達成するために最小限の説明構文を提供することです(メンテナンスが難しくなります。)マウントデバイスを使用してファイルシステムをマウントできる場合は、デフォルトでスクリプトを作成するよりも優れています。もちろん、インフラストラクチャはあなたがしなければならないことをサポートできなければならず、ユーザーマウントデバイスの現在の状態は数年前よりはるかに優れていましたが、Ubuntu 21.04以降 - FUSEファイルはまだ100%ではありません。システム。
fuse.sshfs
ユーザーがマウントしたデバイスを停止(マウント解除)するには、/sbin/umount.fuse.sshfs
次のようにアンマウントヘルパーを作成しました。
#!/bin/sh
/bin/fusermount -u "$1"
その後、マウントデバイスを停止すると正常に動作します。 systemdはumountヘルパーを呼び出し、ファイルシステムを正しくマウントします(ヘルパーも呼び出され、すべてのpidを消費する無限ループに陥るため、umount
umountヘルパーから呼び出さないでください)。umount
これはおそらく素晴らしい解決策ではないでしょう。 systemdはumount
ユーザーとして呼び出すときに何をするべきかをしなければなりませんが(実際に何をしているのかわかりません)、私にとっては効果的でした。