두 장치가 동일한 마운트 지점을 공유할 때 systemd 오류 발생

두 장치가 동일한 마운트 지점을 공유할 때 systemd 오류 발생

방금 데비안 패키지 전체를 업데이트하고 설치했는데 특정 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/fstab두 번째 마운트 지점을 첫 번째 마운트 지점에 대한 심볼릭 링크로 만들 수 있습니다(예: ) 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.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=""
       }'

관련 정보