2012-01-28 07:25:31 -07:00
|
|
|
/* Copyright (C) 2012 Mike Fleetwood
|
|
|
|
*
|
|
|
|
* 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 Library General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/* LVM2_PV_Info
|
|
|
|
*
|
|
|
|
* A persistent cache of information about LVM2 PVs that helps to
|
|
|
|
* minimize the number of executions of lvm commands used to query
|
|
|
|
* their attributes.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef LVM2_PV_INFO_H_
|
|
|
|
#define LVM2_PV_INFO_H_
|
|
|
|
|
|
|
|
#include "../include/Utils.h"
|
|
|
|
|
|
|
|
namespace GParted
|
|
|
|
{
|
|
|
|
|
|
|
|
class LVM2_PV_Info
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
LVM2_PV_Info() ;
|
|
|
|
LVM2_PV_Info( bool do_refresh ) ;
|
|
|
|
~LVM2_PV_Info() ;
|
|
|
|
bool is_lvm2_pv_supported() ;
|
|
|
|
Glib::ustring get_vg_name( const Glib::ustring & path ) ;
|
|
|
|
Byte_Value get_free_bytes( const Glib::ustring & path ) ;
|
|
|
|
bool has_active_lvs( const Glib::ustring & path ) ;
|
|
|
|
private:
|
2011-12-11 16:17:52 -07:00
|
|
|
void initialize_if_required() ;
|
Switch to using lvs to identify active LVM LVs (#160787)
Previously used "dmsetup info" to directly list device-mapper mapping
names in the kernel to identify active Logical Volumes. However GParted
failed to recognise active LVs if the VGNAME contains any hyphens (-).
This is because LVM encodes hyphens as double hyphens in the mapping
name.
To avoid having to duplicate the LVM hyphen encoding in GParted, switch
to using "lvm lvs" to list LVs.
# dmsetup info --columns --noheadings --separator , -o name
GParted_VG1-lvol_00
GParted--VG2-lvol--00
# lvm lvs --noheadings --separator , -o lv_name,vg_name,lv_attr
lvol_00,GParted_VG1,-wi-a-
lvol-00,GParted-VG2,-wi-a-
lvol-01,GParted-VG3,-wi---
.^.
(-) not active, (a) or any other character considered active. Reference
lvs(8).
Bug #160787 - lvm support
2012-02-02 06:22:46 -07:00
|
|
|
void set_command_found() ;
|
2012-01-28 07:25:31 -07:00
|
|
|
void load_lvm2_pv_info_cache() ;
|
|
|
|
Glib::ustring get_pv_attr( const Glib::ustring & path, unsigned int entry ) ;
|
|
|
|
static bool lvm2_pv_info_cache_initialized ;
|
|
|
|
static bool lvm_found ;
|
|
|
|
static std::vector<Glib::ustring> lvm2_pv_cache ;
|
Switch to using lvs to identify active LVM LVs (#160787)
Previously used "dmsetup info" to directly list device-mapper mapping
names in the kernel to identify active Logical Volumes. However GParted
failed to recognise active LVs if the VGNAME contains any hyphens (-).
This is because LVM encodes hyphens as double hyphens in the mapping
name.
To avoid having to duplicate the LVM hyphen encoding in GParted, switch
to using "lvm lvs" to list LVs.
# dmsetup info --columns --noheadings --separator , -o name
GParted_VG1-lvol_00
GParted--VG2-lvol--00
# lvm lvs --noheadings --separator , -o lv_name,vg_name,lv_attr
lvol_00,GParted_VG1,-wi-a-
lvol-00,GParted-VG2,-wi-a-
lvol-01,GParted-VG3,-wi---
.^.
(-) not active, (a) or any other character considered active. Reference
lvs(8).
Bug #160787 - lvm support
2012-02-02 06:22:46 -07:00
|
|
|
static std::vector<Glib::ustring> lvm2_lv_cache ;
|
2012-01-28 07:25:31 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
}//GParted
|
|
|
|
|
|
|
|
#endif /*LVM2_PV_INFO_H_*/
|