루트 파티션을 새 드라이브로 이동하고 해당 드라이브에서 부팅하도록 grub2를 설정하는 방법에 대한 제안이 있는 사람이 있습니까? grub-mkconfig에 내가 원하는 작업을 지시할 행운이 없는 것 같습니다(예: 새 루트에 chroot'int를 입력하면 모든 스크립트가 혼란스러워집니다).
배경저는 헤드리스 저전력 NAS에서 Debian Squeeze를 실행하고 있습니다. 현재 설정은 /
켜짐 sda0
및 /boot
꺼짐 (CF 카드)입니다. 회전이 지연되므로 별도 sde0
의 설정이 필요합니다 . 이제 모든 대형 디스크를 회전시키는 데 사용할 수 있는 오래된 2.5인치 IDE 디스크를 찾았습니다 ./boot
sd[a-d]
/
/boot
내가 시도한 것기본적으로 나는 갔다
mount -o rw /dev/sdf5 /mnt/newroot
cp -ax / /mnt/newroot
cp -ax /boot /mnt/newroot/boot
그런 다음 시도했습니다.
chroot /mnt/newroot
update-grub
그러나 이것이 실패하면 grub은 루트에게 마운트되었는지 묻습니다. 그런 다음 에서 /mnt/newroot/grub/grub.cfg
커널 이미지를 찾으려고 성의 없이 시도한 sdf5
다음 grub-install --root-directory=/mnt/newroot /dev/sdf
... 그러나 에서 부팅을 시도할 때 grub 구조 프롬프트가 표시되었습니다 sdf
.
내 백업 계획은 다시 설치하는 것이므로 추가 질문(이 항목에는 확인 표시가 없습니다): lvm2 및 mdadm 구성을 통과하려면 어떻게 해야 합니까? 모두 파일 시스템에 저장되어 있고 자동으로 검색됩니까? 아니면 직접 가져와야 합니까?
해결책(Maciej Piechotka에게 감사드립니다): Maciej가 지적했듯이 모든 grub 도구가 제대로 작동하려면 올바른 chroot가 필요합니다. 참고로 저는 이렇게 합니다.
janus@nasguld:/mnt/newroot$ sudo cp -ax / /mnt/newroot
janus@nasguld:/mnt/newroot$ sudo cp -ax /boot /mnt/newroot
이제 모든 파일이 복사되었습니다(참조:여기복제 전략에 대한 논의). etc/fstab
새 루트를 가리키도록 new를 수정합니다 .
janus@nasguld:/mnt/newroot$ diff -u etc/fstab.old etc/fstab
-UUID=399b6a6d-c067-4caf-bb3e-85317d66cf46 / ext3 errors=remount-ro 0 1
-UUID=b394b614-a977-4860-bbd5-7862d2b7e02a /boot ext3 defaults 0 2
+UUID=b9d62595-e95c-45b1-8a46-2c0b37fcf153 / ext3 noatime,errors=remount-ro 0 1
마지막으로 새 루트 및 chroot dev
에 마운트합니다.sys
proc
janus@nasguld:/mnt/newroot$ sudo mount -o bind /dev /mnt/newroot/dev
janus@nasguld:/mnt/newroot$ sudo mount -t proc none /mnt/newroot/proc
janus@nasguld:/mnt/newroot$ sudo mount -t sysfs none /mnt/newroot/sys
janus@nasguld:/mnt/newroot$ sudo parted /dev/sdb set 5 boot on
janus@nasguld:/mnt/newroot$ sudo chroot .
이제 우리는 보이는 대로 미래 루트로 루트가 변경되었습니다. Maciej에 따르면 호출만 해도 괜찮지 만 grub-install
부트로더를 설치하기 전에 update-grub
먼저 생성된 내용을 살펴보았습니다 . /boot/grub/grub.cfg
자동으로 업데이트되는지 모르시나요?
root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb
답변1
기본 파일 시스템을 마운트하고 chroot하는 동안 파일을 복사/수정합니다. 예:
- /개발자 (
mount -o bind /dev/ /path/to/chroot/dev
) - /프로세스(
mount -t proc none /path/to/chroot/proc
) - /시스템(
mount -t sysfs none /path/to/chroot/sys
)
IIRC는 Grub 2를 아치에 설치할 때, 그리고 Gentoo에 여러 번 설치할 때 저에게 효과적이었습니다. 그런 다음 chroot 이후의 명령은 /path/to/chroot
매우 간단합니다.
grub-install /dev/<boot_disk>
lvm2(나는 madm을 믿지만 사용하지 않음)부터 구성이 디스크에 저장됩니다. 장치를 검색하려면 읽어야 하는 몇 가지 구성이 있습니다. 장치가 표준 위치( /dev/sd*
또는 /dev/hd*
)에 있다고 가정하면 문제가 없습니다.
추신. 나는 실시간 시스템에 대한 간단한 cp를 신뢰하지 않을 것입니다. 왜냐하면 잘못될 수 있는 몇 가지 사항이 있기 때문입니다:
- 변경 사항
/etc/fstab
및 기타 유용한 파일을 잊어버렸습니다. - 접근 중 파일이 변경됨
- 쓰레기 처리(
/tmp
등)
답변2
chroot 없이 라이브 배포판에서 grub을 설치할 수 있습니다:
grub-install /dev/hda --root-directory=/mnt/guest/
답변3
그런데, Windows와 같은 파티션을 추가하는 경우 grub이 부팅 섹터에 쓰기를 원하지 않지만 컴퓨터가 부팅될 때 grub이 이에 대해 알 수 있도록 하려면 파티션을 다시 스캔하여 터미널에서 생성할 수 있습니다. 세션 아래와 같이 grub_mkconfig 명령을 사용하여 새 grub.cfg 파일을 생성합니다.
CD /부팅/grub
sudo cp grub.cfg ./grub.cfg.old
sudo grub_mkconfig -o ./grub.cfg
이제 현재 Linux 파티션(grub으로 부팅)에서 부팅하면 다른 파티션에 대해 알게 됩니다.