Comment 0 for bug 1756517

Revision history for this message
TJ (tj) wrote :

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)