dev names: Add "--names" switch to dmsetup to show names instead of major:minor pairs for deps and ls commands
PATCH 2/2 dev names: Add "--names" switch to dmsetup to show names instead of major:minor pairs for deps and ls commands
This makes it a little bit more user-friendly for admins if they read the output so they don't need to look for the names themselves.
(there's also an RFE filed here: https://bugzilla.redhat.com/show_bug.cgi?id=731785).
An example with mirror volume:
[0] rawhide/~ # dmsetup deps
vg-lvol0: 3 dependencies : (253, 2) (253, 1) (253, 0)
vg-lvol0_mimage_1: 1 dependencies : (8, 16)
vg-lvol0_mimage_0: 1 dependencies : (8, 0)
vg-lvol0_mlog: 1 dependencies : (8, 128)
[0] rawhide/~ # dmsetup deps --names
vg-lvol0: 3 dependencies : (vg-lvol0_mimage_1) (vg-lvol0_mimage_0) (vg-lvol0_mlog)
vg-lvol0_mimage_1: 1 dependencies : (sdb)
vg-lvol0_mimage_0: 1 dependencies : (sda)
vg-lvol0_mlog: 1 dependencies : (sdi)
[0] rawhide/~ # dmsetup ls
vg-lvol0 (253, 3)
vg-lvol0_mimage_1 (253, 2)
vg-lvol0_mimage_0 (253, 1)
vg-lvol0_mlog (253, 0)
[0] rawhide/~ # dmsetup ls --names
vg-lvol0 (dm-3)
vg-lvol0_mimage_1 (dm-2)
vg-lvol0_mimage_0 (dm-1)
vg-lvol0_mlog (dm-0)
[0] rawhide/~ # dmsetup ls --tree
vg-lvol0 (253:3)
??vg-lvol0_mimage_1 (253:2)
? ?? (8:16)
??vg-lvol0_mimage_0 (253:1)
? ?? (8:0)
??vg-lvol0_mlog (253:0)
?? (8:128)
[0] rawhide/~ # dmsetup ls --tree --names
vg-lvol0 (dm-3)
??vg-lvol0_mimage_1 (dm-2)
? ?? (sdb)
??vg-lvol0_mimage_0 (dm-1)
? ?? (sda)
??vg-lvol0_mlog (dm-0)
?? (sdi)
Peter
--- tools/dmsetup.c | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 39 insertions(+), 12 deletions(-)
tools/dmsetup.c +39 -12
@@ -130,6 +130,7 @@ enum {MINOR_ARG ,MODE_ARG ,NAMEPREFIXES_ARG , +NAMES_ARG ,NOFLUSH_ARG ,NOHEADINGS_ARG , NOLOCKFS_ARG,
@@ -1767,6 +1768,7 @@ static int _deps(CMD_ARGS)struct dm_task *dmt;struct dm_info info;char *name =NULL ; +char dev_name[PATH_MAX ];if (names) name = names->name;
@@ -1813,10 +1815,17 @@ static int _deps(CMD_ARGS)printf ("%s: " , name);printf ("%d dependencies\t:" , deps->count); -for (i =0 ; i < deps->count; i++) -printf (" (%d, %d)" , - (int )MAJOR (deps->device[i]), - (int )MINOR (deps->device[i])); +for (i =0 ; i < deps->count; i++) { +if (_switches[NAMES_ARG ] && +dm_device_get_name ((uint32_t )MAJOR (deps->device[i]), + (uint32_t )MINOR (deps->device[i]), +0 , dev_name,PATH_MAX )) +printf (" (%s)" , dev_name); +else +printf (" (%d, %d)" , + (int )MAJOR (deps->device[i]), + (int )MINOR (deps->device[i])); + }printf ("\n" );if (multiple_devices && _switches[VERBOSE_ARG ])
@@ -1831,8 +1840,16 @@ static int _deps(CMD_ARGS)static int _display_name (CMD_ARGS ) { -printf ("%s\t(%d, %d)\n" , names->name, - (int )MAJOR (names->dev), (int )MINOR (names->dev)); +char dev_name[PATH_MAX ]; + +if (_switches[NAMES_ARG ] && +dm_device_get_name ((uint32_t )MAJOR (names->dev), + (uint32_t )MINOR (names->dev), +1 ,dev_name,PATH_MAX )) +printf ("%s\t(%s)\n" , names->name, dev_name); +else +printf ("%s\t(%d, %d)\n" , names->name, + (int )MAJOR (names->dev), (int )MINOR (names->dev));return 1 ; }
@@ -2057,6 +2074,7 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,const char *name;const struct dm_info *info;int first_on_line =0 ; +char dev_name[PATH_MAX ];/* Sub-tree for targets has 2 more depth */ if (depth +2 >MAX_DEPTH )
@@ -2091,9 +2109,15 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,if (_tree_switches[TR_DEVICE ]) {_out_string (name ?" (" :"(" ); - (void )_out_int (info->major); -_out_char (':' ); - (void )_out_int (info->minor); +if (_switches[NAMES_ARG ] && +dm_device_get_name (info->major, info->minor, +1 , dev_name,PATH_MAX )) +_out_string (dev_name); +else { + (void )_out_int (info->major); +_out_char (':' ); + (void )_out_int (info->minor); + }_out_char (')' ); }
@@ -2780,9 +2804,9 @@ static struct command _commands[] = { {"reload", "<device> [<table_file>]", 0, 2, 0, _load}, {"rename", "<device> [--setuuid] <new_name_or_uuid>", 1, 2, 0, _rename}, {"message", "<device> <sector> <message>", 2, -1, 0, _message}, - {"ls", "[--target <target_type>] [--exec <command>] [--tree [-o options]]", 0, 0, 0, _ls}, + {"ls", "[--names] [--target <target_type>] [--exec <command>] [--tree [-o options]]", 0, 0, 0, _ls}, {"info", "[<device>]", 0, -1, 1, _info}, - {"deps", "[<device>]", 0, -1, 1, _deps}, + {"deps", "[--names] [<device>]", 0, -1, 1, _deps}, {"status", "[<device>] [--target <target_type>]", 0, -1, 1, _status}, {"table", "[<device>] [--target <target_type>] [--showkeys]", 0, -1, 1, _status}, {"wait", "<device> [<event_nr>]", 0, 2, 0, _wait},
@@ -2806,7 +2830,7 @@ static void _usage(FILE *out)fprintf (out,"Usage:\n\n" );fprintf (out,"dmsetup [--version] [-h|--help [-c|-C|--columns]]\n" -" [--checks] [-v|--verbose [-v|--verbose ...]]\n" +" [--checks] [--names] [-v|--verbose [-v|--verbose ...]]\n" " [-r|--readonly] [--noopencount] [--nolockfs] [--inactive]\n" " [--udevcookie [cookie]] [--noudevrules] [--noudevsync] [--verifyudev]\n" " [-y|--yes] [--readahead [+]<sectors>|auto|none] [--retry]\n"
@@ -3172,6 +3196,7 @@ static int _process_switches(int *argc, char ***argv, const char *dev_dir) {"minor", 1, &ind, MINOR_ARG}, {"mode", 1, &ind, MODE_ARG}, {"nameprefixes", 0, &ind, NAMEPREFIXES_ARG}, + {"names", 0, &ind, NAMES_ARG}, {"noflush", 0, &ind, NOFLUSH_ARG}, {"noheadings", 0, &ind, NOHEADINGS_ARG}, {"nolockfs", 0, &ind, NOLOCKFS_ARG},
@@ -3339,6 +3364,8 @@ static int _process_switches(int *argc, char ***argv, const char *dev_dir) _switches[INACTIVE_ARG ]++;if ((ind ==NAMEPREFIXES_ARG )) _switches[NAMEPREFIXES_ARG ]++; +if ((ind ==NAMES_ARG )) + _switches[NAMES_ARG ]++;if ((ind ==NOFLUSH_ARG )) _switches[NOFLUSH_ARG ]++;if ((ind ==NOHEADINGS_ARG ))
PATCH 2/2 dev names: Add "--names" switch to dmsetup to show names instead of major:minor pairs for deps and ls commands
Dne 7.11.2011 13:49, Peter Rajnoha napsal(a):
Quoted 14 lines
This makes it a little bit more user-friendly for admins if they read the output so they don't need to look for the names themselves.
(there's also an RFE filed here: https://bugzilla.redhat.com/show_bug.cgi?id=731785).
An example with mirror volume:
[0] rawhide/~ # dmsetup deps
vg-lvol0: 3 dependencies : (253, 2) (253, 1) (253, 0)
vg-lvol0_mimage_1: 1 dependencies : (8, 16)
vg-lvol0_mimage_0: 1 dependencies : (8, 0)
vg-lvol0_mlog: 1 dependencies : (8, 128)
Quoted 5 lines
[0] rawhide/~ # dmsetup deps --names
vg-lvol0: 3 dependencies : (vg-lvol0_mimage_1) (vg-lvol0_mimage_0) (vg-lvol0_mlog)
vg-lvol0_mimage_1: 1 dependencies : (sdb)
vg-lvol0_mimage_0: 1 dependencies : (sda)
vg-lvol0_mlog: 1 dependencies : (sdi)
I think, we are mixing /dev names and internal dm names with same symbol (). So maybe we could use {} for dm names, and () for real /dev {vg-lvol0_mimage_1} (dm-3)
Or an options --dmnames could be used if the user really want to see them
translated to dm table names. Maybe option --uuid could be supported as well to print uuid device names (like we have dmsetup ls --tree -o uuid)
Quoted 25 lines
[0] rawhide/~ # dmsetup ls
vg-lvol0 (253, 3)
vg-lvol0_mimage_1 (253, 2)
vg-lvol0_mimage_0 (253, 1)
vg-lvol0_mlog (253, 0)[0] rawhide/~ # dmsetup ls --names
vg-lvol0 (dm-3)
vg-lvol0_mimage_1 (dm-2)
vg-lvol0_mimage_0 (dm-1)
vg-lvol0_mlog (dm-0)[0] rawhide/~ # dmsetup ls --tree
vg-lvol0 (253:3)
??vg-lvol0_mimage_1 (253:2)
? ?? (8:16)
??vg-lvol0_mimage_0 (253:1)
? ?? (8:0)
??vg-lvol0_mlog (253:0)?? (8:128)[0] rawhide/~ # dmsetup ls --tree --names
Quoted 8 lines
vg-lvol0 (dm-3)
??vg-lvol0_mimage_1 (dm-2)
? ?? (sdb)
??vg-lvol0_mimage_0 (dm-1)
? ?? (sda)
??vg-lvol0_mlog (dm-0)?? (sdi)
Hmm RFE :) would be nice to have this supported with -C columns, so dm device names would appear nicely aligned.
Quoted 50 lines
Peter
--- tools/dmsetup.c | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 39 insertions(+), 12 deletions(-)tools/dmsetup.c +13
-4@@ -130,6 +130,7 @@ enum {MINOR_ARG ,MODE_ARG ,NAMEPREFIXES_ARG , +NAMES_ARG ,NOFLUSH_ARG ,NOHEADINGS_ARG , NOLOCKFS_ARG,@@ -1767,6 +1768,7 @@ static int _deps(CMD_ARGS)struct dm_task *dmt;struct dm_info info;char *name =NULL ; +char dev_name[PATH_MAX ];if (names) name = names->name;@@ -1813,10 +1815,17 @@ static int _deps(CMD_ARGS)printf ("%s: " , name);printf ("%d dependencies\t:" , deps->count); -for (i =0 ; i < deps->count; i++) -printf (" (%d, %d)" , - (int )MAJOR (deps->device[i]), - (int )MINOR (deps->device[i])); +for (i =0 ; i < deps->count; i++) { +if (_switches[NAMES_ARG ] && +dm_device_get_name ((uint32_t )MAJOR (deps->device[i]), + (uint32_t )MINOR (deps->device[i]), +0 , dev_name,PATH_MAX )) +printf (" (%s)" , dev_name); +else +printf (" (%d, %d)" , + (int )MAJOR (deps->device[i]), + (int )MINOR (deps->device[i])); + }printf ("\n" );if (multiple_devices && _switches[VERBOSE_ARG ])@@ -1831,8 +1840,16 @@ static int _deps(CMD_ARGS)
tools/dmsetup.c static int _deps(CMD_ARGS) · line 1848
Quoted 10 lines
tools/dmsetup.c +6
-2static int _display_name (CMD_ARGS ) { -printf ("%s\t(%d, %d)\n" , names->name, - (int )MAJOR (names->dev), (int )MINOR (names->dev)); +char dev_name[PATH_MAX ]; + +if (_switches[NAMES_ARG ] && +dm_device_get_name ((uint32_t )MAJOR (names->dev), + (uint32_t )MINOR (names->dev), +1 ,dev_name,PATH_MAX ))
+space 1, dev_name
Quoted 35 lines
tools/dmsetup.c +14
-3+printf ("%s\t(%s)\n" , names->name, dev_name); + else + printf("%s\t(%d, %d)\n", names->name, + (int) MAJOR(names->dev), (int) MINOR(names->dev));return 1 ; }@@ -2057,6 +2074,7 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,const char *name;const struct dm_info *info;int first_on_line =0 ; +char dev_name[PATH_MAX ];/* Sub-tree for targets has 2 more depth */ if (depth +2 >MAX_DEPTH )@@ -2091,9 +2109,15 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,if (_tree_switches[TR_DEVICE ]) {_out_string (name ?" (" :"(" ); - (void )_out_int (info->major); -_out_char (':' ); - (void )_out_int (info->minor); +if (_switches[NAMES_ARG ] && +dm_device_get_name (info->major, info->minor, +1 , dev_name,PATH_MAX )) +_out_string (dev_name); +else { + (void )_out_int (info->major); +_out_char (':' ); + (void )_out_int (info->minor); + }_out_char (')' ); }
tools/dmsetup.c static struct command _commands[] = { · line 2807
Quoted 5 lines
tools/dmsetup.c +1
-1@@ -2780,9 +2804,9 @@ static struct command _commands[] = { {"reload", "<device> [<table_file>]", 0, 2, 0, _load}, {"rename", "<device> [--setuuid] <new_name_or_uuid>", 1, 2, 0, _rename}, {"message", "<device> <sector> <message>", 2, -1, 0, _message}, - {"ls", "[--target <target_type>] [--exec <command>] [--tree [-o options]]", 0, 0, 0, _ls}, + {"ls", "[--names] [--target <target_type>] [--exec <command>] [--tree [-o options]]", 0, 0, 0, _ls},
Hmm, here we have somewhat inconsistent interface, where --tree option supports uuid -o option, but pure 'ls' does not have a way to display uuid with device major:minor number. So maybe --uuid should be also add as direct option like --names (agk?)
Zdenek