gparted/include/ext2.h

75 lines
2.8 KiB
C
Raw Normal View History

/* Copyright (C) 2004 Bart
* Copyright (C) 2008, 2009, 2010 Curtis Gedak
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef GPARTED_EXT2_H
#define GPARTED_EXT2_H
#include "../include/FileSystem.h"
#include "../include/OperationDetail.h"
#include "../include/Partition.h"
Display progress of ext2/3/4 file system specific copy and move operations (#760709) Using e2image to copy a file system looks like this. (Intermediate progress lines which are constantly overwritten are indicated with ">"). # e2image -ra -p /dev/sdb4 /dev/sdb5 e2image 1.42.13 (17-May-2015) Scanning inodes... > Copying 0 / 276510 blocks (0%) > Copying 8845 / 276510 blocks (3%) > Copying 48433 / 276510 blocks (18%) > Copying 77135 / 276510 blocks (28%) > Copying 111311 / 276510 blocks (40%) > Copying 137039 / 276510 blocks (50%) > Copying 166189 / 276510 blocks (60%) 00:00:03 remaining at 108.20 MB/s > Copying 190285 / 276510 blocks (69%) 00:00:03 remaining at 106.19 MB/s > Copying 209675 / 276510 blocks (76%) 00:00:02 remaining at 102.38 MB/s > Copying 238219 / 276510 blocks (86%) 00:00:01 remaining at 103.39 MB/s > Copying 256692 / 276510 blocks (93%) 00:00:00 remaining at 100.27 MB/s Copied 276510 / 276510 blocks (100%) in 00:00:10 at 108.01 MB/s Note that the copying figures are reported in file system block size units and the progress information is written to stderr, hence needing these two previous commits: Record file system block size where known (#760709) Call any FS specific progress trackers for stderr updates too (#760709) Add progress tracking function for e2image command. Also tracks when the text progress indicator has passed in the output so that the progress bar can be stopped as well as started when needed. Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific copy methods
2016-01-16 12:13:02 +00:00
#include "../include/Utils.h"
#include <glibmm/ustring.h>
namespace GParted
{
class ext2 : public FileSystem
{
const enum FILESYSTEM specific_type;
Glib::ustring dump_cmd;
Glib::ustring fsck_cmd;
Glib::ustring image_cmd;
Glib::ustring label_cmd;
Glib::ustring mkfs_cmd;
Glib::ustring resize_cmd;
Glib::ustring tune_cmd;
public:
ext2( enum FILESYSTEM type ) : specific_type( type ), dump_cmd( "" ), fsck_cmd( "" ), image_cmd( "" ),
Only enable ext4 64bit feature when required (#766910) E2fsprogs version 1.43 always creates 64bit ext4 file systems by default [1][2] regardless of the partition size. Previously it only enabled the 64bit feature when required on ext4 volumes 16 TiB and larger. Also note that RHEL / CentOS 7 always create 64bit ext4 file systems by default from e2fsprogs 1.42.9 [3]. (At least some versions of) Grub 2 and syslinux boot loaders don't work with 64bit ext4 file systems [4][5][6]. For maximum boot loader compatibility make GParted implement what mke2fs previously did, only setting the 64bit feature on volumes 16 TiB and larger and clearing it otherwise. Only applied to mkfs.ext4 version 1.42 and later. [1] Release notes, E2fsprogs 1.43 (May 17, 2016) http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.43 "Mke2fs will now create file systems with the metadata_csum and 64bit features enabled by default". [2] http://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/commit/?id=cd27af3ecb83e8fd1e3eaa14994284a1818c7c15 mke2fs: enable the metadata_csum and 64bit features by default [3] Comment 20 and 21 in Red Hat bug 1099237 https://bugzilla.redhat.com/show_bug.cgi?id=1099237#c20 "..., is rhel7 default behavior w.r.t. 64 bit really different from upstream ? Yes it is. This is what we have in RHEL7: Patch6: e2fsprogs-1.42.9-enable-64bit-feature-by-default.patch it fixed this bz: https://bugzilla.redhat.com/show_bug.cgi?id=982871 and this is upstream proposal: http://www.spinics.net/lists/linux-ext4/msg42294.html" [4] Grub 2 not working on Slackware with 64bit EXT4 http://www.linuxquestions.org/questions/slackware-14/grub-mkconfig-error-in-slackware-current-64-bit-4175580544/ [5] Syslinux not working on Slackware with 64bit EXT4 http://www.linuxquestions.org/questions/slackware-14/slackware64-current-5-20-2016-syslinux-booting-and-ext4-formatting-4175580324/ [6] Syslinux not working on RHEL 7 with 64bit EXT4 Bug 1099237 - rhel7 ext4 defaults to 64 bit, which extlinux can't reliably read https://bugzilla.redhat.com/show_bug.cgi?id=1099237 Bug 766910 - Multiple boot loaders don't work on 64bit EXT4 file systems
2016-05-29 12:42:03 +00:00
label_cmd( "" ), mkfs_cmd( "" ), resize_cmd( "" ), tune_cmd( "" ),
force_auto_64bit( false ) {};
FS get_filesystem_support() ;
void set_used_sectors( Partition & partition ) ;
void read_label( Partition & partition ) ;
bool write_label( const Partition & partition, OperationDetail & operationdetail ) ;
void read_uuid( Partition & partition ) ;
bool write_uuid( const Partition & partition, OperationDetail & operationdetail ) ;
bool create( const Partition & new_partition, OperationDetail & operationdetail ) ;
bool resize( const Partition & partition_new, OperationDetail & operationdetail, bool fill_partition = false ) ;
bool check_repair( const Partition & partition, OperationDetail & operationdetail ) ;
bool move( const Partition & partition_new,
const Partition & partition_old,
OperationDetail & operationdetail );
bool copy( const Partition & partition_new,
Partition & partition_old,
OperationDetail & operationdetail );
private:
void resize_progress( OperationDetail *operationdetail );
void create_progress( OperationDetail *operationdetail );
void check_repair_progress( OperationDetail *operationdetail );
Display progress of ext2/3/4 file system specific copy and move operations (#760709) Using e2image to copy a file system looks like this. (Intermediate progress lines which are constantly overwritten are indicated with ">"). # e2image -ra -p /dev/sdb4 /dev/sdb5 e2image 1.42.13 (17-May-2015) Scanning inodes... > Copying 0 / 276510 blocks (0%) > Copying 8845 / 276510 blocks (3%) > Copying 48433 / 276510 blocks (18%) > Copying 77135 / 276510 blocks (28%) > Copying 111311 / 276510 blocks (40%) > Copying 137039 / 276510 blocks (50%) > Copying 166189 / 276510 blocks (60%) 00:00:03 remaining at 108.20 MB/s > Copying 190285 / 276510 blocks (69%) 00:00:03 remaining at 106.19 MB/s > Copying 209675 / 276510 blocks (76%) 00:00:02 remaining at 102.38 MB/s > Copying 238219 / 276510 blocks (86%) 00:00:01 remaining at 103.39 MB/s > Copying 256692 / 276510 blocks (93%) 00:00:00 remaining at 100.27 MB/s Copied 276510 / 276510 blocks (100%) in 00:00:10 at 108.01 MB/s Note that the copying figures are reported in file system block size units and the progress information is written to stderr, hence needing these two previous commits: Record file system block size where known (#760709) Call any FS specific progress trackers for stderr updates too (#760709) Add progress tracking function for e2image command. Also tracks when the text progress indicator has passed in the output so that the progress bar can be stopped as well as started when needed. Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific copy methods
2016-01-16 12:13:02 +00:00
void copy_progress( OperationDetail *operationdetail );
Byte_Value fs_block_size; // Holds file system block size for the copy_progress() callback
Only enable ext4 64bit feature when required (#766910) E2fsprogs version 1.43 always creates 64bit ext4 file systems by default [1][2] regardless of the partition size. Previously it only enabled the 64bit feature when required on ext4 volumes 16 TiB and larger. Also note that RHEL / CentOS 7 always create 64bit ext4 file systems by default from e2fsprogs 1.42.9 [3]. (At least some versions of) Grub 2 and syslinux boot loaders don't work with 64bit ext4 file systems [4][5][6]. For maximum boot loader compatibility make GParted implement what mke2fs previously did, only setting the 64bit feature on volumes 16 TiB and larger and clearing it otherwise. Only applied to mkfs.ext4 version 1.42 and later. [1] Release notes, E2fsprogs 1.43 (May 17, 2016) http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.43 "Mke2fs will now create file systems with the metadata_csum and 64bit features enabled by default". [2] http://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/commit/?id=cd27af3ecb83e8fd1e3eaa14994284a1818c7c15 mke2fs: enable the metadata_csum and 64bit features by default [3] Comment 20 and 21 in Red Hat bug 1099237 https://bugzilla.redhat.com/show_bug.cgi?id=1099237#c20 "..., is rhel7 default behavior w.r.t. 64 bit really different from upstream ? Yes it is. This is what we have in RHEL7: Patch6: e2fsprogs-1.42.9-enable-64bit-feature-by-default.patch it fixed this bz: https://bugzilla.redhat.com/show_bug.cgi?id=982871 and this is upstream proposal: http://www.spinics.net/lists/linux-ext4/msg42294.html" [4] Grub 2 not working on Slackware with 64bit EXT4 http://www.linuxquestions.org/questions/slackware-14/grub-mkconfig-error-in-slackware-current-64-bit-4175580544/ [5] Syslinux not working on Slackware with 64bit EXT4 http://www.linuxquestions.org/questions/slackware-14/slackware64-current-5-20-2016-syslinux-booting-and-ext4-formatting-4175580324/ [6] Syslinux not working on RHEL 7 with 64bit EXT4 Bug 1099237 - rhel7 ext4 defaults to 64 bit, which extlinux can't reliably read https://bugzilla.redhat.com/show_bug.cgi?id=1099237 Bug 766910 - Multiple boot loaders don't work on 64bit EXT4 file systems
2016-05-29 12:42:03 +00:00
bool force_auto_64bit; // Manually setting ext4 64bit feature on creation
};
} //GParted
#endif /* GPARTED_EXT2_H */