Debian / Grub2: Przenosisz partycję root na nowy dysk?


30

Czy ktoś ma sugestie, jak przenieść partycję główną na nowy dysk i skonfigurować grub2, aby uruchamiał się na tym dysku? Wydaje mi się, że nie mam szczęścia instruować grub-mkconfig, co mam robić (np. Chroot'int w moim nowym katalogu głównym po prostu myli wszystkie skrypty).

Kontekst Używam Debian Squeeze na bezgłowym NAS o niskiej mocy. Moja obecna konfiguracja jest /włączona sda0i /bootwłączona sde0(karta CF): Potrzebowałem osobnego, /bootponieważ sd[a-d]muszę wykonać opóźnione rozpinanie. Teraz znalazłem stary 2,5-calowy dysk IDE, którego można użyć jako /włącznie, /bootaby umożliwić mi obrócenie wszystkich dużych dysków.

Co próbowałem Zasadniczo poszedłem

mount -o rw /dev/sdf5 /mnt/newroot
cp -ax / /mnt/newroot
cp -ax /boot /mnt/newroot/boot

Potem spróbowałem

chroot /mnt/newroot
update-grub

Ale nie udało się, gdy grub zapytał, czy root został zamontowany. Potem zrobiłem beznadziejną próbę ustawienia /mnt/newroot/grub/grub.cfgobrazu jądra sdf5, a następnie grub-install --root-directory=/mnt/newroot /dev/sdf. Ale to właśnie przyniosło mi monit ratowania gruba, gdy próbowałem uruchomić komputer sdf.

Mój plan tworzenia kopii zapasowych to po prostu ponowna instalacja, więc pytanie dodatkowe (bez zaznaczeń dla tego): Co muszę zrobić, aby uzyskać konfigurację lvm2 i mdadm? Czy to wszystko jest przechowywane w systemach plików (i czy zostanie automatycznie wykryte), czy też muszę sam to wziąć?

Rozwiązanie (podziękowania dla Macieja Piechotki): Jak podkreśla Maciej, potrzebuję odpowiedniego chroota, aby wszystkie narzędzia grub działały. Dla porównania, tak to zrobiłem:

janus@nasguld:/mnt/newroot$ sudo cp -ax / /mnt/newroot
janus@nasguld:/mnt/newroot$ sudo cp -ax /boot /mnt/newroot

Wszystkie pliki są teraz kopiowane (zobacz tutaj omówienie strategii kopiowania). Napraw nowy, etc/fstababy wskazywał na nowy katalog główny:

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

Wreszcie, zamontować dev, sysa procdo nowego korzenia i 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 .

Jesteśmy teraz chrootowani do przyszłego katalogu głównego dokładnie tak, jak będzie wyglądać. Według Macieja wystarczy zadzwonić grub-install, ale po update-grubraz pierwszy zapoznałem się z wygenerowanym /boot/grub/grub.cfgprzed instalacją bootloadera. Nie jestem pewien, czy zostanie automatycznie zaktualizowany?

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

Opublikuj treść /etc/default/grubi dokładną transkrypcję z update-grub.
— Gilles „SO- przestań być zły”

(myśli po dodaniu rozwiązania): Być może problem polegał na tym, że nie zaktualizowałem /etc/fstabgo chroot(byłoby to zgodne z update-grubnarzekaniem, że „\ nie jest zamontowany”). Gdybym miał to zrobić ponownie, najpierw spróbowałbym bez kłopotania się montowaniem specjalnych systemów plików w chroot.
— Janus

tylko uwaga: nie zapomnij odmontować / mnt / newroot przed ponownym uruchomieniem!
— Giacomo Tesio

Oto instrukcje, jak przenieść partycję root / na nowy dysk nvme, zachowując / home na dysku twardym. lucasmanual.com/blog/…
— Lucas

Odpowiedzi:


20

Montuj podstawowe systemy plików i kopiuj / modyfikuj pliki podczas chrootowania, np .:

  • / 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)

IIRC, który działał dla mnie podczas instalowania Grub 2 w arch i wiele razy na Gentoo. Potem po chroot do /path/to/chrootdowodzenia było po prostu:

grub-install /dev/<boot_disk>

Począwszy od lvm2 (i wierzę w szaleństwo, ale go nie użyłem) konfiguracja jest przechowywana na dysku. Istnieje konfiguracja, którą należy przeczytać, aby odkryć urządzenia. Zakładając, że twoje urządzenia znajdują się w standardowych lokalizacjach ( /dev/sd*lub /dev/hd*), nie powinno być problemu.


PS. Nie ufałbym prostemu cp systemu na żywo, ponieważ istnieje kilka miejsc, w których może się nie udać:

  • Zapomniałem zmienić /etc/fstabi inne przydatne pliki
  • Pliki zmienione podczas dostępu
  • Radzenie sobie ze śmieciami ( /tmpitp.)

Dzięki. Więc w zasadzie mówisz, że robię niechlujnego chroota :) Spróbuję z odpowiednim chrootem. cp -axpowinno być w porządku (może po przejściu do poziomu uruchamiania dla jednego użytkownika) zgodnie z tym starym howto: tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
— Janus

Zadziałał urok! Dziękuję bardzo za pomoc.
— Janus

1
@Janus: Skopiowałbym dane z dystrybucji Live, aby być bezpiecznym. Cieszę się, że to zadziałało.
— Maciej Piechotka,

Musiałem to zrobić update-grubwcześniej install-grub.
— Aryeh Leib Taurog

3

możesz zainstalować gruba z live distro bez chrootowania:

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

Dzięki. Nie jestem pewien, czy to zadziała tutaj: jak rozumiem, grub-installaktualizuje tylko pliki obrazu grub i zapisuje MBR: W szczególności grub.cfgnie jest aktualizowany. Jak wspomniałem powyżej, montowanie specjalnych katalogów może być przesadą, ale nadal uważam, że chroot to sposób na aktualizację grub.cfgw prosty sposób?
— Janus

Tak, to też nie działało dla mnie. Musisz iść update-grubdo pracy, a tego nie ma --root-directorylub coś, nie?
— Mitar

0

BTW, jeśli dodajesz partycję (taką jak Windows), na której nie chcesz, aby grub napisał w sektorze rozruchowym, ale chcesz, aby grub wiedział o tym podczas uruchamiania komputera, możesz ponownie przeskanować partycje i wygenerować nowy plik grub.cfg za pomocą komendy grub_mkconfig w następujący sposób w sesji terminalowej

cd / boot / grub

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

sudo grub_mkconfig -o ./grub.cfg

Teraz, gdy uruchamiasz się z bieżącej partycji linuksowej (która miała gruba podczas rozruchu), teraz będzie wiedział o drugiej partycji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.