Problem updating bootcode on ZFS on root system with MBR

Andriy Gapon avg at FreeBSD.org
Tue Jan 21 10:47:08 UTC 2014


on 21/01/2014 11:35 Andrey V. Elsukov said the following:
> On 20.01.2014 23:32, Thomas Hoffmann wrote:
>> I am running 11.0-CURRENT (r260850) with zfs on root with MBR.
>>
>> After upgrading my 10.0-RELEASE (r260669) system to 11.0-CURRENT (r260850)
>> my zpools reported that they needed to be upgraded. So, I upgraded my
>> zpools and I am attempting to update the bootcode (as required). I managed
>> to get the boot1 stage code updated, but cannot get the boot2 stage code
>> updated. Here is what I have done:
>>
>> # sysctl kern.geom.debugflags=0x10
>> kern.geom.debugflags: 0 -> 16
>>
>> # dd if=/boot/zfsboot of=/tmp/zfsboot1 count=1
>> 1+0 records in
>> 1+0 records out
>> 512 bytes transferred in 0.014996 secs (34142 bytes/sec)
>>
>> # gpart bootcode -b /tmp/zfsboot1 /dev/ada0s1
>> bootcode written to ada0s1
>>
>> # dd if=/boot/zfsboot of=/dev/ada0s1a skip=1 seek=1024
>> dd: /dev/ada0s1a: Operation not permitted
>>
>> The final dd statement fails with "operation not permitted". In all my
>> research,  understood the initial sysctl command I ran would prevent this
>> particular error from happening.
>>
>> What do I need to do to get the boot2 code written to /dev/ada0s1a?
> 
> This will work only if ada0s1a isn't in use. The debugflags trick works
> only for whole disk, i.e. for geoms with rank=1. Another way is
> calculate needed offset and write bootcode directly to ada0.


And ultimately we should extend our ZFS interface with an ioctl to write a blob
to a boot code area of a specified ZFS leaf vdev.  This would the right way to
install zfsboot.

-- 
Andriy Gapon


More information about the freebsd-current mailing list