両方のデバイスが同じマウントポイントを共有するとsystemdエラーが発生する

両方のデバイスが同じマウントポイントを共有するとsystemdエラーが発生する

私は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を使用したくありません。私は以前これを使用したことsudo mount -aがあり、これは私のファイルを繰り返し/etc/fstab挿入されたすべてをインストールしました。

以前のように自分のドライブを手動でマウントできるように、システムマウント機能をオフにできますか?

答え1

いずれにしても、マウントポイントディレクトリ名がシステムファイル名に変換されるため、これらのシステム制限は認識されません。最も簡単な答えは、おそらく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

修正したら、systemdが変更を認識していることを確認することを/etc/fstab忘れないでください。sudo systemctl daemon-reload


アイテムを保存するには、/etc/fstab2番目のマウントポイントを最初のマウントポイントにするシンボリックリンク(たとえば)を使用できます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では、別々のマウントネームスペースで実行されているため動作しないため、udevdマウントを実行しても表示されません。まだこの名前空間の理由はわかりませんが、原則として /etc/systemd/system/systemd-udevd.service2行のファイルを作成してこの機能をオーバーライドできます。

.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=""
       }'

関連情報