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