Это сообщение появляется при выходе из меню Grub и перед заставкой Ubuntu.
Как мне исправить проблему, чтобы очистить сообщение?
И что это значит?
error: Diskfilter writes are not supported
Система загружается и, кажется, работает просто отлично.
Ответы:
Это ошибка!
Эта ошибка возникает в самой последней версии Ubuntu Server LTS (Ubuntu Server 14.04 LTS), когда вы создаете загрузочный раздел (или корневой раздел, если загрузочный раздел не существует) внутри LVM или раздела RAID. ,
Вы можете получить больше информации об этой ошибке в Ubuntu Launchpad: Ошибка # 1274320 «Ошибка: запись в дисковый фильтр не поддерживается» .
Обновление: эта ошибка уже исправлена в Ubuntu Server 14.04 и некоторых более новых версиях Ubuntu. Вероятно, вам нужно только бежать
apt-get upgrade
.Почему эта ошибка возникает?
Когда система загружается, GRUB читает (
load_env
) данные в/boot/grub/grubenv
. Этот файл называется GRUB Environment Block .Из руководства GRUB:
Это поведение может быть основано
/etc/grub.d/00_header
(update-grub
использует этот файл для генерации/boot/grub/grub.cfg
файла):Проблема в том, что
save_env
оператор работает только в простых установках (вы не можете работатьsave_env
внутри диска RAID или LVM). Из руководства GRUB:Функция GRUB recordfail использует
save_env
оператор для обновления состояния ошибки записи (см. Справку Ubuntu - Grub 2 , раздел «Последняя загрузка не выполнена или загрузка в режим восстановления»). Однако в Ubuntu 14.04 (и в последних версиях Debian)save_env
оператор (внутри функции recordfail) используется, даже если GRUB установлен в LVM или RAID.Давайте посмотрим строки от 104 до 124 в
/etc/grub.d/00_header
:GRUB корректно пропускает функцию ошибки записи при использовании неподдерживаемых файловых систем (btrfs, zfs и т. Д.), Но не пропускает LVM и RAID в любой момент .
Как GRUB защищает себя от записи внутри RAID и LVM?
Для правильного чтения / записи в файловых системах GRUB загружает соответствующий модуль.
GRUB использует модуль diskfilter (
insmod diskfilter
) в разделах RAID и модуль lvm в разделах LVM.Давайте посмотрим реализацию чтения / записи модуля diskfilter :
Я вставляю код здесь (строки от 808 до 823). Предупреждение, показанное в этом вопросе, появляется в строке 821:
grub_diskfilter_read
Функция реализована (и GRUB может читать RAID файловые системы). Однако этаgrub_diskfilter_write
функция вызываетGRUB_ERR_NOT_IMPLEMENTED_YET
ошибку.Почему использование
quick_boot=0
решает проблему? И почему это неправильное решение?Если вы посмотрите еще раз в
/etc/grub.d/00_header
коде, вы увидите, что указанная ошибка записи используется только тогда, когдаquick_boot=1
. Таким образом, изменениеquick_boot
от 1 до 0 отключает функцию сбоя записи и запрещает запись в раздел RAID / LVM.Тем не менее, он также отключит многие другие функции (запустите,
grep \$quick_boot /etc/grub.d/*
и вы увидите). Более того, если однажды вы смените/boot/grub
каталог за пределы RAID / LVM, функция записи по-прежнему будет отключена.В общем, это решение без необходимости отключает функции, и оно не является универсальным.
Какое правильное решение?
Правильное решение должно учитывать отключение
save_env
операторов, когда GRUB находится внутри разделов LVM или RAID.В системе Debian Bug Tracker был предложен один патч для реализации этого решения. Его можно найти по адресу : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754921.
Идея этого патча заключается в следующем:
grub-probe --target=abstraction "${grubdir}"
команду, чтобы узнать, какие модули абстракции GRUB использует для чтения / записи файлов в/boot/grub
каталоге;diskfilter
илиlvm
, пропуститеsave_env
оператор recordfail и запишите соответствующий комментарий в/boot/grub/grub.cfg
файл;# GRUB lacks write support for /dev/md0, so recordfail support is disabled.
Как правильно применить решение?
Если вы не хотите ждать, пока этот патч будет применен ребятами из Ubuntu / Debian в официальном коде, вы можете использовать мой патч
00_header
:источник
00_header
файл, не работало. Я не буду отключать,quick_boot
чтобы заставить его уйти.00_header
файл (как рекомендуется здесь) не будет работать. Я знаю, что то, что это работает для меня (и для Рарилсона Фрейтаса), не означает, что это обязательно сработает для всех. Но вы удостоверились, что дали правильные разрешения старому и новому00_header
и запускалиupdate-grub
? (Если вы только что отредактировали00_header
на месте, нетchmod
необходимости, ноupdate-grub
остается необходимым.)Я думаю, что эта ошибка возникает из-за рейда или LVM раздела.
Для временного решения этой проблемы:
Редактировать :
/etc/grub.d/10_linux
замещать
'quick_boot="1"' with 'quick_boot="0"'
Затем :
источник