Ошибка grub-probe в ZFS не смогла получить канонический путь к / dev / DISK_NAME - proUbuntu
Купить гитару в Москве
1 голос
/

Справочная информация:

  • Ubuntu Xenial
  • ZFS установлена ​​для системного диска (итак, вы знаете: rpool / ROOT)
  • Система работает нормально, но при обновлении ядра grub-probe лает ошибка, упомянутая выше
  • Я бы не хотел сейчас перезагружаться

Здесь обсуждается о grub-probe и о том, как это должно быть "просто лучше", но это помогает, пока это не произойдет. Я понял эту дискуссию.

Более подробно: полный экземпляр ошибки (для моей системы) выглядит так:

/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/ata-ADATA_SP550_2G1520009135-part1'.

Это скрыто во множестве деталей, выдаваемых командой apt для установки графических драйверов (но это не важно).

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

Если я загляну в / dev, я увижу ссылки на все мои ZFS-диски, которые выглядят так:

lrwxrwxrwx  1 root     root           4 Sep 16 23:31 ata-WDC_WD10EARS-00Y5B1_WD-WMAV51436394-part1 -> sdc1
lrwxrwxrwx  1 root     root           4 Sep 16 23:31 ata-WDC_WD20EZRX-00D8PB0_WD-WCC4MK86SWX7-part1 -> sdd1
lrwxrwxrwx  1 root     root           4 Sep 16 23:31 ata-WDC_WD20EZRX-00D8PB0_WD-WCC4N1085683-part1 -> sde1
lrwxrwxrwx  1 root     root           4 Sep 16 23:31 ata-WDC_WD2500JS-22MHB0_WD-WCANK4053187-part1 -> sda1

... но особенно для ZIL-разделов.

Я могу проверить ситуацию, запустив:

$ sudo grub-probe /
grub-probe: error: failed to get canonical path of `/dev/ata-ADATA_SP550_2G1520009135-part1'.

Так вот вопрос: как исправить эту проблему, чтобы grub-probe вел себя?

Ответы [ 3 ]

3 голосов
/

Существует переменная окружения, которая исправляет это.Проблема из моего прочтения заключается в том, что Grub нравится идея «поддержки» zfs, но не идея исправления проблем, связанных с zfs в Grub.В частности, его плохая обработка ошибок с точки зрения поиска вещей.

Например, инструменты grub, поставляемые с Ubuntu 16.x, не смогут найти / загрузиться на томе ZFS без какого-либо вмешательства пользователя, а затем с радостью запишут некоторые (но не все) необходимые файлы, выводимые из любой утилитывы используете папку / boot, которую он только что сказал, что не может найти.

В любом случае ...

http://list.zfsonlinux.org/pipermail/zfs-discuss/2016-June/025765.html

To check if you have commit (should see full paths):

ZPOOL_VDEV_NAME_PATH=1 zpool status

If so you can do:

ZPOOL_VDEV_NAME_PATH=1 grub-whatevs ....

Вы можете передать переменную в качестве входных данных для необходимых утилит grub или указать ее как переменную оболочки в корневом каталоге .bashrc или .profile или что-то подобное с помощью ...

export ZPOOL_VDEV_NAME_PATH=YES

Переменная заставляет zpoolсообщать полные пути, а не относительные / dev пути к дискам, которые могут работать или не работать должным образом с zfs.Утилиты Grub проверяют состояние zpool для пулов zfs, чтобы найти диски, которые их содержат.Поэтому изменение вывода статуса zpool исправляет grub.

Я согласен, что пользователям не придется сталкиваться с этим, со ссылкой на комментарий феммулятора.Реальное решение?То же, что и любой другой проект с открытым исходным кодом, который томится в ошибках, которые никогда не исправляются.Разветвите это, исправьте это самостоятельно и прекратите использовать исходный проект / библиотеку / что угодно.Способ FOSS "уволить" кого-то, другими словами;).Очевидно, Debian знал об этой конкретной ошибке семь лет назад.

Это было единственное, что мешало мне успешно перенести загрузочный пул FreeBSD RaidZ в Ubuntu.Если кто-то еще попытается сделать что-то подобное, процесс будет относительно простым, если вы достаточно хорошо понимаете ZFS, чтобы игнорировать части документации из Grub и zfsonlinux, которые являются неправильными (например, установка для корневого набора данных не автоматического монтирования, а ...«Как именно он будет загружаться?».Несколько иронично, что Ubuntu в своих документах указывает на то, что загрузчик - самая небезопасная «особенность» Linux, что, как я полагаю, является правдой, но в этом случае это также явный недостаток Ubuntu.Мне потребовался бы час или два, чтобы перенести пул BSD ZFS на другую ОС, если бы я мог сделать это с помощью утилит Sun / Solaris, которые действительно работают.Проблема в том, что мне пришлось использовать утилиты Linux (например, Grub), которые в какой-то момент не работают (или почти не работают), так что в этом и заключаются другие два дня, которые я потратил на их исправление.Ubuntu будет намного лучше, если для загрузки не понадобится grub ...

1 голос
/

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

$ cd /dev
$ sudo ln -sf sdf1 /dev/disk/by-id/ata-ADATA_SP550_2G1520009135-part1
$ sudo ln -sf sdf3 /dev/disk/by-id/ata-ADATA_SP550_2G1520009135-part3
$ sudo ln -sf sdg1 /dev/disk/by-id/ata-SPCC_Solid_State_Disk_EB84076413B201101308-part1
$ sudo ln -sf sdg3 /dev/disk/by-id/ata-SPCC_Solid_State_Disk_EB84076413B201101308-part3

(раздел 2 на обоих дисках зеркально отображается как ZIL для home, но grub-probe не заботится об этом)

Формула для этого - определить, какие диски нужны grub-probe, а затем создать символические ссылки для них в соответствии с шаблоном:

$ sudo ln -sf {sdname}{partN} /dev/disk/by-id/{diskid}-part{partN}

Вы можете определить требуемые диски, повторив команду $ sudo grub-probe / и создавая ссылки, пока она не будет довольна и в конечном итоге сообщит:

$ sudo grub-probe /
zfs

Пока оно не будет счастливым, вы увидите жалобы, похожие на:

$ sudo grub-probe /
grub-probe: error: failed to get canonical path of `/dev/disk/by-id/ata-ADATA_SP550_2G1520009135-part3'.

Обратите внимание, что он жалуется конкретно на -part3 и имя диска ata-ADATA_SP550... Создайте ссылку:

Найдите диск, соответствующий ata-ADATA_SP...., запустив:

$ ls -l /dev/disk/by-id | grep ata-ADATA_SP
lrwxrwxrwx 1 root root  9 Sep 17 13:45 ata-ADATA_SP550_2G1520009135 -> ../../sdf
lrwxrwxrwx 1 root root 10 Sep 17 13:49 ata-ADATA_SP550_2G1520009135-part1 -> ../../sdf1
lrwxrwxrwx 1 root root 10 Sep 17 13:51 ata-ADATA_SP550_2G1520009135-part2 -> ../../sdf2
lrwxrwxrwx 1 root root 10 Sep 17 13:50 ata-ADATA_SP550_2G1520009135-part3 -> ../../sdf3

Обратите внимание, что это sdf, поэтому ваша команда ссылки становится такой:

$ sudo ln -sf /dev/sdf3 /dev/disk/by-id/ata-ADATA_SP550_2G1520009135-part3

Промыть и повторять до тех пор, пока команда grub-probe не будет выполнена успешно. Если вы знаете, что делаете, и знаете, какие разделы используются любыми дисками, участвующими в пуле ROOT, непременно перейдите непосредственно к концу и свяжите их вместо использования grub-probe, чтобы сообщить вам, что делать.

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

0 голосов
/

Что за ошибка / исправление ZFS для этого? пользователи не должны иметь дело с этим -> https://github.com/zfsonlinux/grub/issues/5

Добро пожаловать на сайт proUbuntu, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...