File indexing completed on 2024-05-05 05:48:46
0001 /* 0002 SPDX-FileCopyrightText: 2012-2017 Andrius Štikonas <andrius@stikonas.eu> 0003 SPDX-FileCopyrightText: 2015 Chris Campbell <c.j.campbell@ed.ac.uk> 0004 SPDX-FileCopyrightText: 2016 Chantara Tith <tith.chantara@gmail.com> 0005 SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho <caiojcarvalho@gmail.com> 0006 SPDX-FileCopyrightText: 2020 Arnaud Ferraris <arnaud.ferraris@collabora.com> 0007 SPDX-FileCopyrightText: 2020 Gaël PORTAY <gael.portay@collabora.com> 0008 0009 SPDX-License-Identifier: GPL-3.0-or-later 0010 */ 0011 0012 #ifndef KPMCORE_LVM2_PV_H 0013 #define KPMCORE_LVM2_PV_H 0014 0015 #include "util/libpartitionmanagerexport.h" 0016 0017 #include "core/partition.h" 0018 #include "fs/filesystem.h" 0019 0020 #include <QtGlobal> 0021 0022 class Report; 0023 class QString; 0024 0025 /** Stores information about LVM PV or potentially encrypted LVM PV 0026 * @author Andrius Štikonas <andrius@stikonas.eu> 0027 */ 0028 0029 class LvmPV 0030 { 0031 public: 0032 LvmPV(const QString vgName, const Partition* p, bool isLuks = false); 0033 0034 const QString vgName() const { 0035 return m_vgName; 0036 } 0037 0038 QPointer<const Partition> partition() const { 0039 return m_p; 0040 } 0041 0042 bool isLuks() const { 0043 return m_isLuks; 0044 } 0045 0046 void setLuks(bool luks) { 0047 m_isLuks = luks; 0048 } 0049 0050 private: 0051 QString m_vgName; 0052 QPointer<const Partition> m_p; 0053 bool m_isLuks; 0054 }; 0055 0056 namespace LVM { 0057 /** Class to access a global LVM PV list. 0058 @author Caio Jordão Carvalho <caiojcarvalho@gmail.com> 0059 */ 0060 class LIBKPMCORE_EXPORT pvList 0061 { 0062 public: 0063 static QList<LvmPV> &list() { 0064 return m_list; 0065 } 0066 0067 private: 0068 pvList() { } 0069 0070 private: 0071 static QList<LvmPV> m_list; 0072 }; 0073 } 0074 0075 namespace FS 0076 { 0077 /** LVM2 physical volume. 0078 @author Andrius Štikonas <andrius@stikonas.eu> 0079 */ 0080 class LIBKPMCORE_EXPORT lvm2_pv : public FileSystem 0081 { 0082 0083 public: 0084 lvm2_pv(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label, const QVariantMap& features = {}); 0085 0086 public: 0087 void init() override; 0088 void scan(const QString& deviceNode) override; 0089 0090 qint64 readUsedCapacity(const QString& deviceNode) const override; 0091 bool check(Report& report, const QString& deviceNode) const override; 0092 bool create(Report& report, const QString& deviceNode) override; 0093 bool remove(Report& report, const QString& deviceNode) const override; 0094 bool resize(Report& report, const QString& deviceNode, qint64 length) const override; 0095 bool resizeOnline(Report& report, const QString& deviceNode, const QString& mountPoint, qint64 length) const override; 0096 // bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; 0097 bool updateUUID(Report& report, const QString& deviceNode) const override; 0098 QString readUUID(const QString& deviceNode) const override; 0099 0100 bool canMount(const QString& deviceNode, const QString& mountPoint) const override; 0101 bool canUnmount(const QString& deviceNode) const override; 0102 0103 bool mount(Report& report, const QString& deviceNode, const QString& mountPoint) override; // mountPoint == VG name 0104 bool unmount(Report& report, const QString& deviceNode) override; 0105 0106 0107 CommandSupportType supportGetUsed() const override { 0108 return m_GetUsed; 0109 } 0110 CommandSupportType supportGetLabel() const override { 0111 return m_GetLabel; 0112 } 0113 CommandSupportType supportCreate() const override { 0114 return m_Create; 0115 } 0116 CommandSupportType supportGrow() const override { 0117 return m_Grow; 0118 } 0119 CommandSupportType supportGrowOnline() const override { 0120 return m_Grow; 0121 } 0122 CommandSupportType supportShrink() const override { 0123 return m_Shrink; 0124 } 0125 CommandSupportType supportShrinkOnline() const override { 0126 return m_Shrink; 0127 } 0128 CommandSupportType supportMove() const override { 0129 return m_Move; 0130 } 0131 CommandSupportType supportCheck() const override { 0132 return m_Check; 0133 } 0134 CommandSupportType supportCheckOnline() const override { 0135 return m_Check; 0136 } 0137 CommandSupportType supportCopy() const override { 0138 return m_Copy; 0139 } 0140 CommandSupportType supportBackup() const override { 0141 return m_Backup; 0142 } 0143 CommandSupportType supportSetLabel() const override { 0144 return m_SetLabel; 0145 } 0146 CommandSupportType supportUpdateUUID() const override { 0147 return m_UpdateUUID; 0148 } 0149 CommandSupportType supportGetUUID() const override { 0150 return m_GetUUID; 0151 } 0152 0153 qint64 maxCapacity() const override; 0154 SupportTool supportToolName() const override; 0155 bool supportToolFound() const override; 0156 0157 static QString getpvField(const QString& fieldName, const QString& deviceNode = QString()); 0158 0159 static qint64 getTotalPE(const QString& deviceNode); 0160 static qint64 getAllocatedPE(const QString& deviceNode); 0161 static QString getVGName(const QString& deviceNode); 0162 static QList<LvmPV> getPVinNode(const PartitionNode* parent); 0163 static QList<LvmPV> getPVs(const QList<Device*>& devices); 0164 0165 qint64 allocatedPE() const { return m_AllocatedPE; } 0166 qint64 freePE() const { return m_TotalPE - m_AllocatedPE; } 0167 qint64 totalPE() const { return m_TotalPE; } 0168 qint64 peSize() const { return m_PESize; } 0169 0170 private: 0171 void getPESize(const QString& deviceNode); // return PE size in bytes 0172 0173 public: 0174 static CommandSupportType m_GetUsed; 0175 static CommandSupportType m_GetLabel; 0176 static CommandSupportType m_Create; 0177 static CommandSupportType m_Grow; 0178 static CommandSupportType m_Shrink; 0179 static CommandSupportType m_Move; 0180 static CommandSupportType m_Check; 0181 static CommandSupportType m_Copy; 0182 static CommandSupportType m_Backup; 0183 static CommandSupportType m_SetLabel; 0184 static CommandSupportType m_UpdateUUID; 0185 static CommandSupportType m_GetUUID; 0186 0187 private: 0188 qint64 m_PESize; 0189 qint64 m_TotalPE; 0190 qint64 m_AllocatedPE; 0191 }; 0192 } 0193 0194 #endif