ZFS boot inside on the second partition inside a slice

Henri Hennebert hlh at restart.be
Tue Jun 21 09:51:26 UTC 2011


On 06/20/2011 15:51, John Baldwin wrote:
> On Saturday, June 18, 2011 5:04:07 am Henri Hennebert wrote:
>> On 06/17/2011 19:37, John Baldwin wrote:
>>> On Friday, June 17, 2011 1:06:22 pm Henri Hennebert wrote:
>>>> On 06/16/2011 19:35, John Baldwin wrote:
>>>>> On Thursday, June 16, 2011 8:45:41 am Zhihao Yuan wrote:
>>>>>> Exactly. The MFCed ZFSv28 is different from any patch maintained by
>>>>>> mm at . Maybe some untested changes involved.
>>>>>
>>>>> Can you try reverting this change:
>>>>>
>>>>> Author: jhb
>>>>> Date: Thu Apr 28 17:44:24 2011
>>>>> New Revision: 221177
>>>>> URL: http://svn.freebsd.org/changeset/base/221177
>>>>>
>>>>> Log:
>>>>>     Due to space constraints, the UFS boot2 and boot1 use an evil hack where
>>>>>     boot2 calls back into boot1 to perform disk reads.  The ZFS MBR boot blocks
>>>>>     do not have the same space constraints, so remove this hack for ZFS.
>>>>>     While here, remove commented out code to support C/H/S addressing from
>>>>>     zfsldr.  The ZFS and GPT bootstraps always just use EDD LBA addressing.
>>>>>
>>>>>     MFC after:    2 weeks
>>>>>
>>>>> Modified:
>>>>>     head/sys/boot/i386/boot2/Makefile
>>>>>     head/sys/boot/i386/common/drv.c
>>>>>     head/sys/boot/i386/zfsboot/Makefile
>>>>>     head/sys/boot/i386/zfsboot/zfsldr.S
>>>>>
>>>> I try with this revision (221177) reverted to no avail:
>>>> same error - 'read error'
>>>
>>> Hmm, ok.  No other ideas off the top of my head.
>>>
>> I make the same test under virtualbox and get:
>>
>> A critical error has occurred while running the virtual machine and the
>> machine execution has been stopped.
>>
>> I attach VBox.log.
>>
>> PS - the message 'ZFS: supported version 28' comes from my patch:
>>
>> Index: sys/boot/zfs/zfsimpl.c
>> ===================================================================
>> --- sys/boot/zfs/zfsimpl.c	(revision 212549)
>> +++ sys/boot/zfs/zfsimpl.c	(working copy)
>> @@ -61,6 +61,8 @@
>>    	STAILQ_INIT(&zfs_vdevs);
>>    	STAILQ_INIT(&zfs_pools);
>>
>> +	printf("ZFS: supported version %u\n", (unsigned) SPA_VERSION);
>> +
>>    	zfs_temp_buf = malloc(TEMP_SIZE);
>>    	zfs_temp_end = zfs_temp_buf + TEMP_SIZE;
>>    	zfs_temp_ptr = zfs_temp_buf;
>
> Hmm, can you add printfs and narrow down where the hang happens (or which
> reads are failing)?  The VBOX log seems to make no sense.  It shows the
> CPU trying to call into the BIOS from within protected mode in the loader
> but that shouldn't ever happen (note a cs of 0x2b (which is the loader's
> %cs selector) but an eip that looks like a cs:ip of a BIOS routine).
>
I just try to put printf but I get only 'Read error' without any of my 
printf.

Previously event my printf in zfs_init don't show up on the console of 
my netbook. Under VBox it was printed.

Maybe printf is not allowed so soon in zfsboot ?

For the record, I write the bootcode with this 2 commands after booting 
with mfsbsd (from mm@) and fetching zfsboot in /tmp:

dd if=/tmp/zfsboot of=/dev/ad0s2a bs=512 count=1
dd if=/tmp/zfsboot of=/dev/ad0s2a bs=512 skip=1 seek=1024


My debugging patch in zfsboot.c:

[root at morzine zfsboot]# svn diff zfsboot.c
Index: zfsboot.c
===================================================================
--- zfsboot.c	(revision 223081)
+++ zfsboot.c	(working copy)
@@ -447,10 +447,16 @@
      off_t off;
      struct dsk *dsk;

+	printf("==>trying to boot\n");
+
      dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - 
__base);

+	printf("==>about to call bios_getmem()\n");
+
      bios_getmem();

+	printf("==>bios_getmem() completed\n");
+	
      if (high_heap_size > 0) {
  	heap_end = PTOV(high_heap_base + high_heap_size);
  	heap_next = PTOV(high_heap_base);
@@ -482,6 +488,8 @@

      autoboot = 1;

+	printf("==>about to call zfs_init()\n");
+	
      zfs_init();

      /*


Henri


More information about the freebsd-stable mailing list