Diskfilter writes are not supported ubuntu ошибка

Обновлено: 07.07.2024

Однако у меня есть проблема с записью grub и diskfilter writes are not supported ошибка.

Последовательность установки:1) Windows -> sda UEFI 2) Linux -> sdb UEFI

После установки Windows я начал устанавливать ubuntu 17.04 и я хотел использовать LVM на sdb затем настроить его в качестве первого загрузочного диска в настройке BIOS.

Может кто-нибудь сказать мне, что не так в моей текущей настройке?

1 ответ 1

Что не так, вы должны сначала понять UEFI, в частности, и ESP (системный раздел EFI) и его местоположение, которое всегда находится в sda , первом диске.

Предполагая, что Windows установлена на заводе (или пользователь установлен в режиме UEFI), ESP уже находится на том же диске, на котором установлена Windows, и должен использоваться как есть, независимо от расположения системного раздела другой ОС. Нет необходимости создавать другой раздел EFI, и это невозможно сделать с обоими подключенными дисками.

Просто сделай как обычно:

Теперь у вас должны быть обе загрузочные записи в ESP, и при настройках UEFI вы сможете загружать каждую из них независимо. Затем вы можете настроить его для загрузки Linux, и дистрибутив Linux обычно устанавливает и использует некоторый дополнительный загрузчик, Grub является текущим выбором большинства основных дистрибутивов. Grub также должен включать в себя запись для Windows, но если не просто сделать update-grub в терминале.

Итак, в двух словах, не меняйте порядок загрузки на второй диск, просто используйте запись Linux, если вы хотите использовать Grub для загрузки каждой из ОС, как при "втором шансе" независимо от порядка загрузки UEFI , На рисунке ниже приведен пример, это меню сильно различаются в зависимости от производителя и версии прошивки:


Примечание. Использование шифрования LVM + на "диске Linux" не меняет процесс или требует дополнительных действий.

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

Учебники (How-To & F.A.Q): Исправляем ошибку GRUB - boot diskfilter writes are not supported на LVM или RAID

boot diskfilter writes are not supported

Этот bug (ошибка) хорошо изложен здесь. Ниже дан небольшой отрывок из оригинального ответа, его перевод и инструкция по устранению проблемы.

Краткое описание работы GRUB влияющая на проблему

Когда GRUB загружается, он зачитывает переменные окружения (environment variables) из ранее сохраненного файла /boot/grub/grubenv. Этот файл называется GRUB Environment Block. Из документации GRUB:

Часто полезно иметь возможность запоминать небольшое количество информации от одной загрузки к другой. Например, вы можете захотеть установить пункт меню по умолчанию на основе того, что было выбрано в последний раз. GRUB намеренно не реализует поддержку записи файлов, чтобы минимизировать вероятность того, чтобы загрузчик в случае чего, не отвечал за повреждение файловой системы. Поэтому, файл конфигурации GRUB не может просто создать файл обычным способом. Тем не менее, GRUB предоставляет «environment block», который можно использовать для сохранения небольшого количества состояния.

environment block представляет собой предварительно выделенный 1024-байтовый файл, который обычно находится в /boot/grub/grubenv. Во время загрузки, команда load_env загружает из нее переменные среды, а команда save_env сохраняет в ней переменные среды. Из работающей системы утилиту grub-editenv можно использовать для редактирования environment block.

По соображениям безопасности это хранилище доступно только при установке на обычном диске (без LVM или RAID), с использованием файловой системы без контрольной суммы (не ZFS) и с использованием функций BIOS или EFI (не ATA, USB или IEEE1275).

grub-mkconfig использует эту возможность для реализации GRUB_SAVEDEFAULT

Поведение чтения environment block можно найти в /etc/grub.d/00_header (update-grub использует этот файл для генерации файла /boot/grub/grub.cfg):


Проблема с командой чтения load_env не проявляется, но проявляется с командой сохранения save_env которая сохраняет переменные окружения только на простых разделах диска (она не может запуститься внутри диска RAID или LVM как следует из документации).

Простое решение

Простое решение заключается в том, чтобы отключить в конфиге использование команды записи save_env выставив запрет на её использование в конфигурационном файле /etc/default/grub:

upstream GRUB has a 'diskfilter' module for dealing with LVM (lvm2), Device Mapper (dmsetup), Multiple Device (mdadm). The module only supports reading from these devices.

Comments in bug 527401 (specifically comment 9) suggests that perhaps grub does not (yet?) support raid versions 1.0, 1.1 or 1.2

Переделал суперблок на версию 0.9. Не помогло.

здесь предлагают сделать .map-файл

Параметр --device-map=/boot/grub/device.map наверное можно запихнуть принудительно, но не через grub-install.

Если требуется установить файлы загрузчика в другой каталог, его можно указать в опции --boot-directory . С этой опцией можно легко установить GRUB2 на диск с другой системой (устанавливаемой или исправляемой) без чрута, достаточно правильно указать текущий путь к смонтированному каталогу для установки и текущее имя устройства

С опцией тоже попробовал - то же самое:

перепробовал комбинации:
v1.0, v1.0 + опция, v0.9, v0.9 + опция v1.0 + .map-файл, v1.0 + .map-файл + опция, v0.9 + .map-файл, v0.9 + .map-файл + опция
всё не работает одинаково.

На всякий случай разделы:

Инфа про суперблок тут (v1.0)

Можно ли установить GRUB на RAID1?
===
теоретически, для этого нужно:
1) занулить оба диска
2) создать деградированный RAID
3) поделить диск на разделы (одним из двух способов)
вариантов установки как минимум два - с GPT и без GPT
4) создать LVM
5) отформатировать логический раздел (том)
у extfs есть параметр stridesize, который нужно указать при форматировании.
6) отключить LVM
7) отключить raid
8) подключить LVM (без RAID)
9) установить grub (на LVM он запишет свою --boot-directory)
10) отключить LVM
11) подключить RAID
12) подключить LVM (поверх RAID)
13) добавить остальные диски
можно ли это сделать сразу или добавлять нужно последовательно, дожидаясь окончания предыдущей синхронизации?
14) скопировать .iso systemresquecd
15) настроить конфиг, чтобы становился доступен sshd
===
шагов много, чтобы это проделать без ошибок пригодится скрипт (параметры - имена дисков, первого и остальных)

И что МЭ это значит?

Система загружается и, кажется, работает просто отлично.

Обновление: эта ошибка уже исправлена в Ubuntu 14.04 сервера и некоторые более новые версии Убунту. Вероятно, вы только должны запустить apt-получить обновление .

Почему эта ошибка возникает?

При загрузке системы, загрузчик GRUB считывает данные ( load_env ) в /загрузки/grub/grubenv . Этот файл называется жратвы среды заблокировать.

Из руководства жратвы:

Это часто полезно, чтобы быть в состоянии запомнить небольшое количество информации от одного ботинка к другому.

В момент загрузки, командной load_env (см. load_env) загружает переменные среды из него, и save_env (см. save_env) команда сохраняет переменные среды для его.

в grub-mkconfig использует этот объект для реализации GRUB_SAVEDEFAULT`

Такое поведение может быть основано в /etc/харч.д/00_header ( обновление-жратва использует этот файл, чтобы создать /загрузки/grub/харч.файл cfg ):

по соображениям безопасности, это хранилище доступно только при установке на обычный диск (без LVM или RAID), использования без проверки контрольных сумм файловой системы (не в ZFS), и через BIOS или EFI функции (не Ата, USB или IEEE1275).

Жратву recordfail функция использует оператора save_env , чтобы обновить состояние recordfail (см. [Убунту помочь - ему: &quot жратва 2](https://help.ubuntu.com/community/Grub2); последней загрузки не удалось, или загрузиться в режиме восстановления и" раздел). Однако, в Ubuntu 14.04 (и в последних версиях Debian), то заявление save_env` (внутри объекта recordfail) используется, даже если grub установлен в LVM или RAID-массива.

Как жратва защитить себя от записи в RAID и LVM?

Читать/писать правильно в файловые системы, будет загружен соответствующий модуль.

Жратва использует diskfilter модуль ( diskfilter insmod ) в разделов RAID, и Д модуль LVM разделы.

Функция grub_diskfilter_read реализуется (и grub может прочитать файловую систему рейда). Однако, функция grub_diskfilter_write вызывает ошибку GRUB_ERR_NOT_IMPLEMENTED_YET`.

Почему с помощью quick_boot=0 решить проблему? И почему это неправильное решение?

Если вы посмотрите еще раз в файле /etc/харч.код D/00_header , вы увидите, что recordfail признакам используется только когда quick_boot=1 . Таким образом, изменение quick_boot` с 1 на 0 отключает функцию recordfail, отключает и пишет в рейд разделов/томов.

Что такое правильное решение?

Правильное решение, следует рассмотреть возможность отключения отчетность save_env когда жратвы внутри LVM или разделов RAID.

Идея этого патча:

Как применять правильное решение?

Читайте также: