Не может загрузить корень ZFS на Ubuntu 12.04 после обновления Heartbleed

Я сделал Кв. - получают обновление и затем обновляют для контакта с heartbleed уязвимостью. Я перезагрузил после обновления, не проверяя, что все было хорошо. Теперь у меня нет большой удачи. Это загружает и говорит, что не может смонтировать файловую систему '-' и помещение меня в оболочке BusyBox.

Хорошие новости - то, что, если я загружаюсь прочь установки LiveUSB, я могу следовать инструкциям и сделать импорт шпульки моего rpool. Это работает. Однако я попробовал основы в ZFS Ubuntu FAQ, и у меня все еще нет большой удачи.

Какие шаги я должен сделать от LiveCD для получения системной переустановки обходящегося?

1
задан 11 April 2014 в 04:13

1 ответ

Я получил вещи, работающие, используя превосходное практическое руководство ZFS (Это, как к теперь заменяется, и более новым Практическим руководствам рекомендуют сопровождаться),

Я загрузил Ubuntu 12.04 живой usb и использовал все команды от шага 1 ПРАКТИЧЕСКОГО РУКОВОДСТВА.

Шаг 1: подготовьте среду установки

1.1 Запустите Ubuntu LiveCD и откройте терминал в рабочем столе.

1.2 Введите эти команды при терминальной подсказке:

$ sudo -i
# apt-add-repository --yes ppa:zfs-native/stable
# apt-get update
# apt-get install debootstrap spl-dkms zfs-dkms ubuntu-zfs

1.3 Проверьте, что файловая система ZFS установлена и доступна:

# modprobe zfs
# dmesg | grep ZFS:
ZFS: Loaded module v0.6.3-2~trusty, ZFS pool version 5000, ZFS filesystem version 5

Шаг 2: разбиение дисков на разделы

Это учебное руководство намеренно рекомендует разделение MBR. GPT может использоваться вместо этого, но остерегаться микропрограммных ошибок UEFI.

2.1 Выполните свой любимый диск partitioner, как parted или cfdisk, на устройстве основной памяти. /dev/disk/by-id/scsi-SATA_disk1 устройство в качестве примера, используемое в этом документе.

2.2 Создайте маленький основной раздел MBR по крайней мере 8 мегабайтов. 256 МБ могут быть более реалистичными, если пространство не является ограниченным. /dev/disk/by-id/scsi-SATA_disk1-part1 раздел начальной загрузки в качестве примера, используемый в этом документе.

2.3 На этом первом небольшом разделе, наборе type=BE и включите bootable флаг.

2.4 Создайте большой раздел по крайней мере 4 гигабайтов. /dev/disk/by-id/scsi-SATA_disk1-part2 системный раздел в качестве примера, используемый в этом документе.

2.5 На этом втором большом разделе, наборе type=BF и отключите bootable флаг.

Таблица разделов должна быть похожей на это:

 # fdisk -l /dev/disk/by-id/scsi-SATA_disk1

 Disk /dev/sda: 10.7 GB, 10737418240 bytes
 255 heads, 63 sectors/track, 1305 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x00000000

 Device    Boot      Start         End      Blocks   Id  System
 /dev/sda1    *          1           1        8001   be  Solaris boot
 /dev/sda2               2        1305    10474380   bf  Solaris

Помните: Замена scsi-SATA_disk1-part1 и scsi-SATA_disk1-part2 соответственно ниже.

Подсказки: * Вы делаете это в виртуальной машине? Что-то в /dev/disk/by-id пропавшие без вести? Пойдите читает раздел поиска и устранения неисправностей. * Недавние выпуски GRUB предполагают что /boot/grub/grubenv файл перезаписываем stage2 модулем. Пока GRUB не получает улучшение записи ZFS, модули GRUB должны быть установлены на отдельной файловой системе в отдельном разделе, который перезаписываем личинкой. *, Если /boot/grub находится в файловой системе ZFS, затем GRUB не загрузится с этим сообщением: error: sparse file not allowed. Если Вы абсолютно хотите только одну файловую систему, то удаляете вызов к recordfail() в каждом grub.cfg строка файла конфигурации меню и редактирование /etc/grub.d/10_linux файл для внесения изменения постоянным. *, С другой стороны, если /boot/grub находится в файловой системе ZFS, можно прокомментировать каждую строку с текстом save_env в файле /etc/grub.d/00_header и выполненная личинка обновления.

Шаг 3: дисковое форматирование

3.1 Отформатируйте маленький раздел начальной загрузки, созданный Шагом 2.2 как файловая система, которая имеет поддержку stage1 GRUB как это:

 # mke2fs -m 0 -L /boot/grub -j /dev/disk/by-id/scsi-SATA_disk1-part1

3.2 Создайте корневой пул на большем разделе:

 # zpool create -o ashift=9 rpool /dev/disk/by-id/scsi-SATA_disk1-part2

Всегда используйте длинное/dev/disk/by-id /* псевдонимы с ZFS. Используя/dev/sd* узлы устройства непосредственно могут вызвать спорадические отказы импорта, особенно в системах, которые имеют больше чем один пул хранения данных.

Предупреждение: grub2-1.99 пакет, в настоящее время публикуемый в PPA для Точного, надежно не обрабатывает 4k размер блока, который является ashift=12.

Подсказки: * # ls -la /dev/disk/by-id перечислит псевдонимы. * Корневой пул может быть зеркалом. Например, zpool create -o ashift=9 rpool mirror /dev/disk/by-id/scsi-SATA_disk1-part2 /dev/disk/by-id/scsi-SATA_disk2-part2. Помните, что версия и ashift имеют значение для любого пула, что GRUB должен читать, и что эти вещи трудно изменить после создания пула. * При использовании зеркала с отдельным разделом начальной загрузки, как описано выше не забывайте редактировать grub.cfg файл на втором разделе HD так, чтобы "корень =" раздел относился к тому разделу на втором HD также; иначе при потере первого диска Вы не сможете загрузиться от второго, потому что ядро будет продолжать пытаться смонтировать корневой раздел от первого диска. * Имя пула произвольно. В системах, которые могут автоматически установить на ZFS, корневой пул называют "rpool" по умолчанию. Обратите внимание, что системное восстановление легче при выборе уникального имени вместо "rpool". Что-либо кроме "rpool" или "корпуса", как имя хоста, было бы хорошим выбором. *, Если Вы хотите создать зеркало, но только иметь один диск в наличии теперь можно создать зеркало с помощью редкого файла в качестве второго участника затем сразу офлайн оно так, зеркало находится в ухудшенном режиме. Позже можно добавить другой диск к шпульке, и ZFS будет автоматически синхронизировать их. Редкий файл не поднимет больше, чем некоторые КБ, таким образом, это сможет быть больше, чем Ваша рабочая система. Просто удостоверьтесь в офлайн редкий файл прежде, чем записать в пул.

3.2.1 Создайте редкий файл, по крайней мере, столь же большой как больший раздел на Вашем жестком диске:

 # truncate -s 11g /tmp/sparsefile

3.2.2 Вместо команды в разделе 3,2 использования это для создания зеркала:

 # zpool create -o ashift=9 rpool mirror /dev/disk/by-id/scsi-SATA_disk1-part2 /tmp/sparsefile

3.2.3 Офлайн редкий файл. Можно удалить его после этого, если Вы хотите.

 # zpool offline rpool /tmp/sparsefile

3.2.4 Проверьте, что пул был создан и теперь ухудшается.

 # zpool list
 NAME       SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
 rpool     10.5G   188K  10.5G     0%  1.00x  DEGRADED  -

3.3 Создайте "КОРНЕВУЮ" файловую систему в корневом пуле:

 # zfs create rpool/ROOT

3.4 Создайте порожденную файловую систему для системы Ubuntu:

 # zfs create rpool/ROOT/ubuntu-1

В системах Соляриса клонирована корневая файловая система, и суффикс увеличен для главных системных изменений через pkg image-update или beadm. Схожая функциональность для APT возможна, но в настоящее время нереализовываемая.

3.5 Демонтируйте все файловые системы ZFS.

 # zfs umount -a

3.6 Установите mountpoint свойство в корневой файловой системе:

 # zfs set mountpoint=/ rpool/ROOT/ubuntu-1

3.7 Установите bootfs свойство на корневом пуле.

 # zpool set bootfs=rpool/ROOT/ubuntu-1 rpool

Загрузчик использует эти два свойства, чтобы найти и запустить операционную систему. Эти имена свойства не произвольны.

Подсказка: помещение rpool=MyPool или bootfs=MyPool/ROOT/system-1 на ядре командная строка переопределяет свойства ZFS.

3.9 Экспортируйте пул:

 # zpool export rpool

Не пропускайте этот шаг. Система помещается в непоследовательное состояние, если эта команда перестала работать или если Вы перезагружаете в этой точке.

(Я имею, включают Шаг 2 и Шаг 3 для полноты, но я пропустил их, так как все было уже разделено и отформатировано.)

Я затем работал zpool list проверить, что никакие пулы не были загружены. (Ни один не был), я затем сделал только Шаг 4.1

zpool import -d /dev/disk/by-id -R /mnt rpool

Полный шаг 4 ниже

Шаг 4: установка системы

Помните: Замените "rpool" имя, выбранное на Шаге 3.2.

4.1 Импортируйте пул:

 # zpool import -d /dev/disk/by-id -R /mnt rpool

Если это перестало работать с, "не может импортировать 'rpool': никакой такой доступный пул", можно попробовать, не импортирует пул без имени устройства, например:

     # zpool import -R /mnt rpool

4.2 Смонтируйте маленькую файловую систему начальной загрузки для GRUB, который был создан на шаге 3.1:

 # mkdir -p /mnt/boot/grub
 # mount /dev/disk/by-id/scsi-SATA_disk1-part1 /mnt/boot/grub

4.4 Установите минимальную систему:

 # debootstrap trusty /mnt

debootstrap управляйте оставляет новую систему в ненастроенном состоянии. На Шаге 5 мы только сделаем минимальное количество конфигурации, необходимой для создания новой системы выполнимой.

Я затем проверил ls -al /mnt для проверки это смотрело хорошо.

Я затем пропустил к Шагу 5.4. Пришло время к chroot в импортированный rpool.

# mount --bind /dev  /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys  /mnt/sys
# chroot /mnt /bin/bash --login

На данном этапе мы находимся теперь в надлежащем состоянии для фиксации системы.

Полный шаг 5 был

Шаг 5: конфигурация системы

5.1 Скопируйте эти файлы от среды LiveCD до новой системы:

 # cp /etc/hostname /mnt/etc/
 # cp /etc/hosts /mnt/etc/

5.2 /mnt/etc/fstab файл должен быть пустым за исключением комментария. Добавьте эту строку к /mnt/etc/fstab файл:

 /dev/disk/by-id/scsi-SATA_disk1-part1  /boot/grub  auto  defaults  0  1

Обычный настольный установщик Ubuntu может добавить dev, proc, sys, или tmp строки к /etc/fstab файл, но такие записи избыточен в системе, которая имеет a /lib/init/fstab файл. Добавьте их теперь, если Вы хотите их.

5.3 Отредактируйте /mnt/etc/network/interfaces файл так, чтобы это содержало что-то вроде этого:

 # interfaces(5) file used by ifup(8) and ifdown(8)
 auto lo
 iface lo inet loopback

 auto eth0
 iface eth0 inet dhcp

Настройте этот файл, если новая система не является клиентом DHCP на LAN.

5.4 Сделайте виртуальные файловые системы в среде LiveCD видимыми к новой системе и chroot в него:

 # mount --bind /dev  /mnt/dev
 # mount --bind /proc /mnt/proc
 # mount --bind /sys  /mnt/sys
 # chroot /mnt /bin/bash --login

5.5 Установите поддержку PPA в chroot среде как это:

 # locale-gen en_US.UTF-8
 # apt-get update
 # apt-get install ubuntu-minimal software-properties-common

Даже если Вы предпочитаете неанглийский системный язык, всегда удостоверяетесь, что en_US.UTF-8 доступен. Минимальный человечностью пакет требуется, чтобы использовать ZoL, как упаковано в PPA.

5.6 Установите ZFS в chroot среде для новой системы:

 # apt-add-repository --yes ppa:zfs-native/stable
 # apt-add-repository --yes ppa:zfs-native/grub
 # apt-get update
 # apt-get install --no-install-recommends linux-image-generic linux-headers-generic
 # apt-get install ubuntu-zfs
 # apt-get install grub2-common grub-pc
 # apt-get install zfs-initramfs
 # apt-get dist-upgrade

Предупреждение: Это - второй раз, что необходимо ожидать SPL и модулей ZFS для компиляции. Не пытайтесь пропустить этот шаг путем копирования чего-либо с серверной среды в chroot среду.

Примечание: Это должно установить пакет ядра и его заголовки, исправленный mountall и dkms пакеты. Перепроверка, что Вы получаете эти пакеты от PPA, если Вы отклоняетесь от этих инструкций всегда.

Выбрать /dev/disk/by-id/scsi-SATA_disk1 если запрошено устанавливать загрузчик MBR.

Проигнорируйте предупреждения, которые вызываются chroot средой как:

  • Can not write log, openpty() failed (/dev/pts not mounted?)
  • df: Warning: cannot read table of mounted file systems
  • mtab is not present at /etc/mtab.

    5.7 Установите пароль root в новой системе:

    # корень passwd

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

Шаг 6: установка GRUB

Помните: Весь Шаг 6 зависит от Шага 5.4 и должен произойти в chroot среде.

6.1 Проверьте, что корневая файловая система ZFS распознана GRUB:

 # grub-probe /
 zfs

И что модули ZFS для GRUB установлены:

 # ls /boot/grub/zfs*
 /boot/grub/zfs.mod  /boot/grub/zfsinfo.mod

Обратите внимание, что после Ubuntu 13, они находятся теперь в/boot/grub/i386/pc/zfs*

 # ls /boot/grub/i386-pc/zfs*
 /boot/grub/i386-pc/zfs.mod  /boot/grub/i386-pc/zfsinfo.mod

Иначе проверьте примечания поиска и устранения неисправностей на GRUB ниже.

6.2 Обновите initrd файлы:

 # update-initramfs -c -k all
 update-initramfs: Generating /boot/initrd.img-3.2.0-40-generic

6.3 Обновите файл загрузочной конфигурации:

 # update-grub
 Generating grub.cfg ...
 Found linux image: /boot/vmlinuz-3.2.0-40-generic
 Found initrd image: /boot/initrd.img-3.2.0-40-generic
 done

Проверьте это boot=zfs появляется в файле загрузочной конфигурации:

 # grep boot=zfs /boot/grub/grub.cfg
 linux /ROOT/ubuntu-1/@/boot/vmlinuz-3.2.0-40-generic root=/dev/sda2 ro boot=zfs $bootfs quiet splash $vt_handoff
 linux /ROOT/ubuntu-1/@/boot/vmlinuz-3.2.0-40-generic root=/dev/sda2 ro single nomodeset boot=zfs $bootfs

6.4 Установите загрузчик на MBR как это:

 # grub-install $(readlink -f /dev/disk/by-id/scsi-SATA_disk1)
 Installation finished. No error reported.

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

Примечание: readlink требуется, потому что недавние выпуски GRUB не разыменовывают символьные ссылки.

Шаг 7: очистка и первая перезагрузка

7.1 Выход от chroot среда назад к среде LiveCD:

 # exit

7.2 Выполните эти команды в среде LiveCD для демонтажа всех файловых систем:

 # umount /mnt/boot/grub
 # umount /mnt/dev
 # umount /mnt/proc
 # umount /mnt/sys
 # zfs umount -a
 # zpool export rpool

zpool export команда должна успешно выполниться, не будучи вызванным, или новая система не запустится.

7.3 Мы сделаны!

 # reboot

Перед Шагом 6 я пытался делать все шаги выше без модификации. Как ожидалось система все еще не работала бы. (Взгляды здесь состояли в том, что это было простой проблемой zpool.cache.)

На другой попытке я восстановил Кв. - получают обновление и обновление. Я имел 'ага' момент и сделал:

# apt-get dist-upgrade

Когда я исправлял для heartbleed, я просто делал apt-get upgrade. Dist-обновление даже установит пакеты, которые обычно сдерживаются (как ядра). Эта незначительная ошибка была, вероятно, что вызвало все это. Так или иначе, после dist-обновления, за которым следуют, я имел некоторый успех. Система загрузилась бы и перешла бы к сути дела, где сеть произошла, и я мог попытаться к ssh в. Однако я не мог войти в свою учетную запись.

На данном этапе моя теория состояла в том, что 'большой' пул не становился импортированным и смонтированным. Тот пул имел мой корневой каталог. Любая проблема с ним монтирование препятствовала бы тому, чтобы я вошел в систему.

Я думал, что у меня могла бы быть действительно рабочая система для устранения проблемы. Я пытался загрузиться в ядро восстановления с помощью меню 'личинки'. Когда я выбрал ядро восстановления, я никогда не получал надлежащее меню восстановления личинки или к оболочке. Система загрузила бы и загрузила бы ядро + модули, но затем это зависнет. Я затем перезагрузил и отредактировал команды загрузки личинки. Я добавил ‘1’ для вхождения в однопользовательский режим. Тот же результат, никакая оболочка. Я отредактировал команды личинки при начальной загрузке снова. Я изменился ro -> rw и добавление init=/bin/bash. Я затем загрузился и вошел в оболочку. Я не могу помнить, импортировался ли ‘rpool’/монтировался в этой точке. Или rpool был смонтирован, или я смонтировал его. Я затем заметил, что мое большое объединение не было смонтировано, но я не был уверен, смонтируется ли оно на данном этапе так или иначе.

Я затем импортировал свое большое объединение. На моем 'большом' объединении у меня также есть zfs, монтируются к /var/cache. Так как точка монтирования не была пуста, она жаловалась. Я затем убрал старое /var/cache и повторно смонтированный. Все работали и выглядели хорошими. Однако как идиот, я поразил CTRL-D для выхода из оболочки, и ядро сразу сделало панику... (как ожидалось). Doh! У меня теперь было ожидание, что система правильно не синхронизировала к диску, и я должен буду восстановить все от последней начальной загрузки.

Я перезагрузил систему, не редактируя параметры начальной загрузки, и система была похожа на нее, работал. Я попробовал к ssh в снова …, и он работал! ничего себе! Я предполагаю, что как раз достаточно информации действительно становилось синхронизировавшим, чтобы система возобновилась.

Я перезагрузил, чтобы проверить, что система возвратится снова. Я также проверил, что был абсолютно актуален с Кв. - получают обновление. Я также проверил, что у меня был исправленный OpenSSL. Все это было хорошо. После моей последней проверки перезагрузки я сделал свой нормальный zfs назад взлеты к другой системе.

Теперь, почему это работало? Определенно была нанесенная самому себе проблема с dist-обновлением. Почему 'большой' пул не смонтировался?Не уверен. Я не восстановил zpool.cache в дисках поршня. Я подозреваю, что это была просто проблема 'большого' пула, импортируемого и смонтированного правильно.

1
ответ дан 7 December 2019 в 16:44

Другие вопросы по тегам:

Похожие вопросы: