systemd의 공격적인 비상 쉘 동작을 비활성화하는 방법은 무엇입니까?

systemd의 공격적인 비상 쉘 동작을 비활성화하는 방법은 무엇입니까?

기본적으로 systemd는 약간의 오류가 발생하면 비상 쉘에 들어갑니다. 예를 들어 fstab의 마운트 중 하나가 어떤 이유로 실패하면 시스템이 즉시 부팅되지 않습니다. 저는 수십 개의 서로 다른 생산 시스템을 관리하고 있는데 이러한 행동이 매우 파괴적이라고 생각합니다. (실제로 이것은 중대한 디자인 실패라고 생각하지만 이는 개인적인 의견입니다.)

시스템 시작 탄력성을 개선하고 싶습니다. 최상의 시나리오는 드라이버, 마운트 등이 부족하여 시스템이 항상 부팅되어야 한다는 것입니다. 주어진 오류로 인해 콘솔 로그인이 절대적으로 불가능하지 않는 한 비상 쉘을 폐기하면 안 됩니다(경고만 표시됨). 달릴 수 있다면 달려야 한다.

나는 systemd가 /etc/fstab에서 *.mount 파일을 자동으로 생성한다는 것을 알고 있으며 더 작은 x-systemd.device 시간 초과로 nofail 옵션을 사용할 수 있습니다(또는 관련 .mount 파일을 직접 정의할 수 있습니다). 그러나 이것이 내 문제를 해결하지는 못합니다. 시스템을 더욱 탄력적으로 만들고 싶습니다. 매번 fstab을 "패치"하는 것은 그다지 편리하지 않으며 내 시스템에 문제를 일으킬 수 있는 다른 가능한 "문제"가 얼마나 많이 있는지 잘 모르겠습니다. system 어딘가의 일부 개발자가 이것이 충분히 중요하다고 생각하기 때문에 시작할 수 없습니다.

어떤 면에서 나는 시스템이 부팅 프로세스를 방해할 만큼 심각한 문제를 결정하도록 하지 않고 내 컴퓨터에 대한 제어권을 다시 얻고 싶습니다. 가능합니까?

답변1

말 그대로 설치가 실패한 것일 뿐이며 변경해야 할 전부입니다.

따라서 귀하의 요청 편지에 응답하기 쉽습니다. 포함된 파일을 만듭니다.

# /etc/systemd/system/local-fs.target.d/nofail.conf

# Clear OnFailure= (set it to nothing)
[Unit]
OnFailure=

나는 이것이 Linux sysvinit이 이미 부분적인 실패 조건을 허용함으로써 겪고 있는 문제에 새로운 문제를 추가하지 않을 것이라고 믿습니다.


그런데 당신은 또한 방법을 지적했습니다.systemd는 지정된 블록 장치가 사용 가능해질 때까지 기다려야 합니다. 전체 fstab 생성기를 대체하지 않고는 이를 구성할 수 있는 방법이 없습니다.https://www.freedesktop.org/software/systemd/man/systemd.generator.html

널리 사용되지 않는 대량의 코드가 여기에 버려지면 시스템의 탄력성이 향상될 것 같지 않습니다. 가장 가까운 해결책은 기존 fstab 생성기를 패치하는 것이라고 생각합니다. 그것은 복잡하지 않으며 당신이 그것을 벗어나거나 주요 변경 사항을 따라갈 수 있을지 의심됩니다.

기술적으로 배포판에 독립 실행형 mountallsysvinit 스크립트가 있는 경우 이를 연결해 볼 수 있습니다. 그러나 이로 인해 부팅 프로세스가 크게 변경됩니다.포크의. 나는 이 접근 방식을 권장하지 않습니다.


https://unix.stackexchange.com/a/393711/29483

유닛 파일을 검색하는 경우 emergency.target부팅 을 .mount. local-fs.target또는 initramfs가 systemd를 사용하는 경우 initramfs가 루트 파일 시스템을 마운트할 수 없는 경우.

local-fs.target가지다 OnFailure=emergency.target. 로컬 파일 시스템의 단위가 local-fs.target의 Requires 목록에 자동으로 추가되기 때문에 실패합니다(존재하지 않는 한 DefaultDependencies=no).

$ systemctl show --property Requires local-fs.target
Requires=-.mount home.mount boot.mount boot-efi.mount

답변2

noauto해당 항목에 마운트 옵션을 추가하여 부팅 작업에 중요하지 않은 파일 시스템의 자동 마운트를 끕니다 /etc/fstab.

/dev/sdxy /u01 nfs defaults 0 0

도착하다:

/dev/sdyx /u01 nfs noauto 0 0

그런 다음 부팅 후 다음 줄을 사용하여 파일 시스템을 마운트합니다 /etc/rc.local.

mount /u01

이 예에서는 NFS를 사용하지만 파일 서버에서 가져온 LUN에서도 작동합니다.

답변3

어쩌면 이것을 시도해 볼 수 있을까요?

systemctl mask emergency.service
systemctl mask emergency.target

관련 정보