grub을 사용하여 외부 백업 드라이브에서 올바르게 부팅

grub을 사용하여 외부 백업 드라이브에서 올바르게 부팅

편집하다: 내 문제를 해결한 것 같습니다. 자세한 내용은 질문 하단을 참조하세요.

/외부 USB로 연결된 하드 드라이브에 모든 파일의 복사본이 있습니다. 이 백업이 작동하는지 테스트하기 위해 백업을 시도했습니다. 그러나 이것은 내가 예상했던 것보다 조금 더 어려웠습니다.

  1. 가상의 BIOS에서는 외부 HD를 부팅 장치로 선택했습니다. 그러나 이 장치를 선택하든 일반 드라이브를 부팅 장치로 선택하든 동일한 GRUB 메뉴가 나타납니다. 이는 외장 하드 드라이브에 GRUB를 수동으로 설치하는지 여부에 관계없이 발생합니다. 그래서 내 질문은 GRUB가 일반 부팅 드라이브에서 로드되는지 아니면 외부 드라이브에서 로드되는지가 중요한가입니다.

    • 외장 드라이브에 GRUB를 설치하지 않고 GRUB 명령줄을 사용하면 외장 드라이브가 로 표시되지만 (hd2,gpt1)GRUB를 외장 드라이브에 설치한 후에는 으로 표시되는 것을 발견했습니다 (hd0,gpt2).
  2. 제가 겪고 있는 어려움이 첫 번째 문제와 관련이 있을 수도 있지만 지정 후 부팅할 때 항상 찾을 수 없음으로 지정된 linux /boot/vmlinuz-linux root=/dev/sda2드라이브와 관련된 몇 가지 결함이 발생합니다. root장치 uuid를 통해 루트를 지정하는 경우에도 이런 일이 발생합니다. 내 문제는 내가 걱정할 필요가 있느냐는 것이다

    • /etc/fstab? 루트를 찾으려면 이를 변경해야 합니까? /etc/fstab내장 드라이브나 외장 드라이브의 파일을 변경해 도 문제가 됩니까? ( /etc/fstab루트 파티션 UUID가 있는 드라이브가 에 마운트되도록 외부 드라이브에서 수정했지만 /효과가 없었습니다.)

    • USB로 연결된 외장 하드 드라이브이기 때문에 뭔가 특별한 조치를 취해야 할까요? 일반 부팅 시 오류를 발견했지만 usb 2-4: device descriptor read/64, error -71이는 드라이브 기능에 눈에 띄는 영향을 미치지 않으므로 무시했습니다. 이 오류는 두 개의 별도 외부 HD 도크에서도 발생하므로 하드웨어 문제는 아닌 것 같습니다.


밝히다:

다음 명령을 사용하여 외부 백업을 만들었습니다.보그, 모든 파일의 복사본을 생성합니다. 이렇게 하면 전체 디스크가 복사되지 않으므로 예를 들어 grub을 설치할 때 해당 플래그를 사용하여 파티션을 dd수동으로 생성해야 합니다 .bios_grub

부팅을 시도할 때 grub에서 사용하는 정확한 명령은 다음과 같습니다.

set root=(hd0,gpt2)
linux vmlinuz-linux root=/dev/sda2
initrd  initramfs-linux.img
boot

성공적으로 시작했습니다.

나는 두 가지 방법을 모두 시도했지만 소용이 없었 linux /boot/vmlinuz-linux root=/dev/sda2습니다 linux /boot/vmlinuz-linux root=/dev/sdc2. 첫 번째는 드라이브가 grub에 표시되기 때문 (hd0,gpt2)이고 두 번째는 파티션이 /dev/sdc2정상적으로 부팅할 때와 같이 표시되기 때문입니다. 그러나 이들 중 어느 것도 작동하지 않으며 모두 나를 이상한 명령줄에 빠뜨립니다. /dev/sdb2어떤 이유로 올바른 UUID가 있는 파티션이 실제로 마운트되었음을 ​​발견했습니다 ! 사용하여 root=/dev/sdb2시스템을 정상적으로 부팅했습니다. 이전에 UUID를 지정하여 부팅하려는 시도가 여러 가지 이유(GRUB 설치 안 됨, UUID 철자 오류 등) 중 하나로 인해 실패한 것 같습니다.

이것은 정말 예상 밖의 일입니다. 내 원래 질문이 여전히 궁금합니다.1.GRUB가 설치된 드라이브가 여러 개 있는 경우 어떤 GRUB을 사용할지 어떻게 결정합니까?2.실제로 시작하는 동안 역할을 수행 합니까 /etc/fstab, 아니면 관련이 없습니까? —이 질문에 대한 답변에 대해 보상을 제공하겠습니다.

답변1

문제는 그것이 다음을 통해 root=/dev/sda2설치 되었기 때문입니다.device name독특하지 않음. 드라이브가 하나만 설치된 경우 일반적으로 항상 /dev/sda문제가 없는 것으로 표시됩니다. 그러나 두 번째 디스크를 마운트하거나 표시되는 모든 항목은 /dev/sd?순서가 보장되지 않으며 일반적 sda으로 이동되는 항목이 sdb... 엉망이 되어 매우 빨리 실패할 수 있기 때문입니다.

다음을 통해 설치하는 것이 가장 좋습니다.기기 ID별또는-uuid를 누르세요이것은 독특할 것입니다.

아래에는 /dev/disk/다음과 같은 폴더가 표시됩니다.

  • 보도자료 ID/
  • 태그로/
  • 우회로/
  • -uuid/를 통해

예를 들어 아래에는 다음 by-id/과 같은 링크가 표시됩니다.

여기에 아이디어를 제공하기 위한 내 /etc/fstab마운트가 있습니다. 올바른 유지를 위해 여분의 줄을 제거했습니다. by device-idGRUB 대신 EFI를 사용하고 있지만 원칙은 동일하며 Grub(grub 통합 부트 로더의 중요한 부분)을 사용하면 더 자세히 설명됩니다.

/dev/disk/by-id/scsi-35000cca070168a20-part2                    /           ext3    acl,user_xattr 1 1
/dev/disk/by-id/scsi-35000cca070168a20-part1                    /boot/efi   vfat    umask=0002,utf8=true 0 0
/dev/disk/by-id/scsi-36003048018e26e011d81ba1714e4c99f-part1    /data       xfs     defaults 1 0
/dev/disk/by-id/scsi-36003048018fa44011d57b61bbe1b8533-part1    /scratch    xfs     defaults 1 0
/dev/disk/by-id/scsi-36003048018e266011d81ba7e1afeadf6-part1    /bkup       xfs        defaults              1 2

참고: 이는 SLES 11.4에서 본 내용입니다. 저는 EFI를 사용하고 있기 때문에 GRUB이나 GRUB2에서 특정 항목을 찾아 수정해야 합니다. 여기 제 파일을 예로 들었습니다 /boot/efi/efi/SuSE/elilo.conf. 그 부분을 주목해주세요 root=. GRUB의 해당 콘텐츠를 by device-id또는 으로 수정하려고 합니다 by uuid. 그리고 메소드 /etc/fstab로만 수정하는 것을 잊지 마세요 .by-idby-uuid

# This file has been transformed by /sbin/elilo.
# Please do NOT edit here -- edit /etc/elilo.conf instead!
# Otherwise your changes will be lost e.g. during kernel-update.
#
# Modified by YaST2. Last modification on Mon Oct 15 11:04:42 EDT 2018
timeout = 80
##YaST - boot_efilabel = "SUSE Linux Enterprise Server 11 SP4"
default = SLES11_SP4_16
prompt

image = vmlinuz-3.0.101-108.77-default
###Don't change this comment - YaST2 identifier: Original name: linux###
    label = SLES11_SP4_16
    append = "splash=verbose showopts                 "
    initrd = initrd-3.0.101-108.77-default
    root = /dev/disk/by-id/scsi-35000cca070168a20-part2

image = vmlinuz-3.0.101-108.77-default
###Don't change this comment - YaST2 identifier: Original name: failsafe###
    label = Failsafe_15
    append = "showopts ide=nodma apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe                  "
    description = "Failsafe (3.0.101-108.77-default)"
    initrd = initrd-3.0.101-108.77-default
    root = /dev/disk/by-id/scsi-35000cca070168a20-part2

당신은 편지가 어디에 있든 원하지 boot=/dev/sd?않거나 root=/dev/sd?어디에도 없습니다 . ?또는 /dev/disk/by-id파티션 레이블을 설정하고 고유하다고 생각되는 경우에도 사용할 수 있습니다 /dev/disk/by-uuid.by-label

답변2

귀하의 질문에 대한 답변은 다음과 같습니다.

  • 일반적으로 사용되는 GRUB는 BIOS가 인식하는 디스크의 첫 번째 GRUB이거나 BIOS에서 가장 먼저 실행되도록 선택된 GRUB입니다. 드라이브의 MBR이 로드된 GRUB를 가리키기 때문입니다.

  • /etc/fstab은 마운트 및 파티셔닝 프로세스를 자동으로 실행하는 역할만 담당합니다. 커튼의 경우 fstab을 완전히 우회할 수 있습니다.

관련 정보