6

Я настраиваю автоматизированную систему установки для установки настроенных Ubuntu 12 и других операционных систем на диски, которые будут удалены, а затем навсегда установлены на новые компьютеры.

Проблема заключается в создании конфигурации grub - если я запустил grub-mkconfig в системе установки, он поместит UUID диска системы установки, а не целевой диск. Есть ли способ сообщить grub-mkconfig, какой диск я хочу использовать в качестве пользователя root? Если я подключусь к новой системе, будет ли она использовать какой-либо UUID, на котором, похоже, находится файловая система? Или я должен прибегнуть к sed чтобы заменить команды search в grub.cfg?

2 ответа2

8

Да, с chroot все будет в порядке, однако убедитесь, что система, с которой вы используете chroot соответствует системе, в которую вы делаете chroot .

chroot с правильным монтированием, соответствует перемещению загрузочной системы (ядра) на новую файловую систему без перезагрузки. - chroot используется для перемещения ОС на новый диск без перезагрузки, а также для установки системы Linux с LiveCD и аналогичным образом.

1) Смонтируйте свой обычный системный раздел. Х это буква диска. Y номер раздела:
sudo mount /dev/sdXY /mnt

2) Только если у вас есть отдельный загрузочный раздел (где sdXY - обозначение раздела /boot):
sudo mount /dev/sdXY /mnt/boot

3) Смонтируйте критические виртуальные файловые системы.
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

4) Загрузите ваше обычное системное устройство:
sudo chroot /mnt

5) Установите GRUB 2 (замените правильное устройство на sda, sdb и т.д. Не указывайте номер раздела):
grub-install /dev/sdX

6) Восстановить файл меню GRUB 2 (grub.cfg)
update-grub

7) Выполнять другие задачи, такие как обновления, устанавливать приложения, настраивать и т.д.
...

8) Выход из chroot:
CTRL-D на клавиатуре

https://help.ubuntu.com/community/Grub2/Installing#via_ChRoot

0

В итоге я использовал chroot для этого, но сначала я вручную изменил UUID моего целевого диска в grub.cfg на целевом диске. Я использовал команду blkdev чтобы узнать UUID целевого раздела диска. Это выглядит примерно так ($ targettdir - это целевая файловая система, установленная, $ diskdev - дисковое устройство, видимое из хост-системы, например, /dev /sdb, а $ partitiondev - раздел диска, например, /dev /sdb1). К этому моменту я уже разбил диск на части, сделал mkfs, смонтировал его, затем скопировал на диск желаемое содержимое новой файловой системы.

targetuuid=`blkid -s UUID -o value $partitiondev`
test -n "$targetuuid" || error "Could not determine UUID for $partitiondev"
sed --in-place=orig 's/search .*/search --no-floppy --fs-uuid --set=root $targetuuid/' $targetdir/boot/grub/gub.cfg || error "Error setting correct UUID in $targetdir/boot/grub/grub.cfg"
mount -o bind /dev $targetdir/dev 
# could also bind other pseudo-filesystems like /proc as in Diblo Dk's answer.
chroot $targetdir grub-install --no-floppy --recheck $diskdev
umount $targetdir/dev # don't forget to unmount this first otherwise you can't unmount $targetdir later

[Между прочим, в случае, если кто-то еще сталкивается с несколькими тангенциальными проблемами, которые у меня были при этом - я использовал инструмент "buildroot", чтобы сделать минимальную систему Linux в initramfs для загрузки из сетевой загрузки (pxe). Если вы включите util-linux и выберете mount/umount в разделе "Утилиты установки", то будет установлена слегка испорченная версия mount (заменяющая встроенную команду mount в busybox), которая, похоже, постоянно вылетает. Кроме того, мне пришлось разрешить использование devtmpfs в конфигурации ядра и выбрать devtmpfs в buildroot, чтобы сработала перепривязка файловой системы /dev - я думаю, в версии busybox у меня есть опция bind для монтирования, которая работает, только если вы связывает файловую систему, а не каталог внутри файловой системы. Это все с версией buildroot 2013.05, которая использует busybox версии 1.21.1, util-linux 2.22.2. Может быть, они были исправлены с тех пор.]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .