새 드라이브에 GRUB를 설치하는 방법은 무엇입니까?

새 드라이브에 GRUB를 설치하는 방법은 무엇입니까?

CentOS를 실행하는 가상 머신이 있습니다.

기존 CentOS VM에 새 가상 디스크를 연결했으며 이제 새로 연결된 이 디스크에 GRUB를 설치하려고 합니다.

나중에 새로 준비된 부팅 가능한 하드 드라이브와 사용자 정의 루트 파일 시스템 및 커널을 사용하여 두 번째 가상 머신을 시작하겠습니다.

다음 단계를 시도했습니다.

  • 기존 작동 중인 CentOS 머신에 새 가상 디스크를 연결합니다.
  • 새로운 파티션이 생성됩니다 fdisk /dev/sdb. 파티션을 나눌 때 옵션 기본 파티션 및 파티션 번호 1과 같은 기본 옵션을 선택했습니다.
  • 디스크 포맷을 사용하세요 mkfs.ext3 /dev/sdb1.
  • 디스크를 에 마운트합니다 /media/new_drive.
  • GRUB이 설치되었습니다 grub-install /dev/sdb1 --root-directory=/media/new_drive/.

그 후 새로 준비된 하드 드라이브가 있는 두 번째 가상 머신이 부팅되지 않습니다. 오류가 발생합니다 could not read from the boot medium. MBR이 업데이트되지 않은 것 같지만 새 드라이브에 grub-installGRUB가 설치된 것을 볼 수 있습니다 ./boot/grub

하지만 무엇보다도 최악은 기존 CentOS GRUB이 손상되었다는 것입니다. CentOS VM이 중단되고 검은색 화면이 표시되고 유일한 텍스트는 GRUB.

grub-install /dev/sdb1sdb1의 MBR을 수정하지 않는 이유는 무엇입니까 ? 이것이 새 드라이브에 GRUB를 설치하는 올바른 방법이 아닙니까?

답변1

저는 grub2 전문가는 아닙니다(죄송합니다). 하지만 grub-install 행에 추가하면 grub 프롬프트로 부팅될 수 있는 파일이 생성되는 것을 --skip-fs-probe방지할 수 있다는 것을 발견했습니다 . /boot/grub/device.map이 매개변수가 없으면 grub-install은 사용자가 말한 대로 수행하지 않지만 자신이 사용자보다 더 똑똑하고 다른 작업을 수행할 수 있다고 생각합니다.

또 다른 사항은 올바른 grub 설치를 사용하는지 확인하는 것입니다(즉, 원래 grub이 아닌 grub2의 경우). Centos 내부에서는 문제가 되지 않지만 SystemRecoveryCD를 사용하면 두 버전 모두 사용할 수 있으므로 grub2-install.

@wurtel이 지적했듯이 파티션이 아닌 드라이브를 지정해야 합니다. Grub2는 전체 디스크 드라이브의 섹터 0에 설치됩니다. 이 "스텁"은 부팅 시 실행되지만 다음 부팅 단계를 위해 파일을 설치하려면 디스크의 위치를 ​​알아야 합니다. 이것이 바로 매개변수입니다. --root-directory을 위한. (제 생각에는.)

읽고 인터넷 검색을 통해 grub2 버전 1.99++에서는 실제로 작동하지 않는다는 man grub-install것을 알았습니다 --root-directory. 하지만 제 경험으로는 작동했습니다. 실제 부팅 디렉터리를 사용 --boot-directory하고 참조해야 하므로 다음이 제공됩니다.

grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot

답변2

부팅 파티션 과 루트 파티션 /boot으로 구성된 데비안 설치를 /새 드라이브로 옮겨 부팅 가능하게 만든 방법은 다음과 같습니다.GNU 그럽:

파티션 복제

  • 사용GParted 라이브 CD, 새 드라이브에 부팅 및 루트 파티션을 만듭니다.
  • GParted의 루트 콘솔을 사용하여 이전 부팅 파티션(이라고 가정 /dev/sda1)과 새 파티션( /dev/sdb1)을 마운트합니다.mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
  • 이전 부팅 파티션에서 새 부팅 파티션으로 데이터 복사: . cp -afv /mnt/oldBoot /mnt/newBoot:cp -afv
    • a"아카이브"를 의미하며 다음을 의미합니다.
      • 링크를 역참조하지 마세요
      • 재귀적 복사(예 -R: )
      • 모든 속성(타임스탬프, 소유자, 권한)을 유지합니다.
    • f: 필수, 기존 대상 파일을 열 수 없으면 삭제하고 다시 시도하세요.
    • v: 진행 중인 작업을 상세하게 설명합니다.
  • cp그러면 현재 복사된 파일과 진행 상황 을 보여주는 출력이 콘솔에 생성됩니다.
  • 이전 루트 파티션의 파일을 마운트하고 새 루트 파티션에 복사합니다.
    • 안전을 위해:umount /mnt/oldBoot && umount /mnt/newBoot
    • 이전 및 새 루트 파티션을 마운트합니다( /dev/sda2AND 가정 /dev/sdb2).mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
    • 이전 루트 파티션의 데이터를 새 루트 파티션에 복사합니다.cp -afv /mnt/oldRoot /mnt/newRoot
  • 편집하다파일 시스템 테이블시작 시 마운트할 파티션을 정의합니다(이 작업에는 Vim을 사용하겠습니다).
    • vi /etc/fstab

    • 여기서는 이전 파티션이 참조된다는 것을 알 수 있습니다. 새 파티션의 UUID 사용

    • 더 쉽게 복사하고 붙여넣을 수 있도록 모든 UUID를 fstab에 일시적으로 삽입할 수 있습니다.:r !blkid

    • 새 파티션의 UUID로 fstab의 항목을 변경합니다. 다음과 같아야 합니다.

       # <file system> <mount point> <type> <options> <dump> <pass>
       # Root partition
       UUID=76fd1ffd-fb96-4ab4-be1a-42f8e9223983 / ext4 errors=remount-ro 0 1
       # Boot partition
       UUID=e560e29e-8752-4b83-b1ee-4b86c0009f0b /boot ext2 defaults 0 2
      
    • blkid이전에 삽입한 fstab에서 출력 제거:r !blkid

GRUB 설치

  • GParted Live CD의 가상 파일 시스템을 마운트합니다:
    mount --bind /dev /mnt/newRoot/dev
    mount --bind /proc /mnt/newRoot/proc
    mount --bind /sys /mnt/newRoot/sys
  • GParted live CD의 GRUB 유틸리티를 루트 파티션에서 사용할 수 있도록 만듭니다.mount --bind /usr/ /mnt/newRoot/usr
  • GRUB는 구성을 다음 위치에 저장하므로 부팅 파티션을 루트 파티션에 마운트합니다 /boot.mount /dev/sdb1 /mnt/newRoot/boot
  • chroot /mnt/newRoot새 루트 파티션을 임시로 파일 시스템의 루트로 만드는 데 사용됩니다.
  • /boot/grub/grub.cfg다음 명령을 사용하여 GRUB 구성 파일을 생성합니다.update-grub2
  • 새 드라이브에 GRUB를 설치합니다 grub-install /dev/sdb. 여기서는 파티션 번호를 지정할 수 없습니다.
  • GParted 라이브 CD의 파일 시스템을 반환합니다.exit
  • 파티션을 마운트 해제합니다.umount /mnt/newRoot/*
  • 셧다운 머신
  • 여러 드라이브가 연결되어 있는 경우 최신 드라이브가 부팅 순서에서 첫 번째인지 확인하세요.
  • 기계를 시작하세요

이 지침은 다음에서 영감을 얻었습니다.Oaktreepeak.com에서 가져온 내용.

아니면 줄 수도 있어요클론속같은 목표를 달성하려고 노력하십시오.

관련 정보