비결정적인 하드 드라이브 할당을 처리하는 방법은 무엇입니까?

비결정적인 하드 드라이브 할당을 처리하는 방법은 무엇입니까?

최근에 Arch Linux 컴퓨터에 또 다른 하드 드라이브를 설치했습니다. 처음 부팅했을 때 모든 것이 잘 작동했습니다. 다음에 컴퓨터를 다시 시작했지만 오류가 발생했습니다 /dev/sda2 not found.

보세요, 기본적으로 내 부팅 하드 드라이브는 때로는 sda이고 때로는 입니다 sdb. 이는 완전히 무작위인 것으로 보이며 BIOS에서 이를 무작위가 아닌 것으로 만드는 옵션이 표시되지 않습니다. 이 문제를 어떻게 해결합니까?

답변1

두 개의 하드 디스크가 서로 다른 인터페이스에 있고 서로 다른 드라이버로 제어되는 경우 Linux는 드라이버가 초기화되는 순서대로 이름을 지정합니다. 초기화가 병렬로 수행되는 경우 실제로 장치 이름 할당이 달라질 수 있습니다.

장치 이름은 다음에 의해 할당됩니다.udev. 귀하의 문제는 Arch 위키에 언급되어 있지만 거기에는 해결책이 없는 것 같습니다.

저는 Arch에 익숙하지 않기 때문에 Ubuntu에서 이 문제가 어떻게 해결되는지 설명하겠습니다. 기본 기능은 Linux 커널에서 제공되며 이는 동일하지만 이러한 기능이 Arch에서 다르게 작동하도록 하는 구성 설정이 있을 수 있습니다.

/dev/sda2부트로더에서 루트 장치( ) 설정으로 사용하는 대신 root=다음 구문을 사용하여 UUID 또는 레이블을 사용할 수 있습니다.

… /boot/vmlinuz root=UUID=01234567-89ab-cdef-0123-456789abcdef ro …
… /boot/vmlinuz root=LABEL=mylabel ro …

UUID는 파일 시스템을 고유하게 식별하므로 에 있는 파일 시스템의 UUID가 필요합니다 /dev/sda2. 우분투에서는 /dev/disk/by-uuid/01234567-89ab-cdef-0123-456789abcdef에 대한 심볼릭 링크입니다 /dev/sda2. 파일 시스템에 레이블(수동으로 설정, 고유성을 적용하는 것은 사용자의 몫)이 있는 경우 아래에 심볼릭 링크가 있습니다 /dev/disk/by-label. 레이블과 UUID 링크는 다음 udev 규칙에 의해 생성됩니다.

ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"

답변2

보세요지속적인 블록 장치 이름 지정.

개인적으로 라벨은 UUID의 고유성을 제공하면서도 사람이 읽을 수 있기 때문에 최고라고 생각합니다.

다음과 같은 fstab이 생성됩니다.

LABEL=boot /boot ext2 defaults 0 1
LABEL=swap swap swap defaults 0 0
LABEL=root / ext4 defaults 0 1

관련 정보