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
Janus
źródło
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.)
Maciej Piechotka
źródło
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/
strumień
źródło
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.

użytkownik129087
źródło