[gparted] Enable operations on whole disk device virtual partitions (#743181)
- From: Curtis Gedak <gedakc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gparted] Enable operations on whole disk device virtual partitions (#743181)
- Date: Mon, 9 Mar 2015 17:10:40 +0000 (UTC)
commit 6c333f845c723c640db780f056a6dc930718e157
Author: Mike Fleetwood <mike fleetwood googlemail com>
Date: Wed Dec 31 12:41:03 2014 +0000
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
src/Win_GParted.cc | 16 ++++++++--------
1 files changed, 8 insertions(+), 8 deletions(-)
---
diff --git a/src/Win_GParted.cc b/src/Win_GParted.cc
index 8e5def1..1cf0e77 100644
--- a/src/Win_GParted.cc
+++ b/src/Win_GParted.cc
@@ -991,11 +991,6 @@ void Win_GParted::set_valid_operations()
: 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
if ( selected_partition .status == GParted::STAT_REAL
&& selected_partition .type != GParted::TYPE_EXTENDED
@@ -1024,7 +1019,9 @@ void Win_GParted::set_valid_operations()
allow_toggle_busy_state( true ) ;
// 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 );
#ifdef ENABLE_ONLINE_RESIZE
@@ -1115,9 +1112,12 @@ void Win_GParted::set_valid_operations()
//PRIMARY and LOGICAL
if ( selected_partition .type == GParted::TYPE_PRIMARY || selected_partition .type ==
GParted::TYPE_LOGICAL )
{
- allow_delete( 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
if ( (fs .grow || fs .shrink || fs .move ) && ! devices[ current_device ] .readonly )
allow_resize( true ) ;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]