Enable operations on whole disk device virtual partitions (#743181)
Enable operations on whole disk devices containing any recognised file system. The new partition operation on an empty whole disk device continues to display the "No partition table found on device /dev/DEVICE" information dialog. Specifically unsupported operations: * Delete - Deletion of a partition only involves removal of the entry in the partition table leaving the file system intact on the disk. However this doesn't work for a whole disk device file system. Instead the file system signatures would have to be erased which is much more destructive and virtually impossible to undo. Therefore don't implement whole disk device file system deletion. Alternatives are to format the file system to cleared or create a partition table on the device. Both of these imply overwriting the existing data and set the expectation that undo is not possible. * Manage flags - There's no partition table, so there's no partition, so there's no flags. Resize/Move operation is being supported so that a whole disk device file system can be resized to handle devices which can be resize, such as those from SANs or Linux Software RAID arrays. The start of the file system must remain fixed so move won't be allowed. So far only simple operations work if they don't need libparted support at all [1], or only need libparted support for the calibrate step AND the file system on the whole disk device is recognised by libparted [2]. (Needs libparted to provide a "loop" partition, hence the recognition requirement, so that the calibrate step can successfully read the virtual "loop" partition table. Doesn't matter whether it's an old version of libparted and it gets the name of the device wrong as GParted is already using the whole disk device name anyway). [1] Operations not needing any libparted support: Mount on, Unmount, Swapon, Swapoff, Activate and Deactivate [2] Operations only needing libparted support for the calibrate step: Check, Label, New UUID Bug 743181 - Add unpartitioned drive read-write support
This commit is contained in:
parent
5098744f9a
commit
6c333f845c
|
@ -991,11 +991,6 @@ void Win_GParted::set_valid_operations()
|
||||||
: CTEXT_ACTIVATE_FILESYSTEM )
|
: CTEXT_ACTIVATE_FILESYSTEM )
|
||||||
) ;
|
) ;
|
||||||
|
|
||||||
// No manipulation operations are currently supported on file systems using the
|
|
||||||
// whole disk device.
|
|
||||||
if ( devices[current_device].disktype == "none" )
|
|
||||||
return;
|
|
||||||
|
|
||||||
//Only permit mount/unmount, swapon/swapoff, activate/deactivate if action is available
|
//Only permit mount/unmount, swapon/swapoff, activate/deactivate if action is available
|
||||||
if ( selected_partition .status == GParted::STAT_REAL
|
if ( selected_partition .status == GParted::STAT_REAL
|
||||||
&& selected_partition .type != GParted::TYPE_EXTENDED
|
&& selected_partition .type != GParted::TYPE_EXTENDED
|
||||||
|
@ -1024,7 +1019,9 @@ void Win_GParted::set_valid_operations()
|
||||||
allow_toggle_busy_state( true ) ;
|
allow_toggle_busy_state( true ) ;
|
||||||
|
|
||||||
// Manage flags
|
// Manage flags
|
||||||
if ( selected_partition.type != TYPE_UNALLOCATED && selected_partition.status == STAT_REAL )
|
if ( selected_partition.type != TYPE_UNALLOCATED &&
|
||||||
|
selected_partition.status == STAT_REAL &&
|
||||||
|
! selected_partition.whole_device )
|
||||||
allow_manage_flags( true );
|
allow_manage_flags( true );
|
||||||
|
|
||||||
#ifdef ENABLE_ONLINE_RESIZE
|
#ifdef ENABLE_ONLINE_RESIZE
|
||||||
|
@ -1115,9 +1112,12 @@ void Win_GParted::set_valid_operations()
|
||||||
//PRIMARY and LOGICAL
|
//PRIMARY and LOGICAL
|
||||||
if ( selected_partition .type == GParted::TYPE_PRIMARY || selected_partition .type == GParted::TYPE_LOGICAL )
|
if ( selected_partition .type == GParted::TYPE_PRIMARY || selected_partition .type == GParted::TYPE_LOGICAL )
|
||||||
{
|
{
|
||||||
allow_delete( true ) ;
|
|
||||||
allow_format( true ) ;
|
allow_format( true ) ;
|
||||||
|
|
||||||
|
// only allow deletion of partitions within a partition table
|
||||||
|
if ( ! selected_partition.whole_device )
|
||||||
|
allow_delete( true );
|
||||||
|
|
||||||
//find out if resizing/moving is possible
|
//find out if resizing/moving is possible
|
||||||
if ( (fs .grow || fs .shrink || fs .move ) && ! devices[ current_device ] .readonly )
|
if ( (fs .grow || fs .shrink || fs .move ) && ! devices[ current_device ] .readonly )
|
||||||
allow_resize( true ) ;
|
allow_resize( true ) ;
|
||||||
|
|
Loading…
Reference in New Issue