질문: Linux 부팅 중에 모든 블록 장치를 열거하는 특정 시간 인스턴스를 알고 싶습니다. 나는 블록 장치가 네트워크(iscsi와 같은)를 통해 제공되지 않고 FC를 통해 제공되거나 "다중 경로 장치"일 수도 있다고 가정합니다.
알아요:
스크립트를 작성하고 다음과 같이 설정하면
kernel.hotplug=MyScript를 복사하여 /etc/sysconfig/MyScript.modules에 배치합니다(.modules 확장자 참고).
열거되는 장치의 devpath 이름을 가져옵니다.
하지만 이 방법은 효율적이지 않습니다.
예: 블록 장치에서 다양한 유형의 서명을 수행하고 싶습니다.
그러나 블록 장치가 시스템에 추가될 때마다(특히 kobject가 생성/제거될 때마다) MyScript가 호출됩니다.
내가 하고 싶은 일은:
부팅 순서의 또 다른 예는 연결된 모든 블록 장치를 사용할 수 있다는 것을 알고 있으므로 내가 좋아하는 장치를 찾아 원하는 작업을 수행할 수 있다는 것입니다.
또한 시작 순서에서 매우 늦은 xyz.service가 활성화될 때까지 기다릴 수 없다는 점에 유의하세요.
편집: 시스템이 없다고 가정합니다. Linux는 이전(init) 부팅 방법을 사용합니다.
답변1
$ systemctl status systemd-udev-settle
● systemd-udev-settle.service - udev Wait for Complete Device Initialization
Loaded: loaded (/usr/lib/systemd/system/systemd-udev-settle.service; static; vendor preset: disabled)
$ systemctl --reverse list-dependencies systemd-udev-settle.service
systemd-udev-settle.service
● └─dmraid-activation.service
$ systemctl cat dmraid-activation.service
# /usr/lib/systemd/system/dmraid-activation.service
[Unit]
Description=Activation of DM RAID sets
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-udev-settle.service
Before=lvm2-activation-early.service cryptsetup.target local-fs-pre.target shutdown.target
Wants=systemd-udev-settle.service
위의 dmraid-activation.service에서 관련 줄을 복사해 보세요. 여기에는 DefaultDependencies=no
가능한 한 일찍 도착해야 한다고 주장하기 때문에 포함됩니다. 이에 대한 내용은 에 설명되어 있습니다 . man systemd.unit
참조 systemd.service
. 또한 읽어야 합니다 man bootup
.