루트가 읽기 전용인 동안 작동이 멈춘 경우 upstart를 디버깅하는 방법은 무엇입니까?

루트가 읽기 전용인 동안 작동이 멈춘 경우 upstart를 디버깅하는 방법은 무엇입니까?

14.04.2 LTS에서 중단되거나 중단된 시스템 시작(upstart)을 디버깅하려고 합니다. 루트는 luks 컨테이너의 ext4 파일 시스템입니다. 파일 시스템이 깨끗한 상태입니다.

upstart-socket-bridge 이후 부팅 프로세스가 중지됩니다(특정 서비스 이후 반드시 그런 것은 아닙니다. 예를 들어 cup-daemon이 설치된 경우 그 이후에 중지되었습니다). init -v별로 도움이 되지도 않습니다. 다양한 서비스의 시작/중지를 단순히 기록하지 않는 유일한 로그 항목은 init 직전의 udev에 대한 항목입니다.

Begin: Running /scripts/init-bottom ... done.
udev exit failed --rc=2

(편집) 루트 rw를 다시 마운트하면 처음에는 항상 클린 부팅으로 이어지는 것처럼 보였지만 사실은 예측할 수 없었고 어느 ​​쪽이든 실패하고 성공적인 부팅을 했습니다. 뭐?

관찰: 모든 것이 괜찮은 것 같습니다. 시스템은 쓰기 가능한 루트를 다시 마운트하지 않거나 부팅을 계속하지 않습니다.

큐:부팅 프로세스가 중단되어 어떤 서비스에 문제가 있는지 어떻게 알 수 있나요?


업데이트: getty one을 통해 두 번째 셸을 생성하면 initctl list전화가 끊긴 후에도 실행할 수 있습니다. 실행 중인 작업은 다음과 같습니다.

mountnfs-bootclean.sh start/running
udev start/running, process 438
upstart-udev-bridge start/running, process 432
plymouth start/running, process 122
resolvconf start/running
ssh start/running, process 767 <-- this one was manually started
mountall start/running, process 337
mountkernfs.sh start/running
mountnfs.sh start/running
bootmisc.sh start/running
upstart-socket-bridge start/running, process 745**
cryptdisks start/running
mountdevsubfs.sh start/running
mtab.sh start/running
network-interface (lo) start/running
network-interface (eth0) start/running
plymouth-ready (startup) start/running, process 315
plymouth-upstart-bridge start/running, process 316
mountall-bootclean.sh start/running
network-interface-security (network-interface/eth0) start/running
network-interface-security (network-interface/lo) start/running

업데이트 2:

  • upstart 및 모든 종속 패킷을 다시 설치하는 것은 고통스럽고 효과가 없습니다.
  • 두 번째 콘솔을 사용하면 init 5중단된 시스템이 정상적으로 계속 부팅되도록 할 수 있습니다.
  • 이제 루트 rw를 수동으로 다시 마운트하더라도(또는 rw 커널 매개변수를 사용하더라도) 시스템이 중단됩니다. 루트 쓰기 가능 항목을 강제로 적용하면 문제가 해결되지 않는다는 초기 관찰이 잘못되었습니다.

해결 방법:

그것은 ureadahead자신의 잘못인 것 같습니다. 이를 제거하면 아무런 문제 없이 5개의 깨끗한 부팅이 이루어졌습니다. 나는 원래 질문에 대한 답을 알고 있거나 관심이 있는 사람을 위해 질문(및 100개의 추가 담당자)을 열어 두겠습니다. 무작위 시험이 아니었다면 어떻게 이것을 알아낼 수 있었습니까?

답변1

참고로 제가 시도한 (실패한) 디버그 단계는 다른 사람들에게 유용했습니다.

  • 부팅하는 다른 데비안 유사 시스템(예: 부팅 가능한 USB 펜 드라이브의 라이브 우분투)을 구입하고 chroot를 사용하여 검사된 시스템에 대한 구성 또는 소프트웨어 변경을 수행합니다. 다른 아키텍처를 가진 시스템에서 이 작업을 수행하려면 qemu-static을 사용하십시오.
  • 와 같은 독립 실행형 셸을 설치한 sash다음 커널 명령줄을 변경하고(grub에서 e 키를 사용하거나 grub.cfg/cmdline.txt를 편집) 을 추가하고 init=/bin/sash재부팅하고 해당 셸의 상황을 조사한 다음 exec init부팅을 계속하는 데만 사용합니다.
  • init스위치 와 함께 사용하여 -v로깅 증가
  • 쓰기 가능한 루트 파일 시스템을 조기에 마운트합니다(예: init를 실행하기 전에 커널 명령줄에 'rw'를 추가 mount -o remount,rw /). 이렇게 하면 더 많은 로깅이 가능해집니다.
  • 조사하다/var/log/upstart
  • init를 실행하기 전에 tty2에서 추가 터미널을 시작하십시오. 예를 들어 getty -n -l /bin/bash 38400 tty2 &이는 시스템 상태를 조사하는 데 도움이 됩니다(예: ps -Af, iotop).
  • initctl list어떤 서비스가 어떤 상태인지 파악하는 데 사용

관련 정보