[Libguestfs] [PATCH 1/1] tools: add '--blocksize' option for C-based tools

Mykola Ivanets stenavin at gmail.com
Tue Feb 11 21:51:17 UTC 2020


From: Nikolay Ivanets <stenavin at gmail.com>

This patch adds '--blocksize' command line option for guestfish and
other C-based tools.  This option allows specifying disk sector size.
---
 align/scan.c                  |  8 ++++++++
 align/virt-alignment-scan.pod | 12 ++++++++++++
 cat/cat.c                     |  8 ++++++++
 cat/filesystems.c             |  8 ++++++++
 cat/log.c                     |  8 ++++++++
 cat/ls.c                      |  8 ++++++++
 cat/tail.c                    |  8 ++++++++
 cat/virt-cat.pod              | 12 ++++++++++++
 cat/virt-filesystems.pod      | 12 ++++++++++++
 cat/virt-log.pod              | 12 ++++++++++++
 cat/virt-ls.pod               | 12 ++++++++++++
 cat/virt-tail.pod             | 12 ++++++++++++
 df/main.c                     |  8 ++++++++
 df/virt-df.pod                | 12 ++++++++++++
 diff/diff.c                   |  8 ++++++++
 diff/virt-diff.pod            | 12 ++++++++++++
 edit/edit.c                   |  8 ++++++++
 edit/virt-edit.pod            | 12 ++++++++++++
 fish/fish.c                   |  8 ++++++++
 fish/guestfish.pod            | 11 +++++++++++
 format/format.c               |  8 ++++++++
 format/virt-format.pod        | 12 ++++++++++++
 fuse/guestmount.c             |  8 ++++++++
 fuse/guestmount.pod           | 12 ++++++++++++
 inspector/inspector.c         |  8 ++++++++
 inspector/virt-inspector.pod  | 12 ++++++++++++
 rescue/rescue.c               |  8 ++++++++
 rescue/virt-rescue.pod        | 12 ++++++++++++
 28 files changed, 279 insertions(+)

diff --git a/align/scan.c b/align/scan.c
index b9f29868c..5a456d3d6 100644
--- a/align/scan.c
+++ b/align/scan.c
@@ -90,6 +90,8 @@ usage (int status)
               "  -c|--connect uri     Specify libvirt URI for -d option\n"
               "  -d|--domain guest    Add disks from libvirt guest\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help               Display brief help\n"
               "  -P nr_threads        Use at most nr_threads\n"
               "  -q|--quiet           No output, just exit code\n"
@@ -119,6 +121,7 @@ main (int argc, char *argv[])
     { "connect", 1, 0, 'c' },
     { "domain", 1, 0, 'd' },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "long-options", 0, 0, 0 },
     { "quiet", 0, 0, 'q' },
@@ -131,6 +134,8 @@ main (int argc, char *argv[])
   struct drv *drvs = NULL;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
   int exit_code;
@@ -153,6 +158,8 @@ main (int argc, char *argv[])
         display_short_options (options);
       else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "uuid")) {
         uuid = 1;
       } else
@@ -215,6 +222,7 @@ main (int argc, char *argv[])
     usage (EXIT_FAILURE);
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* virt-alignment-scan has two modes.  If the user didn't specify
    * any drives, then we do the scan on every libvirt guest.  That's
diff --git a/align/virt-alignment-scan.pod b/align/virt-alignment-scan.pod
index 19953546e..21b5339e0 100644
--- a/align/virt-alignment-scan.pod
+++ b/align/virt-alignment-scan.pod
@@ -162,6 +162,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 =item B<-P> nr_threads
 
 Since libguestfs 1.22, virt-alignment-scan is multithreaded and
diff --git a/cat/cat.c b/cat/cat.c
index 4f0d7035e..eb070877a 100644
--- a/cat/cat.c
+++ b/cat/cat.c
@@ -70,6 +70,8 @@ usage (int status)
               "  -d|--domain guest    Add disks from libvirt guest\n"
               "  --echo-keys          Don't turn off echo for passphrases\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help               Display brief help\n"
               "  --key selector       Specify a LUKS key\n"
               "  --keys-from-stdin    Read passphrases from stdin\n"
@@ -101,6 +103,7 @@ main (int argc, char *argv[])
     { "domain", 1, 0, 'd' },
     { "echo-keys", 0, 0, 0 },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "key", 1, 0, 0 },
     { "keys-from-stdin", 0, 0, 0 },
@@ -118,6 +121,8 @@ main (int argc, char *argv[])
   char *p;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int r;
   int option_index;
@@ -143,6 +148,8 @@ main (int argc, char *argv[])
         echo_keys = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "key")) {
         OPTION_key;
       } else
@@ -232,6 +239,7 @@ main (int argc, char *argv[])
     usage (EXIT_FAILURE);
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* User must have specified some drives. */
   if (drvs == NULL) {
diff --git a/cat/filesystems.c b/cat/filesystems.c
index 74e994169..447bccc6e 100644
--- a/cat/filesystems.c
+++ b/cat/filesystems.c
@@ -111,6 +111,8 @@ usage (int status)
               "  --extra              Display swap and data filesystems\n"
               "  --filesystems        Display mountable filesystems\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  -h|--human-readable  Human-readable sizes in --long output\n"
               "  --help               Display brief help\n"
               "  --keys-from-stdin    Read passphrases from stdin\n"
@@ -156,6 +158,7 @@ main (int argc, char *argv[])
     { "extra", 0, 0, 0 },
     { "filesystems", 0, 0, 0 },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "human-readable", 0, 0, 'h' },
     { "keys-from-stdin", 0, 0, 0 },
@@ -183,6 +186,8 @@ main (int argc, char *argv[])
   struct drv *drvs = NULL;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
   int no_title = 0;             /* --no-title */
@@ -210,6 +215,8 @@ main (int argc, char *argv[])
         echo_keys = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "all")) {
         output = OUTPUT_ALL;
       } else if (STREQ (long_options[option_index].name, "blkdevs") ||
@@ -306,6 +313,7 @@ main (int argc, char *argv[])
   }
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* -h and --csv doesn't make sense.  Spreadsheets will corrupt these
    * fields.  (RHBZ#600977).
diff --git a/cat/log.c b/cat/log.c
index f8a5c85f2..50cd50eb9 100644
--- a/cat/log.c
+++ b/cat/log.c
@@ -80,6 +80,8 @@ usage (int status)
               "  -d|--domain guest    Add disks from libvirt guest\n"
               "  --echo-keys          Don't turn off echo for passphrases\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help               Display brief help\n"
               "  --key selector       Specify a LUKS key\n"
               "  --keys-from-stdin    Read passphrases from stdin\n"
@@ -109,6 +111,7 @@ main (int argc, char *argv[])
     { "domain", 1, 0, 'd' },
     { "echo-keys", 0, 0, 0 },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "key", 1, 0, 0 },
     { "keys-from-stdin", 0, 0, 0 },
@@ -121,6 +124,8 @@ main (int argc, char *argv[])
   struct drv *drvs = NULL;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int r;
   int option_index;
@@ -146,6 +151,8 @@ main (int argc, char *argv[])
         echo_keys = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "key")) {
         OPTION_key;
       } else
@@ -204,6 +211,7 @@ main (int argc, char *argv[])
   }
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* User must have specified some drives. */
   if (drvs == NULL) {
diff --git a/cat/ls.c b/cat/ls.c
index 055939a80..b56f3a46b 100644
--- a/cat/ls.c
+++ b/cat/ls.c
@@ -111,6 +111,8 @@ usage (int status)
               "  --echo-keys          Don't turn off echo for passphrases\n"
               "  --extra-stats        Display extra stats\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help               Display brief help\n"
               "  -h|--human-readable  Human-readable sizes in output\n"
               "  --key selector       Specify a LUKS key\n"
@@ -158,6 +160,7 @@ main (int argc, char *argv[])
     { "extra-stat", 0, 0, 0 },
     { "extra-stats", 0, 0, 0 },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "human-readable", 0, 0, 'h' },
     { "key", 1, 0, 0 },
@@ -185,6 +188,8 @@ main (int argc, char *argv[])
   char *p;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
 #define MODE_LS_L  1
@@ -213,6 +218,8 @@ main (int argc, char *argv[])
         echo_keys = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "checksum") ||
                  STREQ (long_options[option_index].name, "checksums")) {
         if (!optarg || STREQ (optarg, ""))
@@ -338,6 +345,7 @@ main (int argc, char *argv[])
   assert (live == 0);
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* Many flags only apply to -lR mode. */
   if (mode != MODE_LS_LR &&
diff --git a/cat/tail.c b/cat/tail.c
index 9e3af7c7d..c12b32631 100644
--- a/cat/tail.c
+++ b/cat/tail.c
@@ -78,6 +78,8 @@ usage (int status)
               "  --echo-keys          Don't turn off echo for passphrases\n"
               "  -f|--follow          Ignored for compatibility with tail\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help               Display brief help\n"
               "  --key selector       Specify a LUKS key\n"
               "  --keys-from-stdin    Read passphrases from stdin\n"
@@ -110,6 +112,7 @@ main (int argc, char *argv[])
     { "echo-keys", 0, 0, 0 },
     { "follow", 0, 0, 'f' },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "key", 1, 0, 0 },
     { "keys-from-stdin", 0, 0, 0 },
@@ -126,6 +129,8 @@ main (int argc, char *argv[])
   char *p;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int r;
   int option_index;
@@ -151,6 +156,8 @@ main (int argc, char *argv[])
         echo_keys = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "key")) {
         OPTION_key;
       } else
@@ -217,6 +224,7 @@ main (int argc, char *argv[])
   }
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* User must have specified some drives. */
   if (drvs == NULL) {
diff --git a/cat/virt-cat.pod b/cat/virt-cat.pod
index 0c4ce4b77..48556f380 100644
--- a/cat/virt-cat.pod
+++ b/cat/virt-cat.pod
@@ -121,6 +121,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 __INCLUDE:key-option.pod__
 
 =item B<--keys-from-stdin>
diff --git a/cat/virt-filesystems.pod b/cat/virt-filesystems.pod
index a3a0fb29a..8183754d7 100644
--- a/cat/virt-filesystems.pod
+++ b/cat/virt-filesystems.pod
@@ -195,6 +195,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 =item B<-h>
 
 =item B<--human-readable>
diff --git a/cat/virt-log.pod b/cat/virt-log.pod
index a6b37662e..042f93a84 100644
--- a/cat/virt-log.pod
+++ b/cat/virt-log.pod
@@ -105,6 +105,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 __INCLUDE:key-option.pod__
 
 =item B<--keys-from-stdin>
diff --git a/cat/virt-ls.pod b/cat/virt-ls.pod
index 53141b2c6..cae35c7b1 100644
--- a/cat/virt-ls.pod
+++ b/cat/virt-ls.pod
@@ -343,6 +343,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 =item B<-h>
 
 =item B<--human-readable>
diff --git a/cat/virt-tail.pod b/cat/virt-tail.pod
index 9f72ce3f7..3e41631a9 100644
--- a/cat/virt-tail.pod
+++ b/cat/virt-tail.pod
@@ -123,6 +123,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 __INCLUDE:key-option.pod__
 
 =item B<--keys-from-stdin>
diff --git a/df/main.c b/df/main.c
index bbb2ddb61..fba2d57d1 100644
--- a/df/main.c
+++ b/df/main.c
@@ -83,6 +83,8 @@ usage (int status)
               "  --csv                Output as Comma-Separated Values\n"
               "  -d|--domain guest    Add disks from libvirt guest\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  -h|--human-readable  Print sizes in human-readable format\n"
               "  --help               Display brief help\n"
               "  -i|--inodes          Display inodes\n"
@@ -115,6 +117,7 @@ main (int argc, char *argv[])
     { "csv", 0, 0, 0 },
     { "domain", 1, 0, 'd' },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "human-readable", 0, 0, 'h' },
     { "inodes", 0, 0, 'i' },
@@ -130,6 +133,8 @@ main (int argc, char *argv[])
   struct drv *drv;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
   size_t max_threads = 0;
@@ -151,6 +156,8 @@ main (int argc, char *argv[])
         display_short_options (options);
       else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "csv")) {
         csv = 1;
       } else if (STREQ (long_options[option_index].name, "one-per-guest")) {
@@ -251,6 +258,7 @@ main (int argc, char *argv[])
     usage (EXIT_FAILURE);
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* -h and --csv doesn't make sense.  Spreadsheets will corrupt these
    * fields.  (RHBZ#600977).
diff --git a/df/virt-df.pod b/df/virt-df.pod
index de6e6b4e5..a823e937d 100644
--- a/df/virt-df.pod
+++ b/df/virt-df.pod
@@ -140,6 +140,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 =item B<-h>
 
 =item B<--human-readable>
diff --git a/diff/diff.c b/diff/diff.c
index c04b5f185..f7ab93726 100644
--- a/diff/diff.c
+++ b/diff/diff.c
@@ -126,6 +126,8 @@ usage (int status)
               "  --echo-keys          Don't turn off echo for passphrases\n"
               "  --extra-stats        Display extra stats\n"
               "  --format[=raw|..]    Force disk format for -a or -A option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a or -A option\n"
               "  --help               Display brief help\n"
               "  -h|--human-readable  Human-readable sizes in output\n"
               "  --key selector       Specify a LUKS key\n"
@@ -178,6 +180,7 @@ main (int argc, char *argv[])
     { "extra-stat", 0, 0, 0 },
     { "extra-stats", 0, 0, 0 },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "human-readable", 0, 0, 'h' },
     { "long-options", 0, 0, 0 },
@@ -201,6 +204,8 @@ main (int argc, char *argv[])
   struct drv *drvs2 = NULL;     /* Second guest. */
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
   struct tree *tree1, *tree2;
@@ -232,6 +237,8 @@ main (int argc, char *argv[])
         echo_keys = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "all")) {
         enable_extra_stats = enable_times = enable_uids = enable_xattrs = 1;
       } else if (STREQ (long_options[option_index].name, "atime")) {
@@ -366,6 +373,7 @@ main (int argc, char *argv[])
   assert (live == 0);
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   unsigned errors = 0;
 
diff --git a/diff/virt-diff.pod b/diff/virt-diff.pod
index 0500598bd..c7f2ebcef 100644
--- a/diff/virt-diff.pod
+++ b/diff/virt-diff.pod
@@ -160,6 +160,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a>/I<-A> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 =item B<-h>
 
 =item B<--human-readable>
diff --git a/edit/edit.c b/edit/edit.c
index 4b9f1bed1..635995e0d 100644
--- a/edit/edit.c
+++ b/edit/edit.c
@@ -81,6 +81,8 @@ usage (int status)
               "  --echo-keys           Don't turn off echo for passphrases\n"
               "  -e|--edit|--expr expr Non-interactive editing using Perl expr\n"
               "  --format[=raw|..]     Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help                Display brief help\n"
               "  --key selector       Specify a LUKS key\n"
               "  --keys-from-stdin     Read passphrases from stdin\n"
@@ -115,6 +117,7 @@ main (int argc, char *argv[])
     { "edit", 1, 0, 'e' },
     { "expr", 1, 0, 'e' },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "key", 1, 0, 0 },
     { "keys-from-stdin", 0, 0, 0 },
@@ -132,6 +135,8 @@ main (int argc, char *argv[])
   char *p;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
   struct key_store *ks = NULL;
@@ -156,6 +161,8 @@ main (int argc, char *argv[])
         echo_keys = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "key")) {
         OPTION_key;
       } else
@@ -257,6 +264,7 @@ main (int argc, char *argv[])
     usage (EXIT_FAILURE);
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* User must have specified some drives. */
   if (drvs == NULL) {
diff --git a/edit/virt-edit.pod b/edit/virt-edit.pod
index 4909a7df1..3be756638 100644
--- a/edit/virt-edit.pod
+++ b/edit/virt-edit.pod
@@ -153,6 +153,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 __INCLUDE:key-option.pod__
 
 =item B<--keys-from-stdin>
diff --git a/fish/fish.c b/fish/fish.c
index 2070e370e..419e989df 100644
--- a/fish/fish.c
+++ b/fish/fish.c
@@ -130,6 +130,8 @@ usage (int status)
               "  --echo-keys          Don’t turn off echo for passphrases\n"
               "  -f|--file file       Read commands from file\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help               Display brief help\n"
               "  -i|--inspector       Automatically mount filesystems\n"
               "  --key selector       Specify a LUKS key\n"
@@ -197,6 +199,7 @@ main (int argc, char *argv[])
     { "echo-keys", 0, 0, 0 },
     { "file", 1, 0, 'f' },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "inspector", 0, 0, 'i' },
     { "key", 1, 0, 0 },
@@ -228,6 +231,8 @@ main (int argc, char *argv[])
   char *p, *file = NULL;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
   struct sigaction sa;
@@ -285,6 +290,8 @@ main (int argc, char *argv[])
         echo_keys = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "csh")) {
         remote_control_csh = 1;
       } else if (STREQ (long_options[option_index].name, "live")) {
@@ -468,6 +475,7 @@ main (int argc, char *argv[])
   }
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* If we've got drives to add, add them now. */
   add_drives (drvs);
diff --git a/fish/guestfish.pod b/fish/guestfish.pod
index 1904b640c..2bc951f0f 100644
--- a/fish/guestfish.pod
+++ b/fish/guestfish.pod
@@ -249,6 +249,17 @@ this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).  See also
 L</add>.
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also L</add>.
+
 =item B<-i>
 
 =item B<--inspector>
diff --git a/format/format.c b/format/format.c
index 5453fc7e1..6176734cd 100644
--- a/format/format.c
+++ b/format/format.c
@@ -82,6 +82,8 @@ usage (int status)
               "  -a|--add image       Add image\n"
               "  --filesystem=..      Create empty filesystem\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help               Display brief help\n"
               "  --label=..           Set filesystem label\n"
               "  --lvm=..             Create Linux LVM2 logical volume\n"
@@ -114,6 +116,7 @@ main (int argc, char *argv[])
     { "add", 1, 0, 'a' },
     { "filesystem", 1, 0, 0 },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "label", 1, 0, 0 },
     { "long-options", 0, 0, 0 },
@@ -128,6 +131,8 @@ main (int argc, char *argv[])
   struct drv *drvs = NULL;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
   int retry, retries;
@@ -148,6 +153,8 @@ main (int argc, char *argv[])
         display_short_options (options);
       else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "filesystem")) {
         if (STREQ (optarg, "none"))
           filesystem = NULL;
@@ -233,6 +240,7 @@ main (int argc, char *argv[])
   }
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* The user didn't specify any drives to format. */
   if (drvs == NULL) {
diff --git a/format/virt-format.pod b/format/virt-format.pod
index 11b4409a7..5f491eee4 100644
--- a/format/virt-format.pod
+++ b/format/virt-format.pod
@@ -112,6 +112,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 =item B<--label=>LABEL
 
 Set the filesystem label.
diff --git a/fuse/guestmount.c b/fuse/guestmount.c
index 6c35bcca7..6588d0d48 100644
--- a/fuse/guestmount.c
+++ b/fuse/guestmount.c
@@ -116,6 +116,8 @@ usage (int status)
               "  --echo-keys          Don't turn off echo for passphrases\n"
               "  --fd=FD              Write to pipe FD when mountpoint is ready\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --fuse-help          Display extra FUSE options\n"
               "  -i|--inspector       Automatically mount filesystems\n"
               "  --help               Display help message and exit\n"
@@ -163,6 +165,7 @@ main (int argc, char *argv[])
     { "echo-keys", 0, 0, 0 },
     { "fd", 1, 0, 0 },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "fuse-help", 0, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "inspector", 0, 0, 'i' },
@@ -191,6 +194,8 @@ main (int argc, char *argv[])
   char *p;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c, r;
   int option_index;
   struct sigaction sa;
@@ -235,6 +240,8 @@ main (int argc, char *argv[])
         /* nothing */
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "keys-from-stdin")) {
         keys_from_stdin = 1;
       } else if (STREQ (long_options[option_index].name, "echo-keys")) {
@@ -316,6 +323,7 @@ main (int argc, char *argv[])
   }
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* Check we have the right options. */
   if (!live) {
diff --git a/fuse/guestmount.pod b/fuse/guestmount.pod
index d4e12e641..664dcc037 100644
--- a/fuse/guestmount.pod
+++ b/fuse/guestmount.pod
@@ -230,6 +230,18 @@ this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).  See also
 L<guestfs(3)/guestfs_add_drive_opts>.
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 =item B<--fuse-help>
 
 Display help on special FUSE options (see I<-o> below).
diff --git a/inspector/inspector.c b/inspector/inspector.c
index fa8e721ff..c6f52b90f 100644
--- a/inspector/inspector.c
+++ b/inspector/inspector.c
@@ -96,6 +96,8 @@ usage (int status)
               "  -d|--domain guest    Add disks from libvirt guest\n"
               "  --echo-keys          Don't turn off echo for passphrases\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help               Display brief help\n"
               "  --key selector       Specify a LUKS key\n"
               "  --keys-from-stdin    Read passphrases from stdin\n"
@@ -128,6 +130,7 @@ main (int argc, char *argv[])
     { "domain", 1, 0, 'd' },
     { "echo-keys", 0, 0, 0 },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "key", 1, 0, 0 },
     { "keys-from-stdin", 0, 0, 0 },
@@ -144,6 +147,8 @@ main (int argc, char *argv[])
   struct drv *drv;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
   struct key_store *ks = NULL;
@@ -168,6 +173,8 @@ main (int argc, char *argv[])
         echo_keys = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "xpath")) {
         xpath = optarg;
       } else if (STREQ (long_options[option_index].name, "no-applications")) {
@@ -262,6 +269,7 @@ main (int argc, char *argv[])
   }
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* XPath is modal: no drives should be specified.  There must be
    * one extra parameter on the command line.
diff --git a/inspector/virt-inspector.pod b/inspector/virt-inspector.pod
index 24fbf2e08..48545970c 100644
--- a/inspector/virt-inspector.pod
+++ b/inspector/virt-inspector.pod
@@ -114,6 +114,18 @@ parameter is ignored.
 If working with untrusted raw-format guest disk images, you should
 ensure the format is always specified.
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 __INCLUDE:key-option.pod__
 
 =item B<--keys-from-stdin>
diff --git a/rescue/rescue.c b/rescue/rescue.c
index 419242381..3865450fa 100644
--- a/rescue/rescue.c
+++ b/rescue/rescue.c
@@ -92,6 +92,8 @@ usage (int status)
               "  -d|--domain guest    Add disks from libvirt guest\n"
               "  -e ^x|none           Set or disable escape key (default ^])\n"
               "  --format[=raw|..]    Force disk format for -a option\n"
+              "  --blocksize[=512|4096]\n"
+              "                       Set sector size of the disk for -a option\n"
               "  --help               Display brief help\n"
               "  -i|--inspector       Automatically mount filesystems\n"
               "  -m|--mount dev[:mnt[:opts[:fstype]] Mount dev on mnt (if omitted, /)\n"
@@ -130,6 +132,7 @@ main (int argc, char *argv[])
     { "connect", 1, 0, 'c' },
     { "domain", 1, 0, 'd' },
     { "format", 2, 0, 0 },
+    { "blocksize", 2, 0, 0 },
     { "help", 0, 0, HELP_OPTION },
     { "inspector", 0, 0, 'i' },
     { "long-options", 0, 0, 0 },
@@ -154,6 +157,8 @@ main (int argc, char *argv[])
   char *p;
   const char *format = NULL;
   bool format_consumed = true;
+  int blocksize = 0;
+  bool blocksize_consumed = true;
   int c;
   int option_index;
   int network = 0;
@@ -187,6 +192,8 @@ main (int argc, char *argv[])
         network = 1;
       } else if (STREQ (long_options[option_index].name, "format")) {
         OPTION_format;
+      } else if (STREQ (long_options[option_index].name, "blocksize")) {
+        OPTION_blocksize;
       } else if (STREQ (long_options[option_index].name, "smp")) {
         if (sscanf (optarg, "%d", &smp) != 1)
           error (EXIT_FAILURE, 0,
@@ -334,6 +341,7 @@ main (int argc, char *argv[])
   }
 
   CHECK_OPTION_format_consumed;
+  CHECK_OPTION_blocksize_consumed;
 
   /* User must have specified some drives. */
   if (drvs == NULL) {
diff --git a/rescue/virt-rescue.pod b/rescue/virt-rescue.pod
index c7be8b8af..a4896f432 100644
--- a/rescue/virt-rescue.pod
+++ b/rescue/virt-rescue.pod
@@ -176,6 +176,18 @@ If you have untrusted raw-format guest disk images, you should use
 this option to specify the disk format.  This avoids a possible
 security problem with malicious guests (CVE-2010-3851).
 
+=item B<--blocksize=512>
+
+=item B<--blocksize=4096>
+
+=item B<--blocksize>
+
+This parameter sets the sector size of the disk image.  Similar to
+I<--format> option it affects all subsequent I<-a> options.  Using
+I<--blocksize> with no argument switches disk sector size to the
+default value which usually 512 bytes.  See also
+L<guestfs(3)/guestfs_add_drive_opts>.
+
 =item B<-i>
 
 =item B<--inspector>
-- 
2.17.2





More information about the Libguestfs mailing list