젠투가 시작될 때 udev가 /dev/hda3을 생성하지 않는 문제를 해결하는 방법은 무엇입니까?

젠투가 시작될 때 udev가 /dev/hda3을 생성하지 않는 문제를 해결하는 방법은 무엇입니까?

내 오래된 젠투 노트북에 udev 문제가 있는 것 같습니다. 아마도 최신 소프트웨어를 사용하고 emerge, udev+kernel을 업그레이드하고, "udev/kernel을 업그레이드한 후에 이 작업을 수행하십시오"라는 메시지를 받고 "화면 출력을 보고 이 메시지를 읽고 시스템을 다시 시작하기 전에 이러한 사항을 처리하십시오." 불행하게도, 나는 물론 메시지를 확인하는 것을 잊어버렸고, 기계를 끄고, 집의 현재 위치로 물리적으로 옮겨서 시동을 걸었지만 아무데도 찾을 수 없었습니다 /dev/hda3.

/dev/hda3이제 시스템 부팅을 수동으로 생성 한 다음 계속하여(아래에 자세히 설명) 이 문제를 해결할 수 있었지만 init, 이 문제를 완전히 해결하는 방법에 대한 조언이 필요합니다(따라서 매번 아래 절차를 반복할 필요가 없습니다). 신병).

(누군가 내 젠투 컴퓨터에서 내가 설치한 패키지에 대한 설치 후 메시지를 모두 찾을 수 있는 위치를 알려준다면, udev 및 내가 읽어야 할 커널과 관련된 지침을 찾을 수 있습니다.)

관련 소프트웨어 버전:

젠투 강화 커널 2.6.36-r6(선호) 및 2.6.28-r9(종료 전 21개월). 아래에 설명된 지루한 수동 부팅 프로세스는 두 커널 버전 모두에서 작동하는 것으로 확인되었습니다. udev 패키지는 udev-151-r4입니다.

"루트 파일 시스템 확인" "단계에 도달할 때까지 부팅 시 모든 것이 괜찮아 보입니다(머신은 커널을 부팅하고, /proc, /sys 및 /dev를 마운트하고, udevd를 시작하고 uevents를 기반으로 /dev를 채우고, uevent를 처리하고, /dev/pts를 마운트합니다). .

거기에서 방출됩니다

Failed to open the device '/dev/hda3': No such file or directory

그런 다음 루트 비밀번호를 묻습니다(또는 계속하려면 Ctrl-D를 누르십시오).

내가 그것을 입력하면 쉘은 가 에 있고 그것은 에 있다고 mount알려줍니다 . 또한 쓰기 불가능(예: 읽기 전용/읽기 전용 파일 시스템) 에 대해 불평합니다 . 아직 출시가 완료되지 않았다는 점을 고려하면 이 모든 것이 이해가 됩니다.rootfs/dev/root/mount/etc/mtab

이렇게 하면 일반적으로 거기에 있어야 하는 , 또는 장치 가 ls /dev없음을 알 수 있습니다 (udev에서 해당 장치를 생성하길 원합니다). , 또는 장치 도 포함되어 있지 않으므로 최신 udev나 커널이 다른 디스크 장치 를 호출하기 위한 규칙을 변경하는 문제는 보이지 않습니다. 또한 디스크 장치가 "숨길" 수 있는 디렉터리도 없습니다 .hdahda1hda2hda3/devsdasda1sda2sda3/dev/disk

그래서 내 다음 (아마 더러운) 단계는 수동으로 를 만드는 것이었고 , hda( 나는 다른 젠투 서버 중 하나를 살짝 살펴 메이저 번호와 마이너 번호, 적절한 권한과 그룹 멤버십을 파악했습니다):hda1hda2hda3/dev

mknod /dev/hda b 3 0
mknod /dev/hda1 b 3 1
mknod /dev/hda2 b 3 2
mknod /dev/hda3 b 3 3
chmod 660 /dev/hda*
chgrp disk /dev/hda*

불행하게도 Ctrl-D를 실행하거나 exit여기에 쓰면 중단된 부팅 순서가 계속되지 않고 대신 재부팅이 시작됩니다(컴퓨터를 찾을 수 없음 상태로 전환 /dev/hda).저것불행하게도 이 문제에 대한 해결책은 없습니다.

부팅 직후 "I"를 누르고("i"도 시도) init다양한 초기화 스크립트(예: /proc, /sys 마운트 등) 실행을 시작하여 다른 해결 방법을 시도했지만 실패했습니다. 부팅 순서에 도달(실패)하기 전에 대화형 부팅 모드에서 /dev/hda3을 확인하려는 시도가 발생했습니다.

대신 계속해서 내 /dev/hda3장치를 사용하여 OS 파일 시스템을 마운트합니다.
mount -o remount -o rw /dev/hda3 /

이제 내 컴퓨터의 파일 시스템에 대한 쓰기 액세스 권한이 생겼습니다.일부이 상황을 해결하기 위한 옵션: 구성 파일 수정, 다양한 초기화 스크립트 및 하위 시스템 시작 등

한 가지 일을 해라아니요그래도 효과가 있었던 것은 런레벨을 변경하는 것이었습니다. 이유는 init 3오류 메시지와 함께 실패했기 때문입니다 init: /dev/initctl: No such file or directory. 나는 다른 Gentoo 서버를 다시 살펴보았고 이것이 /dev/initctl권한이 있고 속한 파이프라는 것을 알았으므로 다시 만들었습니다.600root:root

mknod /dev/initctl p chmod 600 /dev/initctl

지금은 init 3실패 하지만 약간 다르게 잠시 중단된 다음 메시지를 포기합니다 init: timeout opening/writing control channel /dev/initctl. 이는 원래 프로세스(프로세스 ID 1) 가 새로 생성된 프로세스를 읽기 위해 열지 init않았기 때문에 의미가 있습니다./dev/initctl

이제 init매뉴얼 페이지를 읽으면서 send가 닫혔다가 다시 열릴 SIGUSR것이라는 것을 깨달았습니다 .init/dev/initctl정확히필요한 것은 명령을 실행하여 kill -l모든 신호와 해당 번호(여기서 숫자 10이 표시됨) 목록을 SIGUSR1가져온 다음
kill -10 1
makereopen 명령을 실행하고 런레벨 3을 다시 입력하는 것입니다.init/dev/initctl
init 3

이제 init런레벨 3에 들어가서 많은 스크립트를 실행해 보세요. 불행하게도 이러한 스크립트는 모두 실패합니다 ERROR: cannot run syslog-ng until sysinit completes. 그래서 시스템을 재부팅하고(이제는 실제로 예상대로 작동합니다 init. /dev/initctl로그인한 다음 root질문을 발행했습니다 .) 전송된 지점 까지 reboot위의 단계(쓰기 가능으로 재설치 제외)를 반복했습니다 . 이제 좀 더 부드러운 방법으로 시작 순서를 복원하여 파일을 다시 읽도록 하려고 합니다 ./dev/hda3SIGUSR1initinit/etc/inittab

init q

아무것도 없다그런 일이 일어난 것 같습니다. 그래서 /etc/inittab이라는 이름으로 보이는 런레벨 항목을 어디서 찾았는지 조사해 보겠습니다 sysinit. 나는 위험을 감수하고 다시 실행했습니다.

init sysinit

이번에는 init사용 메시지에 대해 불평합니다. 다시 읽어보니 /etc/inittab항목이 매개변수로 호출되는 것을 보고 sysinit한 번 시도해 보기로 했습니다./sbin/rcsysinit저것:

/sbin/rc sysinit

지금시스템이 많은 서비스를 시작하려고 다시 시도합니다.그리고 그것은 효과가 있었습니다!/proc뿐만 아니라 설치를 위한 init 스크립트 가 다시 실행될 때 이미 설치되었는지 여부 /sys도 확인됩니다 (이는 코드에서 온전함과 오류 검사를 수행하고 문제가 발생할 때 그에 따라 조치를 취하는 것이 얼마나 중요한지 입증합니다) /dev) 특별한 경우). 이에 만족하여 /etc/inittab해당 항목에도 명령을 실행하기로 결정했습니다 bootwait. 그 항목에도 런레벨 문자나 숫자가 누락되었기 때문입니다.

/sbin/rc boot

마찬가지로 주로 네트워킹을 위해 여러 초기화 스크립트가 시작됩니다. 예상치 못한 오류는 보고되지 않았으므로 런레벨 3으로 다시 시도해 볼 수 있어 기뻤습니다.

init 3

init 스크립트가 완료되면 머신이 부팅되고 루트로 로그인할 수 있습니다(이론적으로는 이 혼란의 근본 원인을 해결합니다)!

답변1

커널을 다시 컴파일하고 설정되지 않았는지, 설정되지 않았는지 확인 CONFIG_SYSFS_DEPRECATED했습니다 CONFIG_SYSFS_DEPRECATED_V2.

그러나 몇 번의 CONFIG_IDE설정되지 않은 재시도(및 하드 드라이브용 커널을 찾지 못한 후) 후에는CONFIG_IDE 놓다더 이상 사용되지 않는 ATA/ATAPI 지원에서 더 많은 커널 구성 옵션을 찾을 수 있습니다. 다시 한 번 (/dev/hda 감지가 작동하는) 다른 서버를 살펴보고 누락된 ATA/ATAPI 관련 커널 옵션을 추가했습니다. 어느실제로는 눈치채지 못한 옵션을 추가했는데, ATA/ATAPI에서 활성화된 모든 옵션 목록은 다음과 같습니다. CONFIG_IDE_GD
CONFIG_IDE_GD_ATA
CONFIG_IDE_PROC_FS
CONFIG_IDE_GENERIC
CONFIG_IDE_PCIBUS_ORDER
CONFIG_BLK_DEV_GENERIC
CONFIG_BLK_DEV_PIIX

또한 직렬 ATA 및 병렬 ATA에 대한 지원도 비활성화했습니다.

그래서지금부팅하고 내 장치를 성공적으로 찾는 커널이 있습니다 /dev/hda3.

나는 이것이 더 이상 사용되지 않는 ATA/ATAPI 커널 지원에 의존하는 나쁜 습관이라는 것을 알고 있습니다.아니요보다 현대적인 SATA/PATA 코어 지원을 사용합니다. 결국 SATA/PATA로 마이그레이션해야 했습니다. 하지만 지금은 행복합니다(그리고 내 Linux 시스템에 대해 더 많이 알게 되었습니다).

(질문을 게시한 후 이에 답변하고 내 답변을 허용된 답변으로 선택했다면 사과드립니다. 이 답변/질문이 여전히 U&L에 유용한 기여가 되기를 바랍니다.)

관련 정보