CentOS로 실행되는 가상 박스가 있습니다.

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

나중에 사용자 지정 루트 파일 시스템 및 커널이있는 새로 준비된 부팅 가능한 하드 디스크가있는 두 번째 VM을 가져옵니다.

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

  • 기존 작동중인 CentOS 머신에 새 가상 디스크를 연결했습니다.
  • fdisk /dev/sdb로 새 파티션을 생성했습니다. div>. 파티션을 나누는 동안 기본 파티션, 파티션 번호 1 및 기타 기본 옵션을 선택했습니다.
  • mkfs.ext3 /dev/sdb1로 디스크를 포맷했습니다.
  • 디스크를 /media/new_drive에 마운트했습니다.
  • GRUB grub-install /dev/sdb1 --root-directory=/media/new_drive/를 설치했습니다.

이후 새로 준비된 하드 디스크가있는 두 번째 VM이 부팅되지 않았습니다. 오류가 발생했습니다 : could not read from the boot medium. grub-install 이후 MBR이 업데이트되지 않은 것 같지만 새 드라이브의 /boot/grub 아래에 GRUB가 설치된 것을 볼 수 있습니다.

하지만 최악의 경우 기존 CentOS GRUB가 손상되었습니다. CentOS VM이 중지되고 텍스트 만 GRUB 인 검은 색 화면이 표시됩니다.

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

댓글

  • /dev/sdb1는 그렇지 않습니다. BIOS가 MBR을 찾는 경우 '는 /dev/sdb 즉, 디스크의 첫 번째 섹터입니다.
  • sdb1 대신 grub-install /dev/sdb --root-directory=/media/new_drive/를 사용해야한다는 뜻입니까?
  • 예, 이것이 바로 @wurtel의 의미입니다
  • 예. ' 해당 위치에 적절한 루트 파일 시스템을 배치했다고 가정합니다 (그럽을 마운트하고 실행하는 사이에 해당 단계가 언급되어 있지 않음 ' -install).
  • / dev / sdb를 사용해 보겠습니다. 예, 루트 파일 시스템을 배치 할 때까지 ' 도착하지 않았습니다. grub 화면을 엽니 다.

답변

저는 grub2 전문가는 아니지만 (죄송합니다) --skip-fs-probe grub-install 행에 추가하면 grub 프롬프트로 부팅 할 수있는 /boot/grub/device.map 생성이 방지되는 것으로 나타났습니다. 매개 변수 grub-install은 사용자가 말하는 것을 수행하는 대신 사용자보다 영리하다고 생각하고 다른 작업을 수행 할 수 있습니다.

또 다른 것은 올바른 grub-install을 사용하고 있는지 확인하는 것입니다 (예 : 원래 grub이 아닌 grub2). Centos 내부에 있지만 SystemRecoveryCD를 사용하면 두 버전을 모두 사용할 수 있고 따라서 grub2-install를 사용해야합니다. 어려운 방법을 배웠습니다 …

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

man grub-install 읽기 및 인터넷 검색 --root-directory가 실제로는 grub2 버전 1.99 ++이지만 내 경험에서는 작동합니다. --boot-directory를 사용하고 실제 부팅 디렉토리를 참조해야하므로 다음과 같은 결과를 얻을 수 있습니다.

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

의견

  • 첫 번째 시도는 grub-install /dev/sdb 파티션 및 포맷없이 시도했지만 오류가 발생했습니다. 나중에 나는 항상 / dev / sdb1을 사용하고 있던 포맷 된 디스크로 분할 및 포맷 된 디스크로 시도했습니다. –skip-fs-probe
  • @Renjith oh 및 루트 디렉토리는 다음을 참조해야합니다. grub-install을 실행할 때 마운트 된 마운트 지점이므로 새 드라이브에 파티션을 마운트해야합니다. /mnt/sys2에서 grub-install 줄에 --root-directory=/mnt/sys2를 지정합니다. ' (내가 생각하는 많은 잡동사니처럼) 반 직관적이지만 작동 방식은 '입니다.
  • 내 대답을 다소 수정했습니다 …
  • 지금 당장 0.97을 사용하고 있습니다. '-skip-fs-probe를 지원하지 않습니다. . 그러나 그것 없이는 작동했습니다. sdb1이 실수였습니다.
  • 해결 해주셔서 기쁩니다. 최신 ' 반짝임 ' grub2. 저는 ' RedHat이 grub2로 이동하는 데 너무 느리다는 것을 깨닫지 못했습니다. CentOS 7은 grub2를 사용하지만 CentOS 6 (및 이전 버전)은 grub을 사용합니다.

답변

부팅 파티션 및 루트 파티션 /을 새 드라이브에 추가하고 GNU GRUB 를 사용하여 부팅 가능하게 만들었습니다.

복제 파티션

  • 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/sda2/dev/sdb2) : mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
    • 데이터 복사 이전 루트 파티션에서 새 루트 파티션으로 : cp -afv /mnt/oldRoot /mnt/newRoot
  • 파일 시스템 테이블 (Vim을 사용합니다) :
    • vi /etc/fstab

    • 여기서는 이전 파티션이 참조됩니다. 대신 새 파티션의 UUID를 사용하십시오.

    • :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` 
      • 삽입 한 fstab에서 blkid의 출력을 제거합니다. 이전에 :r !blkid
  • GRUB 설치

    • GParted 라이브 CD의 가상 파일 시스템 마운트 :

      mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys

    • Make 루트 파티션에서 사용할 수있는 GParted 라이브 CD의 GRUB 유틸리티 : mount --bind /usr/ /mnt/newRoot/usr

    • GRUB 이후 루트 파티션에 부트 파티션 마운트 구성은 /boot에 저장됩니다. mount /dev/sdb1 /mnt/newRoot/boot

    • 새 루트 파티션을 일시적으로 파일 시스템의 루트로 만듭니다.

    • /boot/grub/grub.cfg update-grub2

      사용

    • 새 드라이브에 GRUB를 설치합니다 : grub-install /dev/sdb. 여기서 파티션 번호를 지정해서는 안됩니다.

    • GParted 라이브 CD의 파일 시스템으로 돌아 가기 : exit

    • 파티션 마운트 해제 : umount /mnt/newRoot/*

    • 시스템 종료

    • 여러 드라이브가 연결되어있는 경우 새 드라이브가 부팅 순서에서 먼저 나오는지 확인하십시오.

    • 컴퓨터 시작

    이 지침은 oaktreepeak.com 에서 영감을 얻었습니다.

    또는 Clonezilla 도 같은 목표를 달성하려고합니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다