실제로 기다리고 있는 시스템 *.device 장치는 무엇입니까?

실제로 기다리고 있는 시스템 *.device 장치는 무엇입니까?

systemd가 파일 시스템을 마운트하려고 하면 시스템이 중단됩니다. 종속성 시간 초과로 인해 실패합니다. 종속성은 dev-disk-by\x2dlabel-cb\x2drootfs.device설치되는 장치가 있는 위치 입니다 /dev/disk/by-label/cb-rootfs.

systemd[1]: dev-disk-by\x2dlabel-cb\x2drootfs.device: Job dev-disk-by\x2dlabel-cb\x2drootfs.device/start timed out.

시스템 설치를 방해하는 것은 없습니다.

mount -av

따라서 이 경우 systemd는 장치가 이미 거기에 있고 마운트할 준비가 되었기 때문에 잘못된 것을 기다리고 있는 것 같습니다.


상황을 복잡하게 만드는 것은 루트 파일 시스템이 동일한 장치를 포함하는 오버레이 파일이라는 점입니다. 간단히 말해서 initramfs는 다음을 수행합니다.

mount /dev/disk/by-label/cb-rootfs /host
mount -o loop /host/rootfs/foo.squashfs /ro
mount -t overlay overlay lowerdir=/ro,upperdir=/host/writable,workdir=/host/workdir /root

/root따라서 systemd가 마운트를 시작할 수 있도록 루트 파일 시스템이 준비되었습니다 /etc/fstab.

그런 다음 /etc/fstab마운트를 시도하십시오.

/dev/disk/by-label/cb-rootfs /host ext4 defaults 0 0

내가 말했듯이, 나는 할 수 mount -av있고 리눅스는 `/dev/disk/by-label/cb-rootfs.dll'을 마운트하는 데 전혀 문제가 없습니다. 그러나 systemd는 어떻게든 준비될 때까지 끝없이 기다리고 있는 것 같습니다.

systemd 무엇을 기다리고 계십니까?이렇게 기다리지 않으려면 어떻게 해야 합니까?

답변1

systemd 메일링 리스트에 대한 내 질문에 대한 답변으로 다음과 같은 내용을 받았습니다.이 응답:

만타 미쿨레나스

.장치 단위 대기우데브장치 추가에 대한 uevent를 브로드캐스트합니다. 이는 udev가 1. 초기 커널 uevent(실제 또는 systemd-udev-trigger.service에 의해 생성됨)를 수신하고 2. 장치에 대한 모든 .rules 처리를 완료할 때 발생합니다(즉, RUN = all에서 의미) 시작된 규칙은 종료되어야 합니다. 등).

udev 규칙에 TAG+="systemd" 태그가 지정된 장치만 .device 단위를 생성합니다. 일반적으로 99-systemd.rules는 이를 디스크 장치에 추가합니다.

규칙에 따라 장치가 ENV{SYSTEMD_READY}="0"으로 표시된 경우 .device 장치는 다른 이벤트가 해당 장치를 제거할 때까지 계속 대기합니다.

내 경우에는 udev가 올바르게 설치되지 않았거나 손상된 것으로 밝혀져 /dev에 있는 장치를 사용할 수 있음에도 불구하고 systemd는 여전히 udev의 신호를 기다리고 있었습니다.

udev를 다시 설치하면 문제가 해결되었습니다.

관련 정보