initramfs 프롬프트로 부팅을 수정하고 "mount : '/ etc / fstab'을 읽을 수 없습니다 : 해당 파일이나 디렉토리가 없습니다"및 "No init found"?


25

단일 파티션 전용 GPT 파티션 디스크, ext4 포맷, extlinux (버전 4.05)를 부트 로더로, Ubuntu Core 버전 13.10 amd64를 rootfs로, Ubuntu linux-image-3.11.0-18-generic을 커널로 사용하여 새 시스템 설치 부트 로더 설정을 생성하기위한 extlinux-update.

재부팅 후 결과 (여전히 KVM 기반 가상 머신 내부)는 (initramfs) 프롬프트이며 다음 메시지가 표시됩니다.

mount: can't read '/etc/fstab': No such file or directory
mount: mounting /dev on /root/dev failed: No such file or directory
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
The filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.

BusyBox는 v1.20.2입니다.

회귀 :

  • 파일 시스템이 확인되었습니다 fsck.ext4

루트 존재 확인

(initramfs) ls -l /dev/[hs]da*
ls: /dev/[hs]da*: No such file or directory

루트 부팅 인수

(initramfs) cat /proc/cmdline
initrd=/boot/initrd.img-3.11.0-18-generic ro quiet BOOT_IMAGE=/boot/vmlinuz-3.11.0-18-generic

로드 된 모듈 확인

(initramfs) cat /proc/modules
e1000 145368 0 - Live 0xffffffffa0000000

/ boot 폴더 내용

$ sudo ls -l boot
-rw------- 1 root root 3296162 Feb 18 22:37 System.map-3.11.0-18-generic
-rw-r--r-- 1 root root 1007681 Feb 18 22:37 abi-3.11.0-18-generic
-rw-r--r-- 1 root root  163258 Feb 18 22:37 config-3.11.0-18-generic
drwxr-xr-x 2 root root    4096 Mar 17 20:13 extlinux
-rw-r--r-- 1 root root 4995000 Mar 16 23:35 initrd.img-3.11.0-18-generic
-rw------- 1 root root 5634192 Feb 18 22:37 vmlinuz-3.11.0-18-generic

이 시스템을 기본 bash 프롬프트로 부팅하는 방법은 무엇입니까?


왜 두 개의 초기화 이미지입니까? 이 디스크를 실제 디스크에 넣고 부팅 해 볼 수 있습니까? Qemu와 EFI에는 문제가 있습니다. 예를 들어 EFI 부팅 펌웨어 이미지를 사용하지 않으면 전혀 멀지 않습니다.
mikeserv

그리고 당신이 원하는 모든 것이 bash 프롬프트라면, 당신은 항상 당신의 initramfs에 bash를 포함시킬 수있다.
mikeserv

실제로 우분투의 LARGE GPT 파티션을보고 완전히 비어있는 것으로 기억하고 있습니다. 재부팅시 Shift 키를 눌러 라이브 디스크로 grub을 선택하면 Efi 옵션을 선택할 수 있었고 그 후에 디스크가 있습니다.
mikeserv

답변:


11

root=/dev/sdaX옵션 을 설정하여 커널 부팅 매개 변수를 수정하십시오 . sdaX당신 /또는 root파티션 일 것입니다. 다음에 부팅 할 때 파일 시스템에 initramfs액세스 /etc/fstab하고 마운트 하기 전에 파티션을 마운트하려고 시도 함을 알 수 있습니다.

자세한 내용은 " initramfs에서 / etc / fstab을 사용합니까? "질문을 참조하십시오.


추가 root=/dev/sdaX 상황이 향상, 더 이상 존재하지 (initramfs)하지만 bash대신 로그인 프롬프트.
프로 백업

1
root=/dev/sdaX커널 부팅에 수동으로 추가 하는 것 외에도 제안 된 것으로 업데이트 /mnt/etc/default/extlinux하고 변경 EXTLINUX_ROOT=""하고 다시 EXTLINUX_ROOT="/dev/sdaX"실행 extlinux-update해야합니다.
프로 백업

10

이해해야 initramfs할 것은 파일 시스템이라는 것입니다. 커널 2.6 이후는,이다 기본적으로, 유일한 커널 부과 한 파일 시스템 (옆입니다 VFS, 떠나 틀림없이 컴퓨터에 또한 파일 시스템). 귀하 initramfs image는 디스크 이미지입니다.

당신은 내 initramfs image결정 배포는 루트 디스크가 발견되기 전에 요구하는 중요한 충분히 있었다 파일을 어떤 될 것입니다. 일반적으로 Busybox와 루트 장치를 찾아 마운트하는 데 필요한 모든 커널 모듈입니다. 이것은 당신을 위해 작동하지 않습니다.

여기에는 모든 미스터리가 없습니다. 터미널 프롬프트에서 길을 찾을 수 있다면 initramfs.먼저 탐색 할 수는 있지만 먼저 해독해야합니다.

가장 먼저 그리고 다시 한번-이것은 단지 /.Linux 루트 유형 일을하는 것은 Linux 루트입니다. 실제로 커널과 다른 파일에 있으면 실제로 두 번째 루트 장치입니다. 모든 리눅스 커널에는 기본적으로 비어있는 /모든 것이 포함 되어 있습니다.initramfs.

중요한initramfs 것은 실제 루트입니다. Linux 커널 init은 이후에 발생할 수있는 모든 문제에 대한 모든 책임을 실행 한 후 취소함으로써 사용자 공간을 초기화 합니다. 당신 init은 Busybox처럼 많은 것처럼 보입니다. 즉, 동작을 제어하는 ​​것은 함께 제공되는 쉘 스크립트를 편집하는 것만 큼 간단해야합니다.

그렇다면 init?거의 확실하게 찾을 수 없다는 오류는 init실제로 init쉘 스크립트를 통해 실제로 실행 되도록 지시받은 프로그램을 지칭합니다 .

나에게 가장 놀라운 것은 커널 의사 파일 시스템이 dev sys proc마운트되지 않는다는 것입니다. 이것은 매우 힘들거나 좋은 단서입니다. 커널 기능에 의문을 제기하는 KVM을 언급했지만, 어둡고 험난한 길을 가기 전에 먼저 다른 것을 시도해 볼 수 있습니까?

cd /root || mkdir /root

오류 메시지가 반복적으로 발생합니다.

그러한 파일이나 디렉토리가 없습니다

initramfs이미지 를 다시 작성해야하는 데 실패했습니다 . 라이브 디스크로 부팅하여 배포를 위해 제공하는 모든 도구를 실행하십시오. 아, 그리고 제발 확인 이 라이브 디스크에로드되어 EFI의 모드.

그래서 여기에 대한 유일한 진정한 예외는 initramfs - switchroot.

Linux 커널은 초기 사용자 공간과 initramfs루트 디스크 장치로 의 이동을 처리하기위한 매우 특별한 syscall을 제공합니다 . 먼저 루트 디스크를 마운트 지점에 마운트 initramfs한 다음 루트 파일 시스템을 피벗하여 작동합니다. initramfs's대상 마운트 지점이 root계속 신음하는 방식을 기반으로 가정합니다 . 왜 거기 있는지 확인하지 않습니까?

추가 조사를 위해서는 약간의 문제가 필요합니다. 부트 로더가 통과하도록 조정하십시오 ...

init=/bin/sh

... 커널 매개 변수로.


... 대상 마운트 지점이 루트입니다 ... 왜 있는지 확인하십시오. 나는 이것을 확인하는 방법을 가장 모호하게 생각하지 않았다.
프로 백업

더 이상 필요하지 않습니다. 당신은 bash를 가지고 있습니다. 그러나 여전히 kvm에 있습니까?
mikeserv

예, 나는 여전히 kvm에 있습니다.
Pro Backup

@ProBackup 만약 당신이 거기에 있다면 당신은 다른 사람에게 현상금을 줄 필요가 있습니다. 신경 쓰지 마라-당신은 분명히 이미 그렇게했다. 왜 두 개의 init 이미지를 지정해야하는지 궁금합니다. 왜 initrd와 boot입니까? 그게 뭐야? 또한 efibootmgr가상 머신의 프롬프트에서 무엇을 실행할 수 있는지 알고 싶습니다 .
mikeserv

unix.stackexchange.com/questions/120999/… 이유에 대한 새로운 SE 질문을했습니다. 참고 :이 KVM (Parallels Desktop v8)에는 BIOS 부팅 메시지로 인해 BIOS (UEFI 아님) 만 있다고 생각합니다.
Pro Backup

0

나는 같은 문제가 있었다. Alex가 말한 것은 맞습니다. 먼저 fstab을 조정했지만 도움이되지 않았습니다. 그래서 나는 grub을 확인했다. GRUB 메뉴에 액세스 할 수있는 경우

  • Linux, 시작하려는 항목 및 문제를 선택하십시오.
  • 'e'를 누르고 'boot_image'또는 'boot ... root'를 찾으십시오.
  • ' uuid '를 확인하십시오 .
  • 제 경우에는 잘못되었습니다. 'blkid'를 입력하여 initramfs로 그림을 만들고 Linux가 설치된 파티션을 uuid로 만듭니다.
  • 올바른 uuid를 blkid에서 grub-> boot_image로 붙여 넣습니다.

그게 내 문제를 해결했다. 재부팅 후 리눅스는 디스크 검사를 시작하는 데 더 오랜 시간이 필요했습니다. 그러나 이제 다시 작동합니다.

내가 당신을 도울 수 있기를 바랍니다.

문안 인사

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.