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를 설치하는 올바른 방법이 아닙니까?
댓글
답변
저는 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에 임시로 삽입 할 수 있습니다. p> -
새 파티션의 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
- 삽입 한 fstab에서
-
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 도 같은 목표를 달성하려고합니다.
/dev/sdb1
는 그렇지 않습니다. BIOS가 MBR을 찾는 경우 '는/dev/sdb
즉, 디스크의 첫 번째 섹터입니다.grub-install /dev/sdb --root-directory=/media/new_drive/
를 사용해야한다는 뜻입니까?