Hi,
sometimes I'm simply looking for the size (e.g. in GB) of the slices of
an i386 Harddisk.
I can get it using the fdisk(8) inline editor with 'p g' but I haven't
found how do get it without starting the editor, so I've pached fdisk.
Maybe someone is interested in the patch or have a comment on it, so
here it is.
(The patch applies for OpenBSD 4.1)
Regards
Dag
sbin/fdisk//fdisk.8.orig --> sbin/fdisk//fdisk.8
--- sbin/fdisk//fdisk.8.orig Wed Feb 14 19:06:53 2007
+++ sbin/fdisk//fdisk.8 Sun Jun 3 13:24:46 2007
@@ -38,6 +38,7 @@
.Fl s Ar sectors
.Oc
.Op Fl f Ar mbrfile
+.Op Fl p Ar unit
.Ar device
.Sh DESCRIPTION
On the i386 and other architectures, sector 0 of a bootable hard disk
@@ -106,6 +107,19 @@
MBR partition spanning from cylinder 0, head 1, sector 1, and extending
to the end of the disk.
This mode is designed to initialize the MBR the very first time.
+.It Fl p Ar unit
+Specifies the unit in which the size of slices should be shown. Legal
+values are
+.Ql \&b
+(Bytes)
+.Ql \&K
+(Kilobytes)
+.Ql \&M
+(Megabytes) and
+.Ql \&G
+(Gigabytes). If
+.Fl p
+is omitted the everything is printet in Sectors.
.It Fl u
Update MBR bootcode, preserving existing MBR partition table.
The MBR bootcode extends from offset 0x000 to the start of the MBR partition
table
sbin/fdisk//fdisk.c.orig --> sbin/fdisk//fdisk.c
--- sbin/fdisk//fdisk.c.orig Mon Nov 20 09:18:21 2006
+++ sbin/fdisk//fdisk.c Sun Jun 3 13:27:07 2007
@@ -56,6 +56,7 @@
"\t-e: edit MBRs on disk interactively\n"
"\t-f: specify non-standard MBR template\n"
"\t-chs: specify disk geometry\n"
+ "\t-p: specify units\n"
"\t-y: do not ask questions\n"
"`disk' may be of the forms: sd0 or /dev/rsd0c.\n",
__progname);
@@ -79,8 +80,9 @@
#endif
mbr_t mbr;
char mbr_buf[DEV_BSIZE];
+ char *unit=NULL;
- while ((ch = getopt(argc, argv, "ieuf:c:h:s:y")) != -1) {
+ while ((ch = getopt(argc, argv, "ieuf:c:h:s:p:")) != -1) {
const char *errstr;
switch(ch) {
@@ -115,6 +117,9 @@
case 'y':
y_flag = 1;
break;
+ case 'p':
+ unit = optarg;
+ break;
default:
usage();
}
@@ -151,7 +156,7 @@
/* Print out current MBRs on disk */
if ((i_flag + u_flag + m_flag) == 0)
- exit(USER_print_disk(&disk));
+ exit(USER_print_disk(&disk, unit));
/* Parse mbr template, to pass on later */
if (mbrfile != NULL && (fd = open(mbrfile, O_RDONLY)) == -1) {
sbin/fdisk//user.c.orig --> sbin/fdisk//user.c
--- sbin/fdisk//user.c.orig Tue Aug 1 12:12:35 2006
+++ sbin/fdisk//user.c Sun Jun 3 13:24:46 2007
@@ -191,7 +191,7 @@
}
int
-USER_print_disk(disk_t *disk)
+USER_print_disk(disk_t *disk, char *unit)
{
int fd, offset, firstoff, i;
char mbr_buf[DEV_BSIZE];
@@ -200,14 +200,14 @@
fd = DISK_open(disk->name, O_RDONLY);
offset = firstoff = 0;
- DISK_printmetrics(disk, NULL);
+ DISK_printmetrics(disk, unit);
do {
MBR_read(fd, (off_t)offset, mbr_buf);
MBR_parse(disk, mbr_buf, offset, firstoff, &mbr);
printf("Offset: %d\t", (int)offset);
- MBR_print(&mbr, NULL);
+ MBR_print(&mbr, unit);
/* Print out extended partitions too */
for (offset = i = 0; i < 4; i++)
sbin/fdisk//user.h.orig --> sbin/fdisk//user.h
--- sbin/fdisk//user.h.orig Tue Jun 3 03:13:19 2003
+++ sbin/fdisk//user.h Sun Jun 3 13:24:46 2007
@@ -34,7 +34,7 @@
/* Prototypes */
int USER_init(disk_t *, mbr_t *, int);
int USER_modify(disk_t *, mbr_t *, off_t, off_t);
-int USER_print_disk(disk_t *);
+int USER_print_disk(disk_t *, char *);
#endif /* _USER_H */