Описание ошибки
При запуске системы, после вывода меню загрузчика GRUB появляется на экране ошибка:
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):
if [ -s $prefix/grubenv ]; then
load_env
fi
Проблема с командой чтения load_env не проявляется, но проявляется с командой
сохранения
save_env которая сохраняет переменные окружения
только
на простых разделах диска (она не может запуститься внутри диска RAID или LVM как следует из документации).
Простое решение
Простое решение заключается в том, чтобы отключить в конфиге использование команды записи save_env выставив запрет на её использование в конфигурационном файле /etc/default/grub:
GRUB_SAVEDEFAULT="false"
Затем, следует сгенерировать конечный конфиг-файл GRUB’а /boot/grub/grub.cfg с обновленными параметрами командой:
sudo update-grub
Минусы этого решения не значительны:
- Не будет возможности сохранять/запоминать состояние между перезагрузками системы. Например, не будет возможности при выборе другого пункта меню загрузки GRUB запомнить его как дефолтный.
- Если содержимое GRUB в /boot/grub перенесётся вами на другой раздел, на котором файловые системы будут поддреживаться GRUB’ом, то потребуется установить опцию равную значению true, а затем обновить конфиг GRUB’а запустив sudo update-grub
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
- Печать
Страницы: [1] Вниз
Тема: Ошибка grub: diskfilter writes are not supported (Прочитано 1544 раз)
0 Пользователей и 1 Гость просматривают эту тему.
AlexPRN
Всем привет. Заменил жесткий диск в ноуте. Систему со старого на новый пересаживал вручную, пр помощи cp. Попутно переполз на LVM (на старом диске была btrfs). Переход на новый диск завершился успешно, система грузится и работает. Но есть маленькая проблема: при загрузке системы после выбора пункта меню в grub на экране выдается следующее сообщение:
Ошибка: diskfilter writes are not supported
И действительно, после нажатия любой клавиши на клавиатуре, система грузится нормально. Собственно вопрос: что это и как от этого избавиться?
Нажмите любую Клавишу для продолжения...
EEE PC 900 все еще жив благодаря Linux
it0r
…
пр помощи cp. Попутно переполз на LVM…
м.б. есть смысл правильно переустановить?
ТУТ — это дерево. А ЗДЕСЬ — это МЕСТО…. Так что ТУТ — это не ЗДЕСЬ.
AlexPRN
м.б. есть смысл правильно переустановить?
Не знаю. Мне кажется, смысла нет. Переезд прошел успешно, все работает. Мелкая проблема в grub не в счет. Скорее всего, что-то не так в конфигах grub либо в опциях монтирования. Думаю, это не повод для переустановки ОС.
EEE PC 900 все еще жив благодаря Linux
it0r
вот есть такая «беда» в системе как аттрибуты на файлы, папки, симлинки, хардлинки и связи…
не растерять их — вот задача копирования, по крупице — dd, tar… или кто то переносит «потокомтрубой» сектора на сектор….
здесь же, просто копирование — однозначно скопировано, но связи?
есть и костыли и решения по теме, НО наслаивать ошибки на ошибки?
поставлю для себя в наблюдение (м.б. я ошибаюсь — более знающие люди поправят).
ТУТ — это дерево. А ЗДЕСЬ — это МЕСТО…. Так что ТУТ — это не ЗДЕСЬ.
it0r
ну и м.б. fsck -n посмотреть?
ТУТ — это дерево. А ЗДЕСЬ — это МЕСТО…. Так что ТУТ — это не ЗДЕСЬ.
surfer
AlexPRN
AlexPRN,
http://askubuntu.com/questions/468466/why-this-occurs-error-diskfilter-writes-are-not-supported
Там есть и решение. Но это решение на системный баг при стандартной установке системы. Тут же. Вобщем, можете попробовать, но я почти уверен, что Вы только приоткрыли Ящик Пандорры. Наверняка там море ошибок вылезет в процессе использования системы. ИМХО — переустановите нормально.
Блин, как же я эту ссылку просмотрел в гугле. Проблему решило на 100%, спасибо! А насчет Ящика Пандоры — мир может спать спокойно. Копирование системы с диска на диск я производил при помощи команды
cp -a
. С ключом -a все ссылки копируются как есть, а также атрибуты и права доступа к файлам. Кстати, этот способ копирования системы — один из рекомендованных местной wiki.
EEE PC 900 все еще жив благодаря Linux
| toZen |
Копирование системы с диска на диск я производил при помощи команды
cp -a
. С ключом -a все ссылки копируются как есть, а также атрибуты и права доступа к файлам.
Правильно приготовленный ср может многое. По первому сообщению было ощущение, что чуть ли ни копипастили.
AlexPRN
собственно канноникал болт положила на это https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1274320
Небольшое дополнение: сегодня решил обновиться на 15.10 (до этого стояла 15.04), предварительно вернув исходный 00_header без фикса ошибки. И, о чудо, после обновления системы ошибка ушла. Значит, они все-таки это пофиксили
EEE PC 900 все еще жив благодаря Linux
- Печать
Страницы: [1] Вверх
when the /boot
partition is on lvm or raid, grub2 can emit the following error
message during boot:
error: diskfilter writes are not supported.
this is caused by save_env
commands in /boot/grub2/grub.cfg
; this command
saves environment variables into the grub environment block;
however, for safety reasons, the environment block is not available on lvm or
raid:
For safety reasons, this storage is only available when installed on a plain
disk (no LVM or RAID), using a non-checksumming filesystem (no ZFS), and using
BIOS or EFI functions (no ATA, USB or IEEE1275).
enabling lvm write looks impossible, as such request has been rejected before:
-
https://lists.gnu.org/archive/html/grub-devel/2009-11/msg00151.html
-
http://savannah.gnu.org/bugs/?32931
therefore, to fix the problem, you need to remove save_env
commands from
/boot/grub2/grub.cfg
; it is not recommended to edit this file manually;
instead, follow these steps:
-
backup
/boot/grub2/grub.cfg
, for recovery in case of crash; -
cd into
/etc/grub.d/
and edit scripts containingsave_env
commands; you
need to remove these commands, and make sure the script still works
correctly after your edit; if you dont want a script, you can also remove
its execution bit withchmod -x
; some scripts are related and need to be
kept in sync, so keep all or none of them;different distros can add different scripts; so the solutions vary across
distros; here are some solutions that may or may not match your distro:-
on ubuntu, visit this old thread;
-
on fedora, remove execution bit on these scripts:
chmod -x 08_fallback_counting 10_reset_boot_success 12_menu_auto_hide
these scripts look like crap, but i am not certain that changing them
will not break your system; tell me you have backed up the old config
and change them at your own risk;
-
-
edit file
/etc/default/grub
; make sureGRUB_SAVEDEFAULT
is set to
false
orGRUB_SAVEDEFAULT
doesnt exist; -
write to grub2 config file:
grub2-mkconfig -o /boot/grub2/grub.cfg
make sure
save_env
commands dont exist (or will never be run, if they
exist) in the new config file;
null
На этапе разбивки диска при инсталяции Debian 11 на будущий продуктивный сервер — была необходимость в использовании RAID1 для /boot раздела средствами инсталятора Debian (mdadm). Остальные разделы были помещены в LVM с аналогичным software RAID1 в другой md группе.
После этапа установки базовой системы, инсталятор не смог автоматически установить GRUB и предложил указать раздел самостоятельно, что также не помогло и установщик сообщал об ошибке grub-install. Переключившись в другой tty была замечена строка об ошибке со следующим содержанием: «Error: diskfilter writes are not supported».
Сразу хочется сообщить, что данная ошибка проявляется очень давно:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754921
Что такое diskfilter? Это модуль GRUB, который проверяет правильность чтения и записи для RAID, а для LVM модуль называется lvm.
При загрузке системы, GRUB обращается к файлу /boot/grub/grubenv. Данный файл необходим для записи состояния загрузки, например запоминание выбора необходимого ядра при следующей перезагрузке системы. GRUB даёт возможность записать необходимое количество информации в данном «Environment-block».
Команда load_env в GRUB загружает все переменные в Environment-block, а команда save_env сохраняет их для последующего сохранения состояния при перезагрузке.
Исходя из документации «The GRUB environment block»:
«For safety reasons, this storage is only available when installed on a plain disk (no LVM or RAID), using a non-checksumming filesystem (no ZFS), and using BIOS or EFI functions (no ATA, USB or IEEE1275).»
Данная выдержка сообщает о том, что команда save_env может работать только в простых установках и не даёт возможности её использования внутри RAID или LVM инсталяции.
Более подробно об Environment-block: https://www.gnu.org/software/grub/manual/grub/html_node/Environment-block.html#Environment-block
Workaround.
Самое простое — использование простой инсталяции /boot раздела и при необходимости его backup на другой диск, например rsync в связке с cron на нужный период времени.
Второе — в скрипте «/etc/grub.d/00_header» выставить quick_boot=0, но после изменения данной переменной — не будет возможности использования функций GRUB меню.
Description
Harald Reindl
2013-09-10 11:50:08 UTC
Created attachment 795965 [details]
photo of bootscreen
after upgrade to F19 GRUB2 comes up with "error: diskfilter writes are not supported" and waits some seconds to press a key and thanks god boots after that automatically to not break wakeup-on-lan (see also attachment)
but what is this nonsense?
Personalities : [raid1] [raid10]
md2 : active raid10 sda3[0] sdc3[1] sdb3[3] sdd3[2]
3875222528 blocks super 1.1 512K chunks 2 near-copies [4/4] [UUUU]
bitmap: 2/29 pages [8KB], 65536KB chunk
md1 : active raid10 sda2[0] sdc2[1] sdb2[3] sdd2[2]
30716928 blocks super 1.1 512K chunks 2 near-copies [4/4] [UUUU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md0 : active raid1 sda1[0] sdc1[1] sdd1[2] sdb1[3]
511988 blocks super 1.0 [4/4] [UUUU]
unused devices: <none>
_________________________________________________
[root@rh:~]$ cat /boot/grub2/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
terminal_output console
set timeout=1
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Fedora, with Linux 3.10.11-200.fc19.x86_64' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.10.11-200.fc19.x86_64-advanced-b935b5db-0051-4f7f-83ac-6a6651fe0988' {
savedefault
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod part_msdos
insmod diskfilter
insmod mdraid1x
insmod ext2
set root='mduuid/1d691642baed26df1d1974964fb00ff8'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='mduuid/1d691642baed26df1d1974964fb00ff8' 1de836e4-e97c-43ee-b65c-400b0c29d3aa
else
search --no-floppy --fs-uuid --set=root 1de836e4-e97c-43ee-b65c-400b0c29d3aa
fi
linux /vmlinuz-3.10.11-200.fc19.x86_64 root=UUID=b935b5db-0051-4f7f-83ac-6a6651fe0988 ro divider=10 audit=0 rd.plymouth=0 plymouth.enable=0 rd.md.uuid=b7475879:c95d9a47:c5043c02:0c5ae720 rd.md.uuid=1d691642:baed26df:1d197496:4fb00ff8 rd.md.uuid=ea253255:cb915401:f32794ad:ce0fe396 rd.luks=0 rd.lvm=0 rd.dm=0 elevator=deadline selinux=0 net.ifnames=0 biosdevname=0 clocksource=hpet noisapnp noresume nf_conntrack.acct=1 printk.time=0 nmi_watchdog=0 pcie_aspm=force i915.i915_enable_rc6=7 i915.i915_enable_fbc=1 i915.lvds_downclock=1 consoleblank=0 acpi_osi=Linux vconsole.font=latarcyrheb-sun16 vconsole.keymap=de-latin1-nodeadkeys locale.LANG=de_DE.UTF-8
initrd /initramfs-3.10.11-200.fc19.x86_64.img
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
Comment 1
Harald Reindl
2013-09-10 14:12:41 UTC
oh, and remove the line "insmod diskfilter" from "grub.cfg" does not change anything
Comment 2
Michal Schmidt
2013-10-08 08:21:52 UTC
I'm seeing the same error. I found the message mysterious, so I took a look at the code and discovered the following: - "diskfilter" is GRUB's implementation detail for working with LVM and MD RAID devices. - Writing to these kinds of devices is not implemented in GRUB. - The error may have always been there, but 0085-grub-core-disk-diskfilter.c-grub_diskfilter_write-Ca.patch made it more visible. - The reason GRUB is trying to write to the device could be it's following the "save_env" commands in the config file.
Comment 3
Harald Reindl
2013-10-08 08:30:44 UTC
interesting - why does GRUB try to write anything? it has not to touch any FS at boot GRUB2 is such a large step backwards because it is more or less it's own operating system with the most ugly configuration one could design while grub-legacy was a boot-manager and nothing else finally we end in 3 full operating systems * grub * dracut * linux
Comment 4
Harald Reindl
2013-10-08 08:44:18 UTC
/etc/default/grub with these options avoids a lot of crap on Fedora-Only machines GRUB_TIMEOUT=1 GRUB_DISTRIBUTOR="Fedora" GRUB_SAVEDEFAULT="false" GRUB_TERMINAL_OUTPUT="console" GRUB_DISABLE_RECOVERY="true" GRUB_DISABLE_SUBMENU="true" GRUB_DISABLE_OS_PROBER="true"
Comment 5
Michal Schmidt
2013-10-08 12:52:39 UTC
Note that GRUB Legacy had a similar feature: the "savedefault" command.
Comment 6
Harald Reindl
2013-10-08 12:54:53 UTC
but it did not halt boot for some seconds with a useless error message and "press any key to continue" as well it did not mess up with submenues and whatever nor did it freeze the machine while edit the kernel line which happens with GRUB2 way too often if you need to edit it
Comment 7
Michal Schmidt
2013-10-08 13:15:05 UTC
My comment #5 was just to show that the assertion "it has not to touch any FS at boot" is false and that GRUB Legacy was no different in this regard. I already commented on the increased visibility of the error, in comment #2.
Comment 8
eileon
2014-04-10 14:06:06 UTC
For Fedora 20 in /etc/default/grub GRUB_SAVEDEFAULT="false" makes the difference (after grub2-mkconfig)
Comment 9
Fedora End Of Life
2015-01-09 19:47:14 UTC
This message is a notice that Fedora 19 is now at end of life. Fedora has stopped maintaining and issuing updates for Fedora 19. It is Fedora's policy to close all bug reports from releases that are no longer maintained. Approximately 4 (four) weeks from now this bug will be closed as EOL if it remains open with a Fedora 'version' of '19'. Package Maintainer: If you wish for this bug to remain open because you plan to fix it in a currently maintained version, simply change the 'version' to a later Fedora version. Thank you for reporting this issue and we are sorry that we were not able to fix it before Fedora 19 is end of life. If you would still like to see this bug fixed and are able to reproduce it against a later version of Fedora, you are encouraged change the 'version' to a later Fedora version prior this bug is closed as described in the policy above. Although we aim to fix as many bugs as possible during every release's lifetime, sometimes those efforts are overtaken by events. Often a more recent Fedora release includes newer upstream software that fixes bugs or makes them obsolete.
Comment 10
Fedora End Of Life
2015-02-17 17:08:00 UTC
Fedora 19 changed to end-of-life (EOL) status on 2015-01-06. Fedora 19 is no longer maintained, which means that it will not receive any further security or bug fix updates. As a result we are closing this bug. If you can reproduce this bug against a currently maintained version of Fedora please feel free to reopen this bug against that version. If you are unable to reopen this bug, please file a new report against the current release. If you experience problems, please add a comment to this bug. Thank you for reporting this bug and we are sorry it could not be fixed.