Display libparted "loop" partition tables via "none" instead (#741430)

For libparted recognised file systems covering the whole disk device,
libparted reports the partition table as "loop".  With libparted 3.1 and
earlier, the partition device was reported wrongly as /dev/sdb1, instead
of /dev/sdb, by the ped_partition_get_path() call.  This causes GParted
to fail to report file system usage, label and UUID, and busy status.
Also multiple file system tool command errors from using the wrong
device are displayed.

    # mkfs.ext4 -L whole-ext4 /dev/sdb
    # ./gpartedbin

Example partition errors:

    e2label: No such file or directory while trying to open /dev/sdb1
    Couldn't find valid filesystem superblock.

    tune2fs 1.42.8 (20-Jun-2013)
    tune2fs: No such file or directory while trying to open /dev/sdb1
    Couldn't find valid filesystem superblock.

    dumpe2fs 1.42.8 (20-Jun-2013)
    dumpe2fs: No such file or directory while trying to open /dev/sdb1
    Couldn't find valid filesystem superblock.

    Unable to read the contents of this file system!
    Because of this some operations may be unavailable.
    This cause might be a missing software package.
    The following list of software packages is required for ext4 file
    system support: e2fsprogs v1.41+.

This also breaks most of the manipulation operations, again because it
is using the wrong device name.

Fix by ignoring libparted's "loop" partition table and just let it get
displayed via the "none" partition table mechanism.

Doing this renders the direction taken in bug 683643 to make GParted
work with libparted "loop" partition tables mute, as GParted no longer
works with such partition tables.  Instead they are replaced by "none"
partition tables within GParted.

    Bug 683643 - Doesn't properly support partitionless drives
    https://bugzilla.gnome.org/show_bug.cgi?id=683643

Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
             drive
This commit is contained in:
Mike Fleetwood 2014-12-29 10:23:55 +00:00 committed by Curtis Gedak
parent 474c5b10b3
commit f5c044142c
1 changed files with 5 additions and 4 deletions

View File

@ -309,8 +309,9 @@ void GParted_Core::set_devices_thread( std::vector<Device> * pdevices )
if ( temp_device .cylsize < (MEBIBYTE / temp_device .sector_size) )
temp_device .cylsize = (MEBIBYTE / temp_device .sector_size) ;
//normal harddisk
if ( lp_disk )
// Partitioned drive (excluding "loop"), as recognised by libparted
if ( lp_disk && lp_disk->type && lp_disk->type->name &&
strcmp( lp_disk->type->name, "loop" ) != 0 )
{
temp_device .disktype = lp_disk ->type ->name ;
temp_device .max_prims = ped_disk_get_max_primary_partition_count( lp_disk ) ;
@ -333,7 +334,7 @@ void GParted_Core::set_devices_thread( std::vector<Device> * pdevices )
libparted_messages .clear() ;
}
}
// Hard disk without a libparted recognised disklabel
// Unpartitioned drive (including "loop"), as recognised by libparted
else
{
std::vector<Glib::ustring> messages;
@ -341,7 +342,7 @@ void GParted_Core::set_devices_thread( std::vector<Device> * pdevices )
// Recognised file system signature on whole disk device
if ( fstype != FS_UNKNOWN )
{
// Clear the "unrecognised disk label" message
// Clear the possible "unrecognised disk label" message
libparted_messages.clear();
temp_device.disktype = "none";