
大量の Debian パッケージを更新してインストールしたところ、特定の fstab ファイル設定が原因でエラーが発生しています。同時にマウントすることはなく、マウント ポイントが同じドライブが 2 つあります (/etc/fstab
スニペット):
UUID=xxxx-xxxx /media/strontium vfat user,rw,exec,nofail 0 2
UUID=yyyy-yyyy /media/strontium vfat user,rw,exec,nofail 0 2
しかし、インストール後、systemd は次のようなエラーを出力します。
[518052.191024] systemd-fstab-generator[28811]: Failed to create mount unit file /run/systemd/generator/media-strontium.mount, as it already exists. Duplicate entry in /etc/fstab?
実際のところ、ドライブをマウントするのに systemd はまったく使いたくありません。以前使用していた systemdsudo mount -a
は、ファイルを調べて/etc/fstab
、差し込まれたものをすべてマウントしていました。
systemd マウント機能をオフにして、以前のように自分のドライブを手動でマウントすることは可能ですか?
答え1
マウント ポイント ディレクトリ名が systemd ファイル名に変換されるため、この systemd 制限を回避する方法がわかりません。最も簡単な答えは、fstab からエントリを削除し、必要に応じてマウントを実行する小さなスクリプトを作成することです。
#!/bin/bash
( mount -U xxxx-xxxx /media/strontium -t vfat -o rw,exec ||
mount -U yyyy-yyyy /media/strontium -t vfat -o rw,exec
) && echo ok
/etc/fstab
を変更した後は、 systemd が変更を認識するようにするために を実行することを忘れないでくださいsudo systemctl daemon-reload
。
エントリを保持したい場合は、/etc/fstab
2 番目のマウント ポイントを最初のマウント ポイントへのシンボリック リンクにすることができます (例 ) ln -s /media/strontium /media/strontium2
。マウントが完了すると、リンクがたどられ、通常どおりディレクトリに到達します。noauto
この場合、両方の行にオプションを追加する必要があります。そうしないと、systemd は混乱し、最初のエントリであると認識したものをすぐにアンマウントします。
シンボリックリンクの代わりに実際のディレクトリを使用して手動でバインドマウントそのディレクトリを目的の場所にマウントするには:
mount --bind /media/strontium2 /media/strontium
最初のマウントと同様に、このバインド マウントもアンマウントすることを忘れないでください。
以前は、UUID が表示されたときに明示的に mount を呼び出す udev ルールを追加できました。例/etc/udev/rules.d/92-my.rules
:
ACTION=="add", ENV{ID_FS_UUID}=="xxxx-xxxx", RUN+="/usr/bin/mount /dev/%k /media/strontium"
しかし、これは最近のsystemdでは動作しません。別のマウント名前空間で実行されるため、マウントは実行されてもそれを見ることはできません。この名前空間の理由はまだわかりませんが、原理的には、次の2行のudevd
ファイルを作成することでこの機能をオーバーライドできます。
/etc/systemd/system/systemd-udevd.service
.include /usr/lib/systemd/system/systemd-udevd.service
MountFlags=shared
自動化された操作が必要な場合は、ブロック デバイスに関するイベントを監視しudevd
、明示的にマウントするという方法もあります。たとえば、次のように永続的に実行します。
#!/bin/bash
# udevadm monitor outputs a stanza ending with a blank line
# UDEV [5291328.3] add /devices/pci0000:00/.../usb3/..../block/sdd (block)
# ACTION=add
# DEVNAME=/dev/sdd
stdbuf -o L udevadm monitor -u -p -s 'block/disk' |
awk -F= '
$0~/^ACTION=/{ action = $2 }
$0~/^DEVNAME=/{ name = $2 }
$0~/^ID_FS_UUID=/{ uuid = $2 }
$0~/^$/{ if(action=="add" && (uuid=="xxxx-xxxx"||uuid=="yyyy-yyyy")
system("sudo mount mount " name " /media/strontium -t vfat -o rw,exec")
uuid=""
}'