Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Mar 2012 22:46:38 GMT
From:      David Demelier <demelier.david@gmail.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   bin/166308: [patch] fdisk(8) add an option to list all partitions
Message-ID:  <201203212246.q2LMkcZj085638@red.freebsd.org>
Resent-Message-ID: <201203212250.q2LMoFK7035052@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         166308
>Category:       bin
>Synopsis:       [patch] fdisk(8) add an option to list all partitions
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Mar 21 22:50:14 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     David Demelier
>Release:        9.0-RELEASE
>Organization:
>Environment:
FreeBSD Melon.malikania.fr 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Mon Mar 19 18:27:22 CET 2012     root@Melon.malikania.fr:/usr/obj/usr/src/sys/Melon  amd64
>Description:
When you use fdisk in interactive mode, you never know which id refers to the partition type, e.g :

11 refers to MS-Dos
165 regers to BSD.
etc...

This patch add a -l flag to fdisk(8) to show all partitions types, the following output will be printed like that :

markand@Melon ~ $ fdisk -l
0	unused
1	Primary DOS with 12 bit FAT
2	XENIX / file system
3	XENIX /usr file system
4	Primary DOS with 16 bit FAT (< 32MB)
5	Extended DOS
6	Primary DOS, 16 bit FAT (>= 32MB)
7	NTFS, OS/2 HPFS, QNX-2 (16 bit) or Advanced UNIX
8	AIX file system or SplitDrive
9	AIX boot partition or Coherent
10	OS/2 Boot Manager, OPUS or Coherent swap
11	DOS or Windows 95 with 32 bit FAT
12	DOS or Windows 95 with 32 bit FAT (LBA)
14	Primary 'big' DOS (>= 32MB, LBA)
15	Extended DOS (LBA)
16	OPUS
17	OS/2 BM: hidden DOS with 12-bit FAT
18	Compaq diagnostics
20	OS/2 BM: hidden DOS with 16-bit FAT (< 32MB)
22	OS/2 BM: hidden DOS with 16-bit FAT (>= 32MB)
23	OS/2 BM: hidden IFS (e.g. HPFS)
24	AST Windows swapfile
27	ASUS Recovery partition (NTFS)
36	NEC DOS
57	plan9
60	PartitionMagic recovery
64	VENIX 286
65	Linux/MINIX (sharing disk with DRDOS)
66	SFS or Linux swap (sharing disk with DRDOS)
67	Linux native (sharing disk with DRDOS)
77	QNX 4.2 Primary
78	QNX 4.2 Secondary
79	QNX 4.2 Tertiary
80	DM (disk manager)
81	DM6 Aux1 (or Novell)
82	CP/M or Microport SysV/AT
83	DM6 Aux3
84	DM6
85	EZ-Drive (disk manager)
86	Golden Bow (disk manager)
92	Priam Edisk (disk manager)
97	SpeedStor
99	System V/386 (such as ISC UNIX), GNU HURD or Mach
100	Novell Netware/286 2.xx
101	Novell Netware/386 3.xx
112	DiskSecure Multi-Boot
117	PCIX
119	QNX4.x
120	QNX4.x 2nd part
121	QNX4.x 3rd part
128	Minix until 1.4a
129	Minix since 1.4b, early Linux partition or Mitac disk manager
130	Linux swap or Solaris x86
131	Linux native
132	OS/2 hidden C: drive
133	Linux extended
134	NTFS volume set??
135	NTFS volume set??
147	Amoeba file system
148	Amoeba bad block table
159	BSD/OS
160	Suspend to Disk
165	FreeBSD/NetBSD/386BSD
166	OpenBSD
167	NeXTSTEP
169	NetBSD
172	IBM JFS
175	HFS+
183	BSDI BSD/386 file system
184	BSDI BSD/386 swap
190	Solaris x86 boot
191	Solaris x86 (new)
193	DRDOS/sec with 12-bit FAT
196	DRDOS/sec with 16-bit FAT (< 32MB)
198	DRDOS/sec with 16-bit FAT (>= 32MB)
199	Syrinx
219	CP/M, Concurrent CP/M, Concurrent DOS or CTOS
222	DELL Utilities - FAT filesystem
225	DOS access or SpeedStor with 12-bit FAT extended partition
227	DOS R/O or SpeedStor
228	SpeedStor with 16-bit FAT extended partition < 1024 cyl.
235	BeOS file system
238	EFI GPT
239	EFI System Partition
241	SpeedStor
242	DOS 3.3+ Secondary
244	SpeedStor large partition
254	SpeedStor >1024 cyl. or LANstep
255	Xenix bad blocks table

>How-To-Repeat:

>Fix:
--- fdisk.diff begins here ---
--- fdisk.c.orig	2012-03-21 23:24:44.000000000 +0100
+++ fdisk.c	2012-03-21 23:37:23.000000000 +0100
@@ -119,6 +119,7 @@
 static int a_flag  = 0;		/* set active partition */
 static char *b_flag = NULL;	/* path to boot code */
 static int i_flag  = 0;		/* replace partition data */
+static int l_flag  = 0;		/* print partitions types */
 static int q_flag  = 0;		/* Be quiet */
 static int u_flag  = 0;		/* update partition data */
 static int s_flag  = 0;		/* Print a summary and exit */
@@ -233,6 +234,7 @@
 
 
 static int geom_class_available(const char *);
+static void print_partition_types(void);
 static void print_s0(void);
 static void print_part(const struct dos_partition *);
 static void init_sector0(unsigned long start);
@@ -264,7 +266,7 @@
 	int	partition = -1;
 	struct	dos_partition *partp;
 
-	while ((c = getopt(argc, argv, "BIab:f:ipqstuv1234")) != -1)
+	while ((c = getopt(argc, argv, "BIab:f:ilpqstuv1234")) != -1)
 		switch (c) {
 		case 'B':
 			B_flag = 1;
@@ -284,6 +286,9 @@
 		case 'i':
 			i_flag = 1;
 			break;
+		case 'l':
+			l_flag = 1;
+			break;
 		case 'p':
 			print_config_flag = 1;
 			break;
@@ -313,7 +318,10 @@
 		}
 	if (f_flag || i_flag)
 		u_flag = 1;
-	if (t_flag)
+	if (l_flag) {
+		print_partition_types();
+		exit(0);
+	} if (t_flag)
 		v_flag = 1;
 	argc -= optind;
 	argv += optind;
@@ -455,6 +463,17 @@
 }
 
 static void
+print_partition_types(void)
+{
+	int i;
+
+	for (i = 0; i < 256; ++i)
+		if (part_types[i] != NULL)
+			printf("%d\t%s\n", i, part_types[i]);
+
+}
+
+static void
 print_s0(void)
 {
 	int	i;
--- fdisk.8.orig	2012-03-21 23:37:44.000000000 +0100
+++ fdisk.8	2012-03-21 23:41:39.000000000 +0100
@@ -8,7 +8,7 @@
 .Nd PC slice table maintenance utility
 .Sh SYNOPSIS
 .Nm
-.Op Fl BIaipqstu
+.Op Fl BIailpqstu
 .Op Fl b Ar bootcode
 .Op Fl 1234
 .Op Ar disk
@@ -104,6 +104,8 @@
 (marked as unused) before editing.
 (Compare with
 .Fl u . )
+.It Fl l
+List all partition types.
 .It Fl I
 Initialize sector 0 slice table
 for one
--- fdisk.diff ends here ---

>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203212246.q2LMkcZj085638>