NVMe 장치의 루트 파일 시스템

NVMe 장치의 루트 파일 시스템

Intel 750 NVMe 드라이브가 있습니다. 잘 작동합니다. 글쎄요..그렇네요. 이 장치를 루트 파일 시스템으로 사용하고 싶습니다.

내 BIOS는 NVMe 장치를 지원하지 않습니다.

  1. 모듈이 아닌 커널에서 nvme 드라이버를 활성화했습니다. nmve 장치를 설치할 수 있습니다. 루트 파일 시스템을 여기에 복사했습니다.

이 장치를 grub2에서 루트 파일 시스템으로 사용하려고 하면 알 수 없는 장치가 나타납니다.

커널 및 매개변수에 대한 grub2 라인은 다음과 같습니다.

linux   /boot/kernel-4.1.6-gentoo root=/dev/nvme0n1p1 ro quiet

왜 이런거야? 드라이버는 커널에 있습니다. 모듈이 아닙니다. 루트 파일 시스템에서는 아무것도 필요하지 않습니다. /dev/nvme0n1p1에 액세스하기 위해 BIOS를 사용하고 있습니까?

  1. 두 번째 시도는 initramfs를 사용하는 것이었습니다. 나는 initramfs를 생성하기 위해 genkernel을 사용합니다.

    /dev/nvme0n1p1에도 이 문제가 있습니다. initramfs를 사용하여 Linux로 부팅합니다. 그러나 linuxrc 스크립트를 통해 실제 루트 파일 시스템을 마운트하려고 하면 블록 장치 확인에 실패합니다.

.... 블록 장치 또는 /dev/nfs 확인 elif [ -b "${REAL_ROOT}" ] || ["${REAL_ROOT}"="/dev/nfs"] ...

REAL_ROOT는 dev/nvme0n1p1로 설정됩니다. (디버깅 코드를 추가했습니다.)

/dev/nvme0n1p1을 마운트하도록 위 스크립트를 수정했지만 이 역시 실패했습니다. 거기에 없습니다.

이상한 점은... 실패한 후 사용자에게 루트 파일 시스템으로 이동하라는 메시지가 표시된다는 것입니다. 그리고... "/dev/nvme0n1p1"을 입력하면 제대로 작동합니다. 부츠.

또한, 그것은 당신을 쉘로 떨어뜨립니다. 그리고 /dev/nvme0n1p1이 거기에 있습니다... 뿐만 아니라 테스트도 합니다.

elif [ -b "${REAL_ROOT}" ]

껍질을 통해.

그래서 #1에서 무슨 일이 일어났나요? 이것이 작동해야합니까? BIOS를 사용하고 있습니까(내 BIOS가 NVMe를 지원하지 않기 때문에 실패합니다)?

#2는 이상하고 버그처럼 보입니다. 즉...그렇다면 누가 NVMe를 루트 장치로 사용할 수 있습니까? Google이 내 검색에서 무언가를 반환할 것이라고 확신합니다.

답변1

Linux 커널의 다른 많은 MTD 장치와 마찬가지로 NVMe 장치는 비동기 초기화를 사용합니다. 커널이 컨트롤러를 발견한 후 블록 계층은 파티션 스캔을 시작하지만 커널은 (기본적으로) 기다리지 않습니다. 이는 커널이 루트 파일 시스템을 마운트하려고 할 때 파티션 레이아웃을 아직 알 수 없기 때문에 그러한 장치에 루트 파일 시스템을 마운트하려는 시도가 실패하거나 좋지 않을 것임을 의미합니다.

피할 수 없는 패닉을 피하기 위해 서두르지 않고 실제로 루트 장치가 나타날 때까지 커널이 기다리도록 하려면 rootwait부트로더/임베디드 명령줄에 옵션을 전달해야 합니다( rootdelay명시적인 시간 제한을 사용하는 것도 또 다른 옵션이지만 rootwait확실히 더 간단하고 더 좋습니다). 안전).

문제는 커널을 직접 부팅할 때만 발생합니다. initramfs 활성화는 파티션 스캔이 완료되고 모든 파티션이 등록되어 사용 가능하도록 초기화 작업이 완료되는지(또는 충분한 지연이 발생할 수 있는지 확실하지 않음)를 보장하기 때문입니다.

관련 정보