1sunlabel.c is the source.  It should build Just Fine on any NetBSD
2machine; with -DDISTRIB, probably on many non-NetBSD machines - though
3it may require a little tweaking on some.  It should work on both
4big-endian and little-endian machines; though I have not personally
5tried it on anything but SPARC and sun3, I have heard one report that
6it worked on NetBSD/i386, which is little-endian.
7
8Usage: pass a single argument, which is the disk device or file you
9wish to read/write the label to/from.  sunlabel reads/writes only the
10first 512 bytes of its argument.  There are also some flags supported:
11
12	-d
13		takes an argument specifying the disk device (in case
14		you want to give something beginning with a -)
15	-m
16		says to ignore an incorrect magic number in the disk
17		label
18	-s
19		says to ignore checksum errors when reading the label
20	-n
21		says to synthesize a new label rather than reading
22		what's there
23	-q
24		quiet mode - don't print unnecessary babble (currently
25		this suppresses the "sunlabel>" prompt).
26
27Note that -fixmagic is dangerous, especially when combined with
28-fixsum, since it will then happily believe whatever garbage it may
29find in the label.  If you use these, you should check all values
30carefully, both the values printed by L and the partition table printed
31by P.
32
33sunlabel prints a prompt "sunlabel>" and expects commands.  You can
34type ? for help; as of this writing, the help is
35
36	? - print this help
37	L - print label, except for partition table
38	P - print partition table
39	[abcdefghijklmnop] <cylno> <size> - change partition
40	V <name> <value> - change a non-partition label value
41	W - write (possibly modified) label out
42	S - set label in the kernel (orthogonal to W)
43	Q - quit program (error if no write since last change)
44	Q! - quit program (unconditionally) [EOF also quits]
45
46(If built without special precautions, the S line is present only when
47built on NetBSD.)
48
49The a through p commands will accept, for the <size> parameter, the
50nnn/nnn/nnn syntax used by SunOS 4.x format(8).  (For those not
51familiar with this syntax, a/b/c means a cylinders + b tracks + c
52sectors.  For example, if the disk has 16 tracks of 32 sectors, 3/4/5
53means (3*16*32)+(4*32)+5=1669.  This calculation always uses the nsect
54and ntrack values as printed by the L command; in particular, if they
55are zero (which they will initially be if -new is used), this syntax is
56not very useful.  Some additional strings are accepted.  For the
57<cylno> parameter, "end-X" (where X is a partition letter) indicates
58that the partition should start with the first free cylinder after
59partition X; "start-X" indicates that the partition should start at the
60same place as partition X.  For the <size> parameter, "end-X" indicates
61that the partition should end at the same place as partition X (even if
62partition X ends partway through a cylinder); "start-X" indicates that
63the partition should end with the last cylinder before partition X; and
64"size-X" means that the partition's size should exactly match partition
65X's size.
66
67Note that sunlabel supports 16 partitions.  SunOS supports only 8.
68Labels written by sunlabel, when partitions i through p are all set
69offset=0 size=0, are identical to Sun labels.  If any of the "extended"
70partitions are nontrivial, information about them is tucked into some
71otherwise unused (as far as I can tell) space in the Sun label format.
72I don't know whether SunOS cares what's in that space; as far as I know
73only NetBSD actually uses the extended information, and even that only
74with my patches to do so.
75
76The V command changes fields printed by the L command.  For example, if
77the L command prints
78
79	ascii: ST15230N cyl 5657 alt 2 hd 19 sec 78
80	rpm: 0          pcyl: 0         apc: 0          obs1: 0
81	obs2: 0         intrlv: 1       ncyl: 5657      acyl: 0
82	nhead: 19       nsect: 78       obs3: 0         obs4: 0
83
84then you could type "V ncyl 6204" to set the ncyl value to 6204, or
85"V ascii Seagate ST15230N cyl 5657 hd 19 sec varying" to set the
86ascii-label string to that string.  sunlabel performs very few
87consistency checks on the values you supply, and the ones it does
88perform never generate errors, only warnings; it's a YAFIYGI program.
89
90I will be glad to correspond with anyone about this program.  I'm...
91
92					der Mouse
93
94			       mouse@rodents.montreal.qc.ca
95		     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B
96