[gsoc15] dynamically discover bes

Prasad Joshi prasadjoshi.linux at gmail.com
Mon Aug 3 19:31:56 UTC 2015


Status Report
===========
1. Added flat zap support
2. Removed common, unnecessary code.
3. When machine bootsup, instead of waiting for a keypress to show
bootmenu, now it is displayed as soon as machine starts. If no key is
pressed, default BE is used for booting in 5 seconds

Tasks for coming week
==================
1. Fix broken sort functionality
2. Fix util.c and libstand.a compilation problem
3. Special keys for example arrow keys, home, pageup etc aren't working till now

On Tue, Jul 28, 2015 at 1:04 AM, Prasad Joshi
<prasadjoshi.linux at gmail.com> wrote:
> Status report
> ==========
> The BEs menu is working. With my code changes, when machine is booted
> by default gptzfsboot tries to boot an active BE. However, if user
> presses any key, the code finds out all BEs and displays menu for
> selection to user. Once user selects a BE to boot from, appropriate
> information is passed to next stage of boot loader.
>
> Tasks for coming week
> =================
> 1. I disabled some of the existing gptzfsboot code which handles
> serial console. I will try to enable it again and check if menu
> functionality works on serial console.
>
> Thanks and Regards,
> Prasad
>
> On Sun, Jul 12, 2015 at 10:03 PM, Prasad Joshi
> <prasadjoshi.linux at gmail.com> wrote:
>> Status report for past two weeks
>> =========================
>> - Last two weeks I struggled to get non-active BE to boot completely -
>> after zfs mount -a all files in /dev/ used to disappear. Finally
>> disabling canmount property on each dataset helped me boot non-active
>> BEs.
>>
>> - I added code to pass mountpoint information from gptzfsboot to
>> zfsloader, then from zfsloader I could set vfs.root.mountfrom env
>> variable.
>>
>> - Added code to find timestamp of each BE clone, with this change BEs
>> could now be sorted on either timestamp, BE name, or object number
>>
>> Tasks For coming week
>> ==================
>> 1. start the initial implementation of menu functionality.
>>
>> On Tue, Jun 30, 2015 at 7:26 PM, Prasad Joshi
>> <prasadjoshi.linux at gmail.com> wrote:
>>> Week 5 Update
>>>
>>> - I did not work on GSoC for 3 days in this week. Had to attend full
>>> day sessions in the University.
>>> - Last week I was faced with a problem with booting alternate
>>> (non-active) BE. Plan in this week was to locate the problem. It seems
>>> like, during bootup zfsloader needs to initialize libzfs library. The
>>> libzfs library initialization fails because '/dev/zfs' cannot be
>>> opened. I verified the zfs kernel modules, which create the device are
>>> loaded. I think, and as suggested by mentor, I will have to set
>>> vfs.root.mountfrom environment variable during bootup.
>>>
>>> Thanks and Regards,
>>> Prasad
>>>
>>> On Mon, Jun 22, 2015 at 11:42 PM, Prasad Joshi
>>> <prasadjoshi.linux at gmail.com> wrote:
>>>> Week 4 update
>>>>
>>>> - I have been able to discover BEs on console. I could detect active BE.
>>>> Created list of BEs. Code to sort BEs on object number, name, or timestamp
>>>> is added.
>>>>
>>>> - I am able to boot from nonactive BE to some extent. At the moment, code
>>>> requires me to enter BE number to boot from.
>>>>
>>>> Tasks next week
>>>> 1. Identify a problem with be bootup.
>>>> 2. Pass mount point info through env variable to loader.
>>>> 3. Start with console based menu.
>>>>
>>>> Thanks and Regards,
>>>> Prasad
>>>>
>>>> On Jun 15, 2015 7:48 PM, "Prasad Joshi" <prasadjoshi.linux at gmail.com> wrote:
>>>>>
>>>>> Week 3 status
>>>>> ==========
>>>>> After understanding on disk representation of snapshots and clones, I
>>>>> have been able to find names of the BEs created using beadm command. I
>>>>> could print the BE names on console.
>>>>>
>>>>> The next task would be to convert BE names to object numbers, create
>>>>> list of BEs.
>>>>>
>>>>> Thanks and Regards,
>>>>> Prasad
>>>>>
>>>>> On Tue, Jun 9, 2015 at 6:36 AM, Prasad Joshi
>>>>> <prasadjoshi.linux at gmail.com> wrote:
>>>>> > Last week I mostly worked on understanding beadm and gptzfsboot code
>>>>> >
>>>>> > beadm create prepares new BE by creating a snapshot and clone of that
>>>>> > snapshot. beadm activate command sets bootfs property of the POOL.
>>>>> > bootfs property contains object number of active dataset object.
>>>>> > During bootup gptzfsboot probes all the disks, creating SPA for any
>>>>> > valid pool. gptzfsboot assumes the first pool it finds as a primary
>>>>> > pool, it then reads meta object set, then tries to find object nunber
>>>>> > of active dataset object either through
>>>>> > a. bootfs - it would be set if BE was already created
>>>>> > b. mos->properties_zap->root_dataset->dd_head_dataset_obj (through
>>>>> > root_datasets bonus buffer)
>>>>> > Once the object number is obtaind gptzfsboot mounts the dataset.
>>>>> >
>>>>> > After mounting, few files are looked up like /boot/config or
>>>>> > /boot.config for presense of boot command (did not went into details
>>>>> > of this). Then (if keyboard is not hit), gptzfsboot execs
>>>>> > /boot/zfsloader. If gptzfsboot is interrupted by keyboard, then it
>>>>> > displays default BE or POOL it is trying to boot from (using
>>>>> > zfs_rlookup() to map active dataset object to string BE name). Though
>>>>> > I haven't checked this but through serial console user would be
>>>>> > allowed to enter other pool or BE to boot from.
>>>>> >
>>>>> > I could not go into details of how gptzfsboot reads /boot/zfsloader from
>>>>> > disk.
>>>>> >
>>>>> > Pending Tasks
>>>>> > =============
>>>>> > 1. Understand upon keyboard interruption, how user entered zfs paths
>>>>> > (format [zfs:pool/filesystem:][/path/to/loader]) are converted in
>>>>> > object numbers?
>>>>> > 2. Learn ZFS on disk format in more details so as to identify active
>>>>> > dataset object numbers of all BEs. Once the object numbers are
>>>>> > available, I can use zfs_rlookup() function to map object number to
>>>>> > printable pool name.
>>>>> > 3. Prepare library for console based menu.
>>>>> >
>>>>> > Plan for next week
>>>>> > ==================
>>>>> > Pending task 2 above


More information about the soc-status mailing list