USB가 /dev/sdb 대신 /dev/sda로 설정되었습니다.

USB가 /dev/sdb 대신 /dev/sda로 설정되었습니다.

저는 사용자 개입 없이 kickstart 파일을 사용하여 Red Hat 설치 프로그램(RHEL6.5)을 부팅하려고 했습니다. 킥스타트 파일을 올바르게 검색 /dev/sdb/fs.cfg하지만 USB가 킥스타트 파일로 인식되므로 /dev/sda실제로는 거기에 있습니다 /dev/sda/fs.cfg. 설치 프로그램이 이 대상을 수동으로 지정할 수 있지만 킥스타트 파일의 나머지 부분은 기본 하드 드라이브에 의존합니다 sda. 시작 파일을 편집하지 않고 이 작업을 수행하고 싶지만 꼭 필요한 작업이므로 기꺼이 수행하겠습니다.

sdb커널이 USB를 HD 로 인식하도록 강제하는 방법이 있습니까 sda? (커널이 난독화에 책임이 있다고 가정하지만 확실하지 않습니다.) 외부 드라이브(USB)를 선택하고 내부 드라이브(HD)를 강제하는 것이 sda이상해 보입니다 .sdb.

참고: 내 질문은 다음과 매우 유사합니다.이것, 내 시작 파일이 HD에 절대적으로 의존한다는 점만 제외하면sda

이 문제는 RHEL5.X 설치 프로그램이 아닌 RHEL6.5 설치 프로그램에서만 발생합니다(이전 버전의 RHEL6.X를 사용해 본 적이 없습니다). 제가 정말 알고 싶은 것은 버전마다 변경되는 이유입니다.

답변1

좋습니다. 시작 프로세스는 다음과 같습니다.

  • 펌웨어 > 부트로더아마도> 커널 ${parameters}> initramfs > 사용자 공간아마도

Redhat 설치 디스크델라쿠르스크립팅 시스템은 initramfs와 해당 시스템으로 구축 및 구성됩니다.파이썬설치 시스템은 최종 사용자 공간을 구성합니다.

장치 설정 처리를 담당 합니다 udev. 예를 들어 에서 장치 이름을 지정합니다 /dev. 하지만 이런 일은 거의 항상 일어납니다두 배init- initramfs에 한 번, 내부적으로 대상 루트 장치를 찾아서 설치할 준비가 되었을 때 다시 한 번 devfs.

작동 방식은 다음과 같습니다.

  • 부트 로더(또는 펌웨어)선택적 매개변수 세트와 선택적 initramfs 이미지를 사용하여 커널을 호출합니다. 매개변수 세트가 저장 /proc/cmdline되고 커널은 이해하지 못하는 매개변수를 무시합니다.

  • initramfs는 작동하는 Linux 사용자 공간입니다. 호출 시 전달된 이미지에서 내용 을 /추출했는지, 컴파일했는지 여부는 중요하지 않습니다. 커널 2.6부터는 항상 Linux 커널이 설치한 첫 번째 작동 루트 파일 시스템입니다. 이 시점부터 Linux 커널은 모든 것을 사용자 공간에 넘깁니다.

    • 대개(redhat의 dracut도 마찬가지입니다)initramfs에는 루트 장치를 찾아 자체적으로 마운트하는 데 꼭 필요한 것만 포함되어 있습니다. 일반적으로 포함되는 것은 busybox대상 루트 장치를 설치하는 데 필요한 커널 모듈뿐입니다.

    • 아마도 udev이 작업을 수행 해야 하므로 udev일반적으로 포함되며 자체적인 작은 규칙 세트가 있습니다.

    • 앞서 언급했듯이 initramfs는 자체적으로 작고 완전한 Linux 루트 파일 시스템입니다. 완전한 것은 다음과 같습니다: /bin /etc /dev /new_root /proc /sys init. 일반적으로 이러한 디렉토리의 내용에는 특이한 점은 없습니다. 거의 항상 a /bin/sh및 an이 있습니다 /etc/fstab.

    • 대부분 의 는 해석할 수 있는 커널 매개변수를 init구문 분석합니다 . /proc/cmdline매우 일반적인 것은 root=/dev/somedisk또는 root=UUID=somediskUUID또는 입니다 root=LABEL=somedisklabel. 이러한 매개변수를 해석하는 것은 커널이나 나중에 실행되는 최종 매개변수 가 아닌 initinitramfs입니다.root=...init(마지막 것이 아마도 다른 것을 잘 설명하지만). 이 매개변수를 승인하고 다음 위치에 설치합니다./new_root (또는 이전에 설치 준비에 사용된 이름 switchroot). udevinitramfs에 포함된 경우 initramfs 규칙 세트는 대상 디스크 항목의 /dev/...이름이 지정되는 방식을 결정하지만 이는 변경될 수 있습니다.

    • initramfs가 장치를 init성공적으로 찾아 마운트 하면 일반적 으로 /new_root그 안에 있는 무언가를 찾습니다. 따라서 해당 프로그램이 무엇이든 pid 1이 됩니다. 일반적으로 다음을 수행하는 제공된 프로그램을 사용하여 이 작업을 수행합니다 . 잠시 동안 설치하는 동안exec/new_root/bin/initswitch_rootbusyboxexec/new_root 초과하다 /. 프로세스는 다음 항목에 설명되어 있습니다.따라서 커널 문서:

    하지만 initramfsrootfs: pivot_rootrootfs를 사용할 수도 없고 umount사용할 수도 없습니다. 대신 rootfs의 모든 항목을 삭제하여 공간을 확보하세요.( find -xdev / -exec rm '{}' ';'), 새로운 루트로 rootfs 덮어쓰기( cd /newmount; mount --move . /; chroot .), stdin/stdout/stderr신규 /dev/consoleexec신규 에 첨부됩니다 init.

  • 방금 실행한 루트 장치는 init이제 자체 루트 파일 시스템을 채워야 합니다. udev자체 규칙 세트를 기반으로 자체 규칙 세트를 호출하고 설치한 다음 나머지 작업을 모두 수행합니다. 완료되면 컴퓨터를 사용할 수 있습니다.devfs/dev

너무 자세하게 설명해서 미안하지만 다음 진술이 왜 사실인지 설명하고 싶습니다.

  • 부트로더에서 제출하는 모든 커널 매개변수(예:root=/dev/sda 아니요initramfs가 완료된 후에도 /dev/sda동일한 내용에 액세스하게 됩니다 ./dev/sda/init

그래서 저는 이것을 할 수 있는 한 가지 방법이 udev여러분을 위한 것이라고 생각합니다.파이썬disk(실제로는 squashfs 아카이브일 수 있음)는 모든 USB 디스크를 다른 곳에 설정하도록 지시합니다. 하나 있다여기에 좋은 예가 있습니다:

KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{model}=="USB 2.0 Storage Device", SYMLINK+="usbhd%n"

해당 링크의 나머지 부분도 읽어보시면 정말 좋을 것 같습니다. USB 디스크 장치가 initramfs에 사용되도록 이를 수행할 수 있어야 합니다. /dev/sda따라서 부트로더 구성을 변경할 필요가 없지만 나중에 /dev/usba아나콘다 설치 시스템과 동일한 디스크에 대한 노드를 생성할 수 있습니다.

답변2

호스트 컴퓨터의 BIOS로 들어가 하드 드라이브와 이동식 드라이브의 순서를 다시 정렬합니다. 그러면 Linux 커널의 표시 순서가 조정됩니다.

답변3

반짝이는 새롭지만 오래된 45달러짜리 HP G60 노트북에도 같은 문제가 있습니다. 부팅 순서에서 새 SSD를 먼저 배치하여 USB를 에서 로 옮겼습니다 /dev/sda. /dev/sdb그런 다음 부팅할 때 BIOS에 들어가는 것과 마찬가지로 preBIOS 메뉴가 있는 ESC 키를 누르십시오. 그래서 F10을 눌러 BIOS로 들어가는 대신 F9를 눌러 부팅 옵션으로 들어갔습니다. 그런 다음 BIOS에 설정된 부팅 순서에 관계없이 USB에서 부팅하도록 수동으로 선택할 수 있습니다. 분명히 USB를 선택했고 SSD를 설치할 때 나타났습니다 /dev/sda.

오랫동안 검색해 보니 많은 사람들이 비슷한 문제에 직면했지만 아무도 이 제안을 내놓지 못했습니다. 내가 찾은 다른 방법보다 훨씬 간단합니다. 나는 이것을 직감적으로 발견했다.

답변4

RHEL6부터 설치 미디어에 레이블을 사용하면 일관되지 않은 커널 sdX 이름 지정 대신 고유한 이름으로 드라이브/HD에 액세스할 수 있습니다.

USB 드라이브에 파일 시스템을 생성할 때 e2label 또는 다른 방법을 사용하여 파일 시스템에 레이블을 지정해야 합니다.

레이블이 지정되면 해당 이름으로 USB에 액세스할 수 있습니다. 예: ks=hd:LABEL=yourname:/path/to/fs.ks

또한 이러한 유형의 이름 지정은 다른 위치에서도 사용될 수 있다는 점을 명심하십시오. 설치 미디어, 리포지토리 등

관련 정보