Error diskfilter writes are not supported

Обходим проблему GRUB - boot diskfilter writes are not supported на LVM или RAID. Описание ошибкиПри запуске системы, после вывода меню загрузчика GRUB появляется на экране ошибка: boot diskfilter writes are not supported Этот

Описание ошибки

При запуске системы, после вывода меню загрузчика 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):

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:

  1. backup /boot/grub2/grub.cfg, for recovery in case of crash;

  2. cd into /etc/grub.d/ and edit scripts containing save_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 with chmod -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;

  3. edit file /etc/default/grub; make sure GRUB_SAVEDEFAULT is set to
    false or GRUB_SAVEDEFAULT doesnt exist;

  4. 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.

Понравилась статья? Поделить с друзьями:
  • Error disk hd1 gpt1 not found
  • Error disk 1 not in drive kotf
  • Error discovering pytest tests
  • Error disc read error occurred press ctrl alt del to restart
  • Error disable recovery cisco