[Parted-maintainers] Bug#380226: NTFS (partition) not recreated
correctly after resize:incorrect start sector
Ben Hutchings
ben at decadent.org.uk
Wed Feb 28 01:52:40 CET 2007
reassign 380226 partman-base
thanks
This is not a bug in libparted; parted_server is simply not specifying
the correct constraint for the resize operation.
This patch might fix parted_server, but I don't know how to test it.
diff -u parted_server.c~ parted_server.
--- parted_server.c~ 2007-01-11 13:57:27.000000000 +0000
+++ parted_server.c 2007-02-27 23:50:18.000000000 +0000
@@ -712,8 +712,6 @@
ped_file_system_close(fs);
fs = NULL;
}
- if (NULL == fs && NULL != ped_file_system_probe(&(part->geom)))
- return false;
} else {
fs = NULL;
}
@@ -727,10 +725,50 @@
log("successfully checked");
if (part->type & PED_PARTITION_LOGICAL)
maximize_extended_partition(disk);
- if (NULL != fs)
+ if (NULL != fs) {
constraint = ped_file_system_get_resize_constraint(fs);
- else
- constraint = ped_constraint_any(disk->dev);
+ } else {
+ PedFileSystemType *fs_type;
+ PedGeometry *fs_geom;
+ PedAlignment start_align;
+ PedGeometry full_dev;
+ fs_type = ped_file_system_probe(&(part->geom));
+ log("probed file system: %s", NULL != fs_type ? "yes" : "no");
+ if (NULL != fs_type) {
+ fs_geom = ped_file_system_probe_specific(fs_type,
+ &part->geom);
+ } else {
+ fs_geom = NULL;
+ }
+ if (NULL != fs_geom) {
+ /* We cannot resize or move the fs but we can move the
+ * end of the partition so long as it contains the
+ * whole fs.
+ */
+ if (ped_alignment_init(&start_align,
+ fs_geom->start, 0)
+ && ped_geometry_init(&full_dev, disk->dev,
+ 0, disk->dev->length - 1)) {
+ constraint = ped_constraint_new(
+ &start_align,
+ ped_alignment_any,
+ &full_dev, &full_dev,
+ fs_geom->length,
+ disk->dev->length);
+ } else {
+ constraint = NULL;
+ }
+ ped_geometry_destroy(fs_geom);
+ } else {
+ constraint = NULL;
+ }
+ }
+ if (open_filesystem && NULL == constraint) {
+ log("failed to get resize constraint");
+ if (NULL != fs)
+ ped_file_system_close(fs);
+ return false;
+ }
if (!ped_disk_set_partition_geom(disk, part, constraint, start, end))
result = false;
else if (NULL == fs)
-- END --
I'm assuming that open_filesystem will be set when resizing the NTFS
partition. This should be the case if it's not a virtual partition
(what does that mean?).
Ben.
--
Ben Hutchings
Power corrupts. Absolute power is kind of neat.
- John Lehman, Secretary of the US Navy 1981-1987
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.alioth.debian.org/pipermail/parted-maintainers/attachments/20070228/b93a7a6e/attachment.pgp
More information about the Parted-maintainers
mailing list