[Bug 1756517] [NEW] grub-install: error: diskfilter writes are not supported

TJ ubuntu at iam.tj
Sat Mar 17 09:07:39 UTC 2018


Public bug reported:

This has and continues to affect all releases of Ubuntu including 18.04
and probably beyond.

This bug is to track potential fixes to allow writes for some common
scenarios - the easiest being a RAID-1 mirror where it is just a case of
mapping the writes to the underlying device nodes.

In summary, 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.

When trying to install to such a device the operation fails with:

$ grub-install /dev/md0
Installing for i386-pc platform.
grub-install: error: diskfilter writes are not supported.

There are work-arounds which involve identifying and operating on the
underlying device, e.g: for a RAID-1 mirror:

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb[1] sda[0]
      244198400 blocks super 1.0 [2/2] [UU]

$ grub-install /dev/sda
$ grub-install /dev/sdb

These cam be sub-optimal in some circumstances as well as breaking some
standard OS package-upgrade operations.


The responsible code is ./grub-core/disk/diskfilter.c:

static grub_err_t
  grub_diskfilter_write (grub_disk_t disk __attribute ((unused)),
       grub_disk_addr_t sector __attribute ((unused)),
       grub_size_t size __attribute ((unused)),
       const char *buf __attribute ((unused)))
  {
    return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
           "diskfilter writes are not supported");
  }


The read functionality gives some indication of how the write operation might be organised:

grub_diskfilter_read()
>read_lv()
>>read_segment()
>>>grub_diskfilter_read_node()
>>>>grub_disk_read()

It should be possible to factor out and re-use the common device and
offset calculation code from these functions since all but the actual
grub_disk_write() only do in-memory operations.


Related bugs:

Bug  #701351 "grub-install fails to install on a raid1 array" (same issue)
Bug #1274320 "Error: diskfilter writes are not supported" (boot-time fix)

** Affects: grub2 (Ubuntu)
     Importance: Low
     Assignee: TJ (tj)
         Status: Triaged

** Changed in: grub2 (Ubuntu)
       Status: New => Triaged

** Changed in: grub2 (Ubuntu)
   Importance: Undecided => Low

** Changed in: grub2 (Ubuntu)
     Assignee: (unassigned) => TJ (tj)

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to grub2 in Ubuntu.
https://bugs.launchpad.net/bugs/1756517

Title:
  grub-install: error: diskfilter writes are not supported

Status in grub2 package in Ubuntu:
  Triaged

Bug description:
  This has and continues to affect all releases of Ubuntu including
  18.04 and probably beyond.

  This bug is to track potential fixes to allow writes for some common
  scenarios - the easiest being a RAID-1 mirror where it is just a case
  of mapping the writes to the underlying device nodes.

  In summary, 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.

  When trying to install to such a device the operation fails with:

  $ grub-install /dev/md0
  Installing for i386-pc platform.
  grub-install: error: diskfilter writes are not supported.

  There are work-arounds which involve identifying and operating on the
  underlying device, e.g: for a RAID-1 mirror:

  $ cat /proc/mdstat
  Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
  md0 : active raid1 sdb[1] sda[0]
        244198400 blocks super 1.0 [2/2] [UU]

  $ grub-install /dev/sda
  $ grub-install /dev/sdb

  These cam be sub-optimal in some circumstances as well as breaking
  some standard OS package-upgrade operations.

  
  The responsible code is ./grub-core/disk/diskfilter.c:

  static grub_err_t
    grub_diskfilter_write (grub_disk_t disk __attribute ((unused)),
         grub_disk_addr_t sector __attribute ((unused)),
         grub_size_t size __attribute ((unused)),
         const char *buf __attribute ((unused)))
    {
      return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
             "diskfilter writes are not supported");
    }

  
  The read functionality gives some indication of how the write operation might be organised:

  grub_diskfilter_read()
  >read_lv()
  >>read_segment()
  >>>grub_diskfilter_read_node()
  >>>>grub_disk_read()

  It should be possible to factor out and re-use the common device and
  offset calculation code from these functions since all but the actual
  grub_disk_write() only do in-memory operations.

  
  Related bugs:

  Bug  #701351 "grub-install fails to install on a raid1 array" (same issue)
  Bug #1274320 "Error: diskfilter writes are not supported" (boot-time fix)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1756517/+subscriptions



More information about the foundations-bugs mailing list