Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Jun 2015 23:42:02 +0530
From:      Prasad Joshi <prasadjoshi.linux@gmail.com>
To:        soc-status@freebsd.org
Cc:        Xin LI <d@delphij.net>
Subject:   Re: [gsoc15] dynamically discover bes
Message-ID:  <CALJbWert-6-0fa6_%2BdK0N8zcU053GyRSQ8hRoQ5DGfBxeGGu4g@mail.gmail.com>
In-Reply-To: <CALJbWerHWL8=P-hJ57V8SfZTyJ5uV9g-=a2x%2B3epGLuit0vn3w@mail.gmail.com>
References:  <CALJbWeobZj9BqDoYW5Si9NWFFxd2q=w1EsBPVOxcNML-vZF3aQ@mail.gmail.com> <CALJbWerHWL8=P-hJ57V8SfZTyJ5uV9g-=a2x%2B3epGLuit0vn3w@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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@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@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
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CALJbWert-6-0fa6_%2BdK0N8zcU053GyRSQ8hRoQ5DGfBxeGGu4g>