/dev/root가 누락된 경우 루트 장치를 어떻게 확인합니까?

/dev/root가 누락된 경우 루트 장치를 어떻게 확인합니까?

제가 지금 사용하고 있는 배포판인 Arch Linux ARM에서는 Linux가 초기 RAM 디스크 없이 실행됩니다. 즉, 루트 파일 시스템을 마운트하는 데 필요한 모든 작업을 커널이 수행한다는 의미입니다. 이 시스템은 SD 카드에 설치되며 해당 시스템이 상주하는 파일 시스템의 장치 노드를 결정하는 데 필요한 스크립트가 있습니다. 이 장치 노드는 장치를 부팅하는 방법(예: 이미 실행 중인 다른 장치에 연결)에 따라 변경될 수 있습니다.

를 사용하여 마운트 지점을 결정할 수 있습니다 df -k --output=target ${0} | sed "1d". 소스 장치를 확인하기 위해 df -k --output=source ${0} | sed "1d". Arch Linux로 부팅했다면 마지막 명령의 결과가 나옵니다 /dev/root.존재하지 않는 것. 물론 일부 시스템에서는 udev가 실제 루트 장치에 대한 심볼릭 링크를 생성 /dev/root하지만 내 시스템에서는 그렇게 하지 않습니다. 나~할 수 있었다내용을 살펴보지만 /proc/cmdline이는 커널 가동 시간 내내 동일하게 유지되므로 신뢰할 수 없음을 의미합니다.

을 얻을 때 /dev/root, 그 자리에 있는 실제 기본 블록 장치를 어떻게 확인할 수 있습니까?

답변1

답변여기 댓글들매우 간단합니다. 그냥 전화하세요:

findmnt -n -o SOURCE /

그것이 findmnt존재한다면 ...

답변2

명령 은 mount다음을 표시합니다.

mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p'

답변3

나는 찾았다이 블로그 게시물Linux에서 루트 장치와 기본 디스크를 찾는 데 매우 유용합니다.

CentOS/RHEL에서 lsblk제공되는 유틸리티를 설치 해야 합니다 . util-linux예를 들어 이러한 변형은 루트 장치의 디스크 이름을 제공합니다.

lsblk -oMOUNTPOINT,PKNAME -rn | awk '$1 ~ /^\/$/ { print $2 }'
sda3

findmnt동일한 패키지에서 실제 기본 루트 장치 이름을 제공합니다.

findmnt -oTARGET,SOURCE -rn /
/ /dev/mapper/vg01-lv_root

두 유틸리티에 대한 플래그는 셸에 -P적합한 형식으로 동일한 정보를 제공합니다 .eval

findmnt -oTARGET,SOURCE -Pn /
TARGET="/" SOURCE="/dev/mapper/vg01-lv_root"

lsblk -oMOUNTPOINT,PKNAME -Pn | grep 'MOUNTPOINT="/"'
MOUNTPOINT="/" PKNAME="sda3"

답변4

장치 주/부 번호를 사용 stat /하고 검사하거나 명령을 사용하여 rdev이를 자동으로 해석할 수 있습니다.

관련 정보