Status

Proposal

Gvinum 'move', 'rename'

With the releases of FreeBSD 5.3 and 5.4, FreeBSD has been moving away from "old-style" vinum towards GEOM-enabled gvinum for logical volume management. While gvinum is a mostly feature-complete replacement for vinum, it does not implement the 'move' or 'rename' verbs which are rather useful when reorganizing one's volume layout, the alternative being a tedious process of deleting and recreating subdisks, plexes, or volumes. Additionally, gvinum is nearly completely undocumented, which contributes to the perception of gvinum as an unfinished project. I propose to implement 'move' and 'rename', and to contribute documentation including at least a manual page and example configuration files, and (if time permits) an updated version of the FreeBSD Handbook sections on vinum.

I expect to take about one to two weeks (budgeting 10 to 15 hours per week) to understand the internals of gvinum and the vinum GEOM class, following which I expect implementing 'move' and 'rename' to be relatively straightforward --- probably a matter of another week or two. At this point, documenting gvinum can start and run in parallel with releasing the updated source code for testing by other users and fixing reported bugs. I expect to have completed the code, man page, and configuration files by approximately August 15th.

Preliminary Timeline

Technical Plan

Userland

* Add 'gvinum_rename', 'gvinum_move' functions to sbin/gvinum/gvinum.c

        req = gctl_get_handle();
        gctl_ro_param(req, "class", -1, "VINUM");
        gctl_ro_param(req, "verb", -1, "move");
        gctl_ro_param(req, "cmd", -1, "move" | "mv");
        gctl_ro_param(req, "argc", sizeof(int), &argc);
        gctl_ro_param(req, "flags", sizeof(int), &flags);
        gctl_ro_param(req, "argvX", ...);
        gctl_ro_param(req, "destination", -1, drive name);
        gctl_ro_param(req, "objectX", -1, objectX name);
                        ...
        gctl_issue(req);
        ... error handling
        gctl_free(req);
        return;

        req = gctl_get_handle();
        gctl_ro_param(req, "class", -1, "VINUM");
        gctl_ro_param(req, "verb", -1, "rename");
        gctl_ro_param(req, "cmd", -1, "rename");
        gctl_ro_param(req, "argc", sizeof(int), &argc);
        gctl_ro_param(req, "flags", sizeof(int), &flags);
        gctl_ro_param(req, "argvX", ... argvX ...);
        gctl_ro_param(req, "object", -1, argv[..]);
        gctl_ro_param(req, "newname", -1, argv[..]);
        gctl_issue(req);
        ... error handling
        gctl_free(req);
        return;

Kernel

* Add hooks for 'rename', 'move' verbs in

* Add 'rename' verb to VINUM GEOM class

* Add 'move' verb to VINUM GEOM class

GvinumMoveRename (last edited 2008-06-17 21:37:21 by localhost)