summaryrefslogtreecommitdiff
path: root/extras/volume_id
diff options
context:
space:
mode:
Diffstat (limited to 'extras/volume_id')
-rw-r--r--extras/volume_id/vol_id.841
-rw-r--r--extras/volume_id/vol_id.c91
-rw-r--r--extras/volume_id/vol_id.xml60
3 files changed, 126 insertions, 66 deletions
diff --git a/extras/volume_id/vol_id.8 b/extras/volume_id/vol_id.8
index bb248a45e0..75942536d1 100644
--- a/extras/volume_id/vol_id.8
+++ b/extras/volume_id/vol_id.8
@@ -14,40 +14,51 @@
vol_id \- probe filesystem type and read label and uuid
.SH "SYNOPSIS"
.HP 7
-\fBvol_id\fR [\fB\-\-export\fR] [\fB\-t\fR] [\fB\-l\fR] [\fB\-u\fR] [\fIdevice\fR]
+\fBvol_id\fR [\fB\-\-export\fR] [\fB\-\-type\fR] [\fB\-\-label\fR] [\fB\-\-label\-raw\fR] [\fB\-\-uuid\fR] [\fB\-\-skip\-raid\fR] [\fB\-\-probe\-all\fR] [\fB\-\-help\fR] [\fIdevice\fR]
.SH "DESCRIPTION"
.PP
\fBvol_id\fR
-is usually called from a udev rule, to provide udev with the filesystem type, the label and the uuid of a volume.
-\fBvol_id\fR
-supports all common filesystem formats and detects various raid setups to prevent the recognition of raid members as a volume with a filesystem.
+is usually called from a udev rule, to provide udev with the filesystem type, the label and the uuid of a volume. It supports most of the common filesystem formats and detects various raid setups to prevent the recognition of raid members as a volume with a filesystem.
.SH "OPTIONS"
.PP
\fB\-\-export\fR
.RS 4
-print all values in key/value format to import them into the environment.
+Print all values in key/value format to import them into the environment.
+.RE
+.PP
+\fB\-\-type\fR
+.RS 4
+Print the filesystem type.
+.RE
+.PP
+\fB\-\-label\fR
+.RS 4
+Print the safe version of volume label suitable for use as filename.
+.RE
+.PP
+\fB\-\-label\-raw\fR
+.RS 4
+Print the raw volume label.
.RE
.PP
-\fB\-t\fR
+\fB\-\-uuid\fR
.RS 4
-print the filesystem type
+Print the uuid of a volume.
.RE
.PP
-\fB\-l\fR
+\fB\-\-skip\-raid\fR
.RS 4
-print the safe version of volume label suitable for use as filename. Use
-\fB\-L\fR
-to print literal label
+Skip detection of raid metadata.
.RE
.PP
-\fB\-u\fR
+\fB\-\-probe\-all\fR
.RS 4
-print the uuid of a volume
+Probe for all types and print all matches.
.RE
.PP
-\fB\-L\fR
+\fB\-\-help\fR
.RS 4
-print raw volume label
+Print usage.
.RE
.SH "ENVIRONMENT"
.PP
diff --git a/extras/volume_id/vol_id.c b/extras/volume_id/vol_id.c
index 0427d70da1..f6967603fa 100644
--- a/extras/volume_id/vol_id.c
+++ b/extras/volume_id/vol_id.c
@@ -30,6 +30,7 @@
#include <errno.h>
#include <pwd.h>
#include <grp.h>
+#include <getopt.h>
#include <sys/ioctl.h>
#include "../../udev.h"
@@ -111,30 +112,32 @@ static void set_str(char *to, const char *from, size_t count)
int main(int argc, char *argv[])
{
- const char help[] = "Usage: vol_id [options] <device>\n"
- " --export export key/value pairs\n"
- " -t filesystem type\n"
- " -l filesystem label\n"
- " -u filesystem uuid\n"
- " -L raw label\n"
- " --skip-raid don't probe for raid\n"
- " --probe-all find possibly conflicting signatures\n"
- " --help\n"
- "\n";
+ static const struct option options[] = {
+ { "label", 0, NULL, 'l' },
+ { "label-raw", 0, NULL, 'L' },
+ { "uuid", 0, NULL, 'u' },
+ { "type", 0, NULL, 't' },
+ { "export", 0, NULL, 'x' },
+ { "skip-raid", 0, NULL, 's' },
+ { "probe-all", 0, NULL, 'a' },
+ { "help", 0, NULL, 'h' },
+ {}
+ };
+
enum print_type {
PRINT_EXPORT,
PRINT_TYPE,
PRINT_LABEL,
PRINT_UUID,
- PRINT_RAW_LABEL,
+ PRINT_LABEL_RAW,
} print = PRINT_EXPORT;
+
struct volume_id *vid = NULL;
static char name[VOLUME_ID_LABEL_SIZE];
- int i;
uint64_t size;
int skip_raid = 0;
int probe_all = 0;
- const char *node = NULL;
+ const char *node;
struct passwd *pw;
int retval;
int rc = 0;
@@ -144,32 +147,56 @@ int main(int argc, char *argv[])
/* hook in our debug into libvolume_id */
volume_id_log_fn = vid_log;
- for (i = 1 ; i < argc; i++) {
- char *arg = argv[i];
+ while (1) {
+ int option;
- if (strcmp(arg, "--export") == 0) {
- print = PRINT_EXPORT;
- } else if (strcmp(arg, "-t") == 0) {
- print = PRINT_TYPE;
- } else if (strcmp(arg, "-l") == 0) {
+ option = getopt_long(argc, argv, "lLutxsah", options, NULL);
+ if (option == -1)
+ break;
+
+ switch (option) {
+ case 'l':
print = PRINT_LABEL;
- } else if (strcmp(arg, "-u") == 0) {
+ break;
+ case 'L':
+ print = PRINT_LABEL_RAW;
+ break;
+ case 'u':
print = PRINT_UUID;
- } else if (strcmp(arg, "-L") == 0) {
- print = PRINT_RAW_LABEL;
- } else if (strcmp(arg, "--skip-raid") == 0) {
+ break;
+ case 't':
+ print = PRINT_TYPE;
+ break;
+ case 'x':
+ print = PRINT_EXPORT;
+ break;
+ case 's':
skip_raid = 1;
- } else if (strcmp(arg, "--probe-all") == 0) {
+ break;
+ case 'a':
probe_all = 1;
- } else if (strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) {
- printf(help);
+ break;
+ case 'h':
+ printf("Usage: vol_id [options] <device>\n"
+ " --export export key/value pairs\n"
+ " --type filesystem type\n"
+ " --label filesystem label\n"
+ " --label-raw raw label\n"
+ " --uuid filesystem uuid\n"
+ " --skip-raid don't probe for raid\n"
+ " --probe-all find possibly conflicting signatures\n"
+ " --help\n\n");
+ goto exit;
+ default:
+ retval = 1;
goto exit;
- } else
- node = arg;
+ }
}
+
+ node = argv[optind];
if (!node) {
- err("no node specified");
- fprintf(stderr, help);
+ err("no device");
+ fprintf(stderr, "no device\n");
rc = 1;
goto exit;
}
@@ -311,7 +338,7 @@ int main(int argc, char *argv[])
}
printf("%s\n", vid->uuid);
break;
- case PRINT_RAW_LABEL:
+ case PRINT_LABEL_RAW:
if (vid->label[0] == '\0' || vid->usage_id == VOLUME_ID_RAID) {
rc = 3;
goto exit;
diff --git a/extras/volume_id/vol_id.xml b/extras/volume_id/vol_id.xml
index 2b26b3bddd..6d0a6c6923 100644
--- a/extras/volume_id/vol_id.xml
+++ b/extras/volume_id/vol_id.xml
@@ -26,9 +26,13 @@
<cmdsynopsis>
<command>vol_id</command>
<arg><option>--export</option></arg>
- <arg><option>-t</option></arg>
- <arg><option>-l</option></arg>
- <arg><option>-u</option></arg>
+ <arg><option>--type</option></arg>
+ <arg><option>--label</option></arg>
+ <arg><option>--label-raw</option></arg>
+ <arg><option>--uuid</option></arg>
+ <arg><option>--skip-raid</option></arg>
+ <arg><option>--probe-all</option></arg>
+ <arg><option>--help</option></arg>
<arg><replaceable>device</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -36,8 +40,8 @@
<refsect1><title>DESCRIPTION</title>
<para><command>vol_id</command> is usually called from a udev rule, to
provide udev with the filesystem type, the label and the uuid of a
- volume. <command>vol_id</command> supports all common filesystem formats
- and detects various raid setups to prevent the recognition of raid members
+ volume. It supports most of the common filesystem formats and detects
+ various raid setups to prevent the recognition of raid members
as a volume with a filesystem.</para>
</refsect1>
@@ -46,37 +50,55 @@
<varlistentry>
<term><option>--export</option></term>
<listitem>
- <para>print all values in key/value format to import them into the
+ <para>Print all values in key/value format to import them into the
environment.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>-t</option></term>
+ <term><option>--type</option></term>
<listitem>
- <para>print the filesystem type</para>
+ <para>Print the filesystem type.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>-l</option></term>
+ <term><option>--label</option></term>
<listitem>
- <para>
- print the safe version of volume label suitable for
- use as filename. Use <option>-L</option> to print literal label
- </para>
+ <para>
+ Print the safe version of volume label suitable for
+ use as filename.
+ </para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>-u</option></term>
+ <term><option>--label-raw</option></term>
<listitem>
- <para>print the uuid of a volume</para>
+ <para>
+ Print the raw volume label.
+ </para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>-L</option></term>
+ <term><option>--uuid</option></term>
<listitem>
- <para>
- print raw volume label
- </para>
+ <para>Print the uuid of a volume.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--skip-raid</option></term>
+ <listitem>
+ <para>Skip detection of raid metadata.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--probe-all</option></term>
+ <listitem>
+ <para>Probe for all types and print all matches.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--help</option></term>
+ <listitem>
+ <para>Print usage.</para>
</listitem>
</varlistentry>
</variablelist>