데비안 / Grub2 : 루트 파티션을 새 드라이브로 옮기시겠습니까?


30

루트 파티션을 새 드라이브로 옮기고 해당 드라이브에서 부팅하도록 grub2를 설정하는 방법에 대한 제안이 있습니까? grub-mkconfig에게 내가하고 싶은 일을 지시하는 것은 운이없는 것 같습니다 (예 : 새 루트에 chroot'int는 모든 스크립트를 혼란스럽게합니다).

배경 헤드리스 저전력 NAS에서 데비안 스퀴즈를 실행하고 있습니다. 현재 설정이 /켜져 sda0있고 /boot켜져 있습니다 sde0(CF 카드) : 지연된 스핀 업을 수행해야 /boot하므로 별도로 sd[a-d]필요했습니다. 지금은로 사용할 오래된 2.5 "IDE 디스크를 발견했습니다 /포함하여 /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에 커널 이미지 찾기 위해 sdf5a로 다음을 grub-install --root-directory=/mnt/newroot /dev/sdf. 그러나 나는 부팅을 시도했을 때 grub 구조 프롬프트를 보았습니다 sdf.

내 백업 계획은 단지 다시 설치하는 것이므로 보너스 질문 (이것에 대한 확인 표시 없음) : lvm2 및 mdadm 구성을 가져 오기 위해 어떻게해야합니까? 파일 시스템에 모두 저장되어 있습니까 (그리고 자동으로 검색됩니까) 아니면 직접 가져와야합니까?

해결책 (Maciej Piechotka 덕분에) : Maciej가 지적했듯이 모든 그럽 도구가 작동하려면 적절한 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

마지막으로, 마운트 dev, sys그리고 proc새로운 루트 및되는 chroot :

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 .

우리는 이제 보이는대로 정확하게 미래의 뿌리에 뿌리를 내 렸습니다. 마치에이에 따르면, 그냥 전화로 확인을해야 grub-installAN,하지만 내가 그랬어 update-grub생성을 살펴 얻을 첫번째 /boot/grub/grub.cfg부트 로더를 설치하기 전에. 자동으로 업데이트되는지 확실하지 않습니까?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb

의 내용 /etc/default/grub과의 정확한 사본을 게시하십시오 update-grub.
Gilles 'SO- 악마 그만'

(솔루션을 추가 한 후 생각) : 실제로 문제가 I가 업데이트되지했다는 것을 수 있습니다 /etc/fstab에서 chroot(이 일치 될 것 update-grub"마운트되지 \"불평). 다시이 작업을 수행 한 경우, chroot에 특수 파일 시스템을 마운트하지 않고 먼저 시도합니다.
Janus

참고 : 재부팅하기 전에 / mnt / newroot를 마운트 해제하는 것을 잊지 마십시오!
Giacomo Tesio

/ home을 hdd로 유지하면서 루트 파티션을 새로운 nvme 드라이브로 옮기는 방법에 대한 지침은 다음과 같습니다. lucasmanual.com/blog/…
Lucas

답변:


20

chroot하는 동안 기본 파일 시스템을 마운트하고 파일을 복사 / 수정하십시오.

  • / dev ( mount -o bind /dev/ /path/to/chroot/dev)
  • / proc ( mount -t proc none /path/to/chroot/proc)
  • / sys ( mount -t sysfs none /path/to/chroot/sys)

Grub 2를 아치에 설치하고 Gentoo에 여러 번 설치하는 동안 나를 위해 일한 IIRC. 그런 다음 chroot to /path/to/chrootcommand 후 간단히 다음과 같습니다.

grub-install /dev/<boot_disk>

lvm2에서 (그리고 나는 madm을 믿지만 그것을 사용하지는 않았다) 구성은 디스크에 저장된다. 장치를 발견하기 위해 읽어야 할 구성이 있습니다. 기기가 표준 위치 ( /dev/sd*또는 /dev/hd*) 에 있다고 가정하면 아무런 문제가 없습니다.


추신. 나는 잘못 될 수있는 여러 곳이 있기 때문에 라이브 시스템의 간단한 cp를 신뢰하지 않을 것입니다.

  • 변경 /etc/fstab및 기타 유용한 파일을 잊어 버렸습니다
  • 액세스하는 동안 파일이 변경되었습니다
  • 쓰레기 처리 /tmp

감사. 그래서 기본적으로, 당신은 내가 조잡한 chroot를하고 있다고 말합니다 :) 나는 적절한 chroot로 시도해 볼 것입니다. cp -ax이 오래된 하우투에 따르면 (아마도 단일 사용자 실행 수준으로 떨어 뜨린 후) 괜찮을 것입니다 : tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
Janus

매력을 일했다! 도움을 주셔서 대단히 감사합니다.
Janus

1
@Janus : 라이브 배포판의 데이터를 안전한쪽으로 복사하려고합니다. 그러나 그것이 효과가있어서 기쁩니다.
Maciej Piechotka

나는 update-grub전에해야했다 install-grub.
Aryeh Leib Taurog

3

chroot하지 않고 라이브 배포판에서 grub을 설치할 수 있습니다.

grub-install /dev/hda --root-directory=/mnt/guest/

감사. 나는 이것이 여기에서 작동하는지 확신하지 못한다. 내가 이해하는 것처럼 grub-installgrub 이미지 파일 만 업데이트하고 MBR을 씁니다. 특히 grub.cfg업데이트되지 않습니다. 위에서 언급했듯이 특수 디렉토리를 마운트하는 것은 과잉 일 수 있지만 여전히 chroot가 grub.cfg간단한 방법으로 업데이트하는 방법이라고 생각 합니까?
Janus

예, 이것은 나에게도 효과가 없었습니다. 당신은 update-grub일을해야하고 그 사람에게는없는 것이 있습니다 --root-directory.
Mitar

0

BTW 부트 섹터에서 grub이 쓰기를 원하지 않는 파티션 (예 : 창)을 추가하지만 컴퓨터가 부팅 될 때 grub이이를 알고 싶다면 파티션을 다시 스캔하고 생성 할 수 있습니다. 터미널 세션에서 다음과 같이 grub_mkconfig 명령을 사용하여 새 grub.cfg 파일

cd / boot / grub

sudo cp grub.cfg ./grub.cfg.old

sudo grub_mkconfig -o ./grub.cfg

이제 당신은 현재 리눅스 파티션에서 부팅 할 때 (그럽 부팅을 했음) 다른 파티션에 대해 알게 될 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.