Как установить 64-разрядную версию Ubuntu 14.04 / 16.04 с разделом RAID 1 с двойной загрузкой в ​​системе UEFI / GPT?

16

Обновление: вопрос и ответ ниже также применимы к Ubuntu 16.04

У меня есть компьютер с двойными SSD и Win (7), предварительно установленный на другой диск. Предварительная установка использует (U) EFI / GPT загрузку. Я хочу установить 64-разрядный рабочий стол Ubuntu 14.04 в корневой раздел RAID1 на своих SSD-дисках и по-прежнему иметь возможность двойной загрузки моей системы Win7. Возможно ли это?

Это руководство с помощью установщика рабочего стола не работает, возможно, потому что он (неявно) предполагает загрузку MBR. Также не было установки дистрибутива сервера , возможно, по той же причине.

    
задан Niclas Börlin 11.08.2015 в 05:58
источник

2 ответа

26

ОБНОВЛЕНИЕ: я подтвердил, что описание ниже также работает для Ubuntu 16.04

После нескольких дней попыток у меня теперь есть рабочая система! Короче говоря, решение состояло из следующих шагов:

  1. Загрузка с использованием компакт-диска / USB Ubuntu Live.
  2. При необходимости разделяет SSD.
  3. Установите отсутствующие пакеты (mdadm и grub-efi).
  4. Создайте разделы RAID.
  5. Запустите установщик Ubiquity (но не загружайтесь в новую систему).
  6. Запустите установленную систему (initramfs), чтобы включить загрузку из корня RAIDed.
  7. Заполните раздел EFI первого SSD с помощью GRUB и установите его в цепочку загрузки EFI.
  8. Clone раздел EFI на другой SSD и установите его в цепочку загрузки.
  9. Готово! Теперь ваша система будет иметь избыточность RAID 1. Обратите внимание, что ничего особого не нужно делать после, например, обновление ядра, поскольку разделы UEFI не затронуты.

Ключевым компонентом этапа 6 решения была задержка в последовательности загрузки, которая в противном случае выгружала меня прямо в приглашение GRUB (без клавиатуры!), если бы отсутствовал любой из SSD.

Подробный HOWTO

1. Загрузочный

Загрузите EFI с USB-накопителя. Именно то, как ваша система будет отличаться. Выберите Попробуйте ubuntu без установки .

Запустите эмулятор терминала, например. xterm для запуска команд ниже.

1.1 Вход с другого компьютера

Пробовав это, мне часто легче было входить в систему с другого, уже полностью настроенного компьютера. Это упрощенная вырезание и вставка команд и т. Д. Если вы хотите сделать то же самое, вы можете войти через ssh, выполнив следующие действия:

На компьютере, который нужно настроить, установите сервер openssh:

sudo apt-get install openssh-server

Сменить пароль. Пароль по умолчанию для пользователя ubuntu пуст. Вероятно, вы можете выбрать пароль средней силы. Он будет забыт, как только вы перезагрузите свой новый компьютер.

passwd

Теперь вы можете войти в живую сессию ubuntu с другого компьютера. Ниже приведены инструкции для linux:

ssh -l ubuntu <your-new-computer>

Если вы получаете предупреждение о предполагаемой атаке "человек в середине", вам нужно очистить ключи ssh, используемые для идентификации нового компьютера. Это связано с тем, что openssh-server генерирует новые ключи сервера, когда он установлен. Используемая команда обычно печатается и должна выглядеть как

ssh-keygen -f <path-to-.ssh/known_hosts> -R <your-new-computer>

После выполнения этой команды вы сможете войти в сеанс ubuntu в прямом эфире.

2. Диски разделов

Очистить все старые разделы и загрузочные блоки. <Сильный> Внимание! Это уничтожит данные на ваших дисках!

sudo sgdisk -z /dev/sda
sudo sgdisk -z /dev/sdb

Создайте новые разделы на самом маленьком из ваших дисков: 100M для ESP, 32G для RAID SWAP, отдохните для корня RAID. Если ваш sda-диск наименьший, следуйте разделу 2.1, иначе раздел 2.2.

2.1 Создание таблиц разделов (/ dev / sda меньше)

Выполните следующие действия:

sudo sgdisk -n 1:0:+100M -t 1:ef00 -c 1:"EFI System" /dev/sda
sudo sgdisk -n 2:0:+32G -t 2:fd00 -c 2:"Linux RAID" /dev/sda
sudo sgdisk -n 3:0:0 -t 3:fd00 -c 3:"Linux RAID" /dev/sda

Скопируйте таблицу разделов на другой диск и восстановите уникальные UUID (фактически восстановите UUID для sda).

sudo sgdisk /dev/sda -R /dev/sdb -G

2.2 Создание таблиц разделов (/ dev / sdb меньше)

Выполните следующие действия:

sudo sgdisk -n 1:0:+100M -t 1:ef00 -c 1:"EFI System" /dev/sdb
sudo sgdisk -n 2:0:+32G -t 2:fd00 -c 2:"Linux RAID" /dev/sdb
sudo sgdisk -n 3:0:0 -t 3:fd00 -c 3:"Linux RAID" /dev/sdb

Скопируйте таблицу разделов на другой диск и восстановите уникальные UUID (фактически восстановите UUID для sdb).

sudo sgdisk /dev/sdb -R /dev/sda -G

2.3 Создайте файловую систему FAT32 на / dev / sda

Создайте файловую систему FAT32 для раздела EFI.

sudo mkfs.fat -F 32 /dev/sda1
mkdir /tmp/sda1
sudo mount /dev/sda1 /tmp/sda1
sudo mkdir /tmp/sda1/EFI
sudo umount /dev/sda1

3. Установка отсутствующих пакетов

CD-диск Ubuntu Live поставляется без двух ключевых пакетов; grub-efi и mdadm. Установите их. (Я не уверен на 100% grub-efi здесь, но для поддержания симметрии с предстоящей установкой, принесите его также.)

sudo apt-get update
sudo apt-get -y install grub-efi-amd64 # (or grub-efi-amd64-signed)
sudo apt-get -y install mdadm

Вам может понадобиться grub-efi-amd64-signed вместо grub-efi-amd64 , если включена безопасная загрузка. (См. Комментарий Alecz.)

4. Создайте разделы RAID

Создайте RAID-устройства в деградированном режиме. Устройства будут завершены позже. Создание полного RAID1 иногда давало мне проблемы во время установки ubiquity ниже, не зная почему. (формат mount / unmount?)

sudo mdadm --create /dev/md0 --bitmap=internal --level=1 --raid-disks=2 /dev/sda2 missing
sudo mdadm --create /dev/md1 --bitmap=internal --level=1 --raid-disks=2 /dev/sda3 missing

Проверить статус RAID.

cat /proc/mdstat

Personalities : [raid1] 
md1 : active raid1 sda3[0]
      216269952 blocks super 1.2 [2/1] [U_]
      bitmap: 0/2 pages [0KB], 65536KB chunk

md0 : active raid1 sda2[0]
      33537920 blocks super 1.2 [2/1] [U_]
      bitmap: 0/1 pages [0KB], 65536KB chunk

unused devices: <none>

Разделите устройства md.

sudo sgdisk -z /dev/md0
sudo sgdisk -z /dev/md1
sudo sgdisk -N 1 -t 1:8200 -c 1:"Linux swap" /dev/md0
sudo sgdisk -N 1 -t 1:8300 -c 1:"Linux filesystem" /dev/md1

5. Запустите установщик

Запустите установщик вездесущности, за исключением загрузчика , который все равно не удастся . ( Примечание . Если вы вошли в систему через ssh, вам, скорее всего, захочется выполнить это на вашем новом компьютере.)

sudo ubiquity -b

Выберите Что-то еще в качестве типа установки и измените тип md1p1 на ext4 , формат: yes и точку монтирования / . Раздел md0p1 будет автоматически выбран в качестве свопа.

Получите чашку кофе во время установки.

Важно: После завершения установки выберите Продолжить тестирование , поскольку система еще не загружена.

Завершите RAID-устройства

Присоедините ожидающие разделы sdb к RAID.

sudo mdadm --add /dev/md0 /dev/sdb2
sudo mdadm --add /dev/md1 /dev/sdb3

Убедитесь, что все RAID-устройства в порядке (и, возможно, синхронизация).

cat /proc/mdstat

Personalities : [raid1] 
md1 : active raid1 sdb3[1] sda3[0]
      216269952 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  0.2% (465536/216269952)  finish=17.9min speed=200000K/sec
      bitmap: 2/2 pages [8KB], 65536KB chunk

md0 : active raid1 sdb2[1] sda2[0]
      33537920 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

unused devices: <none>

Процесс, описанный ниже, может продолжаться во время синхронизации, включая перезагрузки.

6. Настроить установленную систему

Настройка для включения chroot в систему установки.

sudo -s
mount /dev/md1p1 /mnt
mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
cat /etc/resolv.conf >> /mnt/etc/resolv.conf
chroot /mnt

Настроить и установить пакеты.

apt-get install -y grub-efi-amd64 # (or grub-efi-amd64-signed; same as in step 3)
apt-get install -y mdadm

Если вы все еще синхронизируете устройства md, вы можете увидеть некоторые предупреждения, например:

/usr/sbin/grub-probe: warning: Couldn't find physical volume '(null)'. Some modules may be missing from core image..

Это нормально и может быть проигнорировано (см. ответ внизу этот вопрос ).

nano /etc/grub.d/10_linux
# change quick_boot and quiet_boot to 0

Отключение quick_boot позволит избежать записи Diskfilter не поддерживаемых . Отключение quiet_boot относится только к личным предпочтениям.

Измените /etc/mdadm/mdadm.conf, чтобы удалить ссылки на ярлыки, т. е. изменить

ARRAY /dev/md/0 metadata=1.2 name=ubuntu:0 UUID=f0e36215:7232c9e1:2800002e:e80a5599
ARRAY /dev/md/1 metadata=1.2 name=ubuntu:1 UUID=4b42f85c:46b93d8e:f7ed9920:42ea4623

к

ARRAY /dev/md/0 UUID=f0e36215:7232c9e1:2800002e:e80a5599
ARRAY /dev/md/1 UUID=4b42f85c:46b93d8e:f7ed9920:42ea4623

Этот шаг может быть ненужным, но я видел, что некоторые страницы предполагают, что схемы именования могут быть нестабильными (name = ubuntu: 0/1), и это может помешать созданию совершенно прекрасного RAID-устройства при сборке во время загрузки.

Изменить строки в /etc/default/grub для чтения

#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

Опять же, этот шаг может быть ненужным, но я предпочитаю загружаться с открытыми глазами ...

6.1. Добавить скрипт сна

(Сообщество предложило, что этот шаг может быть ненужным и может быть заменен с использованием GRUB_CMDLINE_LINUX="rootdelay=30" в /etc/default/grub . По причинам, объясняемым в нижней части этого HOWTO, я предлагаю придерживаться сценария сна, хотя это более уродливое, чем использование rootdelay. Таким образом, мы продолжаем нашу обычную программу ... )

Создайте сценарий, который будет ждать установки RAID-устройств. Без этой задержки установка root может завершиться неудачно из-за невозможности завершения сборки RAID . Я нашел это трудным путем - проблема не появилась, пока я не отключил один из SSD для имитации отказа диска! Возможно, потребуется настроить синхронизацию в зависимости от имеющегося оборудования, например. медленные внешние USB-диски и т. д.

Введите следующий код в /usr/share/initramfs-tools/scripts/local-premount/sleepAwhile :

#!/bin/sh
echo
echo "sleeping for 30 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 25 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 20 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 15 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 10 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 5 seconds while udevd and mdadm settle down"
sleep 5
echo "done sleeping"

Сделайте исполняемый файл сценария и установите его.

chmod a+x /usr/share/initramfs-tools/scripts/local-premount/sleepAwhile
update-grub
update-initramfs -u

7. Включить загрузку с первого SSD

Теперь система почти готова, необходимо установить только загрузочные параметры UEFI.

mount /dev/sda1 /boot/efi
grub-install --boot-directory=/boot --bootloader-id=Ubuntu --target=x86_64-efi --efi-directory=/boot/efi --recheck
update-grub
umount /dev/sda1

Это установит загрузчик в /boot/efi/EFI/Ubuntu (a.k.a. EFI/Ubuntu on /dev/sda1 ) и установит его сначала в цепочке загрузки UEFI на компьютере.

8. Включить загрузку со второго SSD

Мы почти закончили. На этом этапе мы должны перезагрузиться на диске sda . Кроме того, mdadm должно иметь возможность обрабатывать отказ либо диска sda , либо sdb . Однако EFI не является RAIDed, поэтому нам нужно клонировать его .

dd if=/dev/sda1 of=/dev/sdb1

В дополнение к установке загрузчика на втором диске, UUID файловой системы FAT32 в разделе sdb1 (как сообщается blkid ) соответствует настройке sda1 и /etc/fstab . (Обратите внимание, что UUID для групп /dev/sda1 и /dev/sdb1 все равно будут отличаться - сравните ls -la /dev/disk/by-partuuid | grep sd[ab]1 с blkid /dev/sd[ab]1 после установки, чтобы убедиться сами.)

Наконец, мы должны вставить раздел sdb1 в порядок загрузки. (Примечание. Этот шаг может быть ненужным, в зависимости от вашего BIOS. У меня есть отчеты о том, что некоторые BIOS автоматически генерируют список допустимых ESP.

efibootmgr -c -g -d /dev/sdb -p 1 -L "Ubuntu #2" -l '\EFI\Ubuntu\grubx64.efi'

Я не тестировал его, но, вероятно, необходимо иметь уникальные метки (-L) между ESP на sda и sdb .

Это приведет к созданию распечатки текущего порядка загрузки, например.

Timeout: 0 seconds
BootOrder: 0009,0008,0000,0001,0002,000B,0003,0004,0005,0006,0007
Boot0000  Windows Boot Manager
Boot0001  DTO UEFI USB Floppy/CD
Boot0002  DTO UEFI USB Hard Drive
Boot0003* DTO UEFI ATAPI CD-ROM Drive
Boot0004  CD/DVD Drive 
Boot0005  DTO Legacy USB Floppy/CD
Boot0006* Hard Drive
Boot0007* IBA GE Slot 00C8 v1550
Boot0008* Ubuntu
Boot000B  KingstonDT 101 II PMAP
Boot0009* Ubuntu #2

Обратите внимание, что Ubuntu # 2 (sdb) и Ubuntu (sda) являются первыми в порядке загрузки.

Reboot

Теперь мы готовы перезагрузиться.

exit # from chroot
exit # from sudo -s
sudo reboot

Теперь система должна перезагрузиться в Ubuntu (возможно, вам придется сначала удалить установочный носитель Ubuntu Live.)

После загрузки вы можете запустить

sudo update-grub

, чтобы прикрепить загрузчик Windows к цепочке загрузки grub.

Виртуальная машина gotchas

Если вы хотите сначала попробовать это на виртуальной машине, есть некоторые предостережения. По-видимому, NVRAM, который содержит информацию UEFI, запоминается между перезагрузками, но не между циклами остановки и перезапуска. В этом случае вы можете оказаться на консоли консоли UEFI. Следующие команды должны загружать вас в ваш компьютер из /dev/sda1 (используйте FS1: для /dev/sdb1 ):

FS0:
\EFI\Ubuntu\grubx64.efi

Первое решение в верхнем ответе Загрузка UEFI в виртуальный бокс - Ubuntu 12.04 также могут быть полезны.

Имитация отказа диска

Сбой компонента RAID-устройства может быть смоделирован с использованием mdadm . Однако, чтобы убедиться, что загрузочный материал выдержит сбой диска, мне пришлось отключить компьютер и отключить питание с диска.Если вы это сделаете, сначала убедитесь, что md-устройства синхронизированы .

cat /proc/mdstat 

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sdb3[2] sda3[0]
      216269952 blocks super 1.2 [2/2] [UU]
      bitmap: 2/2 pages [8KB], 65536KB chunk

md0 : active raid1 sda2[0] sdb2[2]
      33537920 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

unused devices: <none>

В приведенных ниже инструкциях sdX - это неисправное устройство (X = a или b), а sdY - это нормально.

Отсоедините привод

Выключите компьютер. Отсоедините привод. Перезапуск. Ubuntu теперь должен загружаться с дисками RAID в деградированном режиме. (Празднуйте! Это то, чего вы пытались достичь!;)

cat /proc/mdstat 

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sda3[0]
      216269952 blocks super 1.2 [2/1] [U_]
      bitmap: 2/2 pages [8KB], 65536KB chunk

md0 : active raid1 sda2[0]
      33537920 blocks super 1.2 [2/1] [U_]
      bitmap: 0/1 pages [0KB], 65536KB chunk

unused devices: <none>

Восстановление с неисправного диска

Это процесс, который следует выполнить, если вам нужно заменить неисправный диск. Если вы хотите подражать замене, вы можете загрузиться в сеанс Ubuntu Live и использовать

dd if=/dev/zero of=/dev/sdX

, чтобы стереть диск перед повторной перезагрузкой в ​​реальную систему. Если вы только что протестировали избыточность загрузки / RAID в приведенном выше разделе, вы можете пропустить этот шаг. Тем не менее, вы должны хотя бы выполнить шаги 2 и 4 ниже, чтобы восстановить полную резервную загрузку / RAID для вашей системы.

Восстановление системы загрузки RAID + после замены диска требует следующих действий:

  1. Разделите новый диск.
  2. Добавить разделы в устройства md.
  3. Клонировать загрузочный раздел.
  4. Добавьте запись EFI для клона.

1. Разделите новый диск

Скопируйте таблицу разделов с здорового диска:

sudo sgdisk /dev/sdY -R /dev/sdX

Повторно ранжируйте UUID на новом диске.

sudo sgdisk /dev/sdX -G

2. Добавить в md-устройства

sudo mdadm --add /dev/md0 /dev/sdX2
sudo mdadm --add /dev/md1 /dev/sdX3

3. Клонировать загрузочный раздел

Клонируйте ESP с здорового диска. (Осторожно, возможно, сначала дамп в файл обоих ESP, чтобы включить восстановление, если вы действительно его испортили.)

sudo dd if=/dev/sdY1 of=/dev/sdX1

4. Вставьте вновь восстановленный диск в порядок загрузки

Добавьте запись EFI для клона. При необходимости измените ярлык -L.

sudo efibootmgr -c -g -d /dev/sdX -p 1 -L "Ubuntu #2" -l '\EFI\Ubuntu\grubx64.efi'

Теперь перезагрузка системы должна вернуть ее в нормальное состояние (устройства RAID могут по-прежнему синхронизироваться)!

Почему сценарий сна?

Сообщалось, что добавление сценария сна может быть ненужным и может быть заменено на использование GRUB_CMDLINE_LINUX="rootdelay=30" в /etc/default/grub , за которым следует sudo update-grub . Это предложение, безусловно, более чистое и работает в сценарии отказа / замены диска. Однако есть оговорка ...

Я отключил второй SSD и обнаружил, что вместо rootdelay=30 и т. д. вместо сценария сна:
1) Система загружается в деградированном режиме без "отказавшего" диска.
2) При отсутствии ухудшения загрузки (оба диска присутствуют) время загрузки уменьшается. Задержка воспринимается только при отсутствии второго диска.

1) и 2) звучали здорово, пока я не добавил второй диск. При загрузке RAID-массив не смог собраться и оставил меня в подсказке initramfs , не зная, что делать. Возможно, было возможно спасти ситуацию: а) загрузка на USB-накопитель Ubuntu Live, b) установка mdadm и c) повторная сборка массива вручную, но ... я где-то испортил. Вместо этого, когда я перезапустил этот тест с сценарий сна (да, я начал HOWTO сверху вниз в n-й раз ...), система сделала загрузки. Массивы были в деградированном режиме, и я мог вручную повторно добавить разделы /dev/sdb[23] без дополнительного USB-накопителя. Я не знаю, почему работает скрипт сна, а rootdelay - нет. Вероятно, mdadm путается с помощью двух, немного несинхронизирующих компонентов, но я думал, что mdadm было разработано для этого. В любом случае, поскольку скрипт сна работает, я придерживаюсь этого.

Можно утверждать, что удаление совершенно здорового RAID-компонента, повторная загрузка RAID в деградированный режим и повторное добавление компонентного устройства - нереалистичный сценарий: реалистичный сценарий скорее означает, что одно устройство выходит из строя и заменяется на новый, оставляя меньше возможностей для mdadm , чтобы запутаться. Я согласен с этим аргументом. Тем не менее, я не знаю, как проверить, как система терпит аппаратный сбой, за исключением того, что фактически отключает некоторое оборудование! И после тестирования я хочу вернуться к избыточной рабочей системе. (Ну, я мог прикрепить мой второй SSD к другому компьютеру и пронести его до того, как я его снова добавлю, но это невозможно.)

Вкратце: Насколько мне известно, решение rootdelay является чистым, быстрее, чем сценарий сна для необработанных ботинок, и должно работать для реального сценария отказа / замены диска. Тем не менее, я не знаю, насколько это возможно. Итак, пока я буду придерживаться уродливого сценария сна.

    
ответ дан Niclas Börlin 11.08.2015 в 06:52
источник
0

Мое предложение для ОС Debian, но я думаю, что это сработает и для Ubuntu и других.

Один из возможных способов решения проблемы, возникающей с большим количеством материнских плат, неправильно обрабатывающих записи UEFI (Debian не загружается, даже если вы сделали правильную запись efibootmgr -c -g -d /dev/sda -p 1 -w -L "debian" -l /EFI/debian/grubx64.efi , UEFI BIOS показывает загрузочный диск «debian», но он не будет загружаться из него), заключается в использовании вместо этого общей записи /boot/efi/EFI/boot/bootx4.efi .

Например, Asus Z87C не нравится /EFI/debian/grubx64.efi .

Итак, если вы установили раздел efi /dev/sda1 в /boot/efi путь:

mkdir /boot/efi/EFI/boot
cp /boot/efi/EFI/debian/grubx64.efi /boot/efi/EFI/boot/bootx4.efi

Затем перезагрузитесь.

UEFI BIOS увидит общий диск «UEFI OS», а также любую другую запись, ранее созданную с помощью efibootmgr, но она без проблем будет загружаться из «UEFI OS».

    
ответ дан Nicola Giampietro 06.01.2017 в 19:01