lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <1387211559-25743-1-git-send-email-psusi@ubuntu.com> Date: Mon, 16 Dec 2013 11:32:39 -0500 From: Phillip Susi <psusi@...ntu.com> To: ttytso@....edu Cc: linux-ext4@...r.kernel.org Subject: [PATCH 1/4] e2image: add offset switches Add -o and -O switches to specify the offset where the source and destination filesystems start. This is useful if you have an image of a partitioned disk or wish to create one. Signed-off-by: Phillip Susi <psusi@...ntu.com> --- misc/e2image.8.in | 36 ++++++++++++++++++++++++++++++++++++ misc/e2image.c | 30 ++++++++++++++++++++++++------ 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/misc/e2image.8.in b/misc/e2image.8.in index 84b9729..86d3dfc 100644 --- a/misc/e2image.8.in +++ b/misc/e2image.8.in @@ -10,6 +10,14 @@ e2image \- Save critical ext2/ext3/ext4 filesystem metadata to a file [ .B \-rsIQa ] +[ +.B \-o +.I source_offset +] +[ +.B \-O +.I dest_offset +] .I device .I image-file .SH DESCRIPTION @@ -191,6 +199,34 @@ give an image that is suitable to use to clone the entire FS or for backup purposes. Note that this option only works with the raw or QCOW2 formats. .PP +.SH OFFSETS +Normally a filesystem starts at the beginning of a partition, and +.B e2image +is run on the partition. When working with image files, you don't +have the option of using the partition device, so you can specify +the offset where the filesystem starts directly with the +.B \-o +option. Similarly the +.B \-O +option specifies the offset that should be seeked to in the destination +before writing the filesystem. +.PP +For example, if you have a +.B dd +image of a whole hard drive that contains an ext2 fs in a partition +starting at 1 MiB, you can clone that fs with: +.PP +.br +\ \fBe2image \-aro 1048576 img /dev/sda1\fR +.br +.PP +Or you can clone a fs into an image file, leaving room in the first +MiB for a partition table with: +.PP +.br +\ \fBe2image -arO 1048576 /dev/sda1 img\fR +.br +.PP .SH AUTHOR .B e2image was written by Theodore Ts'o (tytso@....edu). diff --git a/misc/e2image.c b/misc/e2image.c index 885a794..f7f2e90 100644 --- a/misc/e2image.c +++ b/misc/e2image.c @@ -55,6 +55,7 @@ char * device_name = NULL; char all_data; char output_is_blk; /* writing to blk device: don't skip zeroed blocks */ +blk64_t source_offset, dest_offset; static void lseek_error_and_exit(int errnum) { @@ -87,7 +88,7 @@ static int get_bits_from_size(size_t size) static void usage(void) { - fprintf(stderr, _("Usage: %s [-rsIQa] device image_file\n"), + fprintf(stderr, _("Usage: %s [-rsIQa] [-o source_offset] [-O dest_offset] device image_file\n"), program_name); exit (1); } @@ -1269,7 +1270,7 @@ int main (int argc, char ** argv) if (argc && *argv) program_name = *argv; add_error_table(&et_ext2_error_table); - while ((c = getopt(argc, argv, "rsIQa")) != EOF) + while ((c = getopt(argc, argv, "rsIQao:O:")) != EOF) switch (c) { case 'I': flags |= E2IMAGE_INSTALL_FLAG; @@ -1290,6 +1291,12 @@ int main (int argc, char ** argv) case 'a': all_data = 1; break; + case 'o': + source_offset = strtoull(optarg, NULL, 0); + break; + case 'O': + dest_offset = strtoull(optarg, NULL, 0); + break; default: usage(); } @@ -1301,7 +1308,11 @@ int main (int argc, char ** argv) "with raw or QCOW2 images."); exit(1); } - + if ((source_offset || dest_offset) && img_type != E2IMAGE_RAW) { + com_err(program_name, 0, + "Offsets are only allowed with raw images."); + exit(1); + } device_name = argv[optind]; image_fn = argv[optind+1]; @@ -1317,9 +1328,11 @@ int main (int argc, char ** argv) goto skip_device; } } - - retval = ext2fs_open (device_name, open_flag, 0, 0, - unix_io_manager, &fs); + char *options; + asprintf (&options, "offset=%llu", source_offset); + retval = ext2fs_open2 (device_name, options, open_flag, 0, 0, + unix_io_manager, &fs); + free (options); if (retval) { com_err (program_name, retval, _("while trying to open %s"), device_name); @@ -1338,6 +1351,11 @@ skip_device: exit(1); } } + if (dest_offset) + if (ext2fs_llseek (fd, dest_offset, SEEK_SET) < 0) { + perror("ext2fs_llseek"); + exit(1); + } if ((img_type & E2IMAGE_QCOW2) && (fd == 1)) { com_err(program_name, 0, "QCOW2 image can not be written to " -- 1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists