** Description changed:
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
+ # 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]
+ # 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]
+ 244198400 blocks super 1.0 [2/2] [UU]
- $ grub-install /dev/sda
- $ grub-install /dev/sdb
+ # 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 workaround is to create a /boot/grub/device.map using grub-probe to
+ get the correct GRUB identity:
- The responsible code is ./grub-core/disk/diskfilter.c:
+ # grub-probe -t bios_hints -d /dev/md0
+ mduuid/68143ebfa5bcfd733bca032a9afc0f72
+
+ $ echo "($(sudo grub-probe -t bios_hints -d /dev/md0)) /dev/md0" | sudo
+ tee -a /boot/grub/device.map
+
+ Should then have added:
+
+ (mduuid/68143ebfa5bcfd733bca032a9afc0f72) /dev/md0
+
+ After which, despite the warning message, this will install correctly:
+
+ # grub-install /dev/md0
+ Installing for i386-pc platform.
+ grub-install: warning: the drive name
`mduuid/68143ebfa5bcfd733bca032a9afc0f72' in device.map is incorrect. Using
hostdisk//dev/md0 instead. Please use the form [hfc]d[0-9]* (E.g. `hd0' or `
+ cd').
+ Installation finished. No error reported.
+
+
+ If we want it to work without needing to manually intervene (which requires
understanding the device.map syntax and that ignoring the warnings is OK), then
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");
- }
+ 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:
+ 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)
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1756517
Title:
grub-install: error: diskfilter writes are not supported
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1756517/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs