Debian / Grub2: Перемещение корневого раздела на новый диск?

30

У кого-нибудь есть предложения, как перенести корневой раздел на новый диск и настроить grub2 для загрузки на этот диск? Кажется, мне не повезло, указав grub-mkconfig, что именно я хочу сделать (например, chroot'int в моем новом корне просто смущает все скрипты).

Предыстория Я запускаю Debian Squeeze на безголовом 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, спрашивающим, был ли установлен root. Затем я предпринял нерешительную попытку настройки, /mnt/newroot/grub/grub.cfgчтобы найти образ ядра sdf5, а затем - grub-install --root-directory=/mnt/newroot /dev/sdf. Но это просто вызвало у меня подсказку о спасении, когда я попытался загрузиться с sdf.

Мой план резервного копирования - просто переустановить, так что бонусный вопрос (без галочек для этого): что мне нужно сделать, чтобы получить доступ к моим конфигурациям lvm2 и mdadm? Все ли это хранится в файловых системах (и будет ли оно автоматически обнаружено), или мне нужно взять его самому?

Решение (спасибо Maciej Piechotka): Как указывает Maciej, мне нужно правильно выбрать chroot для работы всех инструментов grub. Для справки, вот как я это сделал:

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

Все файлы теперь скопированы (см. Здесь для обсуждения стратегий копирования). Исправьте новый, etc/fstabчтобы указать на новый корень:

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 .

Теперь мы привязаны к будущему корню именно так, как он будет выглядеть. По словам Maciej, все должно быть в порядке, чтобы просто позвонить grub-install, но я сделал update-grubсначала, чтобы взглянуть на сгенерированный /boot/grub/grub.cfgперед установкой загрузчика. Я не уверен, что он будет автоматически обновляться?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb
Янус
источник
Разместить содержание /etc/default/grubи точную расшифровку стенограммы update-grub.
Жиль "ТАК - перестань быть злым"
(размышления после добавления решения): Возможно, проблема в том, что я не обновлялся /etc/fstabв chroot(это согласуется с update-grubжалобой на то, что «\ not mount»). Если бы я сделал это снова, я бы сначала попытался, не удосужившись смонтировать специальные файловые системы в chroot.
Янус
просто примечание: не забудьте размонтировать / mnt / newroot перед перезагрузкой!
Джакомо Тесио
Вот инструкции о том, как переместить ваш корневой раздел / на новый диск nvme, сохраняя / home на жестком диске. lucasmanual.com/blog/…
Лукас

Ответы:

20

Монтируйте базовые файловые системы и копируйте / изменяйте файлы во время хроматирования, например:

  • / 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, который работал для меня при установке Grub 2 в arch и много раз на Gentoo. Тогда после chroot /path/to/chrootкоманде было просто:

grub-install /dev/<boot_disk>

Начиная с lvm2 (и я верю Madm, но я не использовал его) конфигурация хранится на диске. Существует конфигурация, которую следует прочитать, чтобы обнаружить устройства. При условии, что ваши устройства находятся в стандартных местах ( /dev/sd*или /dev/hd*), проблем не должно быть.


PS. Я бы не стал доверять простым cp живой системы, так как есть несколько мест, где она может пойти не так:

  • Забыл поменять /etc/fstabи другие полезные файлы
  • Файлы изменены во время доступа
  • Справиться с мусором ( /tmpи т. Д.)
Мацей Печотка
источник
Спасибо. В общем, вы говорите, что я делаю небрежный chroot :) Я попробую с правильным chroot. cp -axдолжен быть штраф (возможно , после падения на однопользовательский уровень выполнения) в соответствии с этой старой HOWTO: tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
Янус
Работал шарм! Огромное спасибо за помощь.
Янус
1
@Janus: Я бы скопировал данные из Live дистрибутива, чтобы быть в безопасности. Я рад, однако это сработало.
Мацей Пехотка
Я должен был сделать update-grubраньше install-grub.
Арье Лейб Таурог
3

вы можете установить grub из дистрибутива без рутирования:

grub-install /dev/hda --root-directory=/mnt/guest/
реактивный самолет
источник
Спасибо. Я не уверен, что это будет работать здесь: насколько я понимаю, grub-installтолько обновляет файлы образа grub и пишет MBR: в частности, grub.cfgне обновляется. Как я прокомментировал выше, монтирование специальных каталогов может быть излишним, но я все еще думаю, что chroot - это способ обновления grub.cfgпростым способом?
Янус
Да, у меня это тоже не сработало. Вы должны приступить update-grubк работе, а этого нет --root-directoryили что-то, нет?
Митар
0

Кстати, если вы добавляете раздел (например, Windows), в который вы не хотите, чтобы grub записывал в загрузочный сектор, но вы хотите, чтобы grub знал об этом при загрузке компьютера, вы можете повторно просканировать разделы и сгенерировать новый файл grub.cfg с помощью команды grub_mkconfig, как показано ниже в терминальной сессии

CD / boot / grub

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

sudo grub_mkconfig -o ./grub.cfg

Теперь, когда вы загрузитесь с вашего текущего раздела Linux (у которого была grub-загрузка), он теперь будет знать о другом разделе.

user129087
источник