File indexing completed on 2024-05-12 05:48:14
0001 /* 0002 SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho <caiojcarvalho@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #ifndef KPMCORE_SOFTWARERAID_H 0008 #define KPMCORE_SOFTWARERAID_H 0009 0010 #include "core/volumemanagerdevice.h" 0011 #include "util/libpartitionmanagerexport.h" 0012 #include "util/report.h" 0013 0014 class LIBKPMCORE_EXPORT SoftwareRAID : public VolumeManagerDevice 0015 { 0016 Q_DISABLE_COPY(SoftwareRAID) 0017 0018 friend class VolumeManagerDevice; 0019 0020 public: 0021 enum class Status { 0022 Active, 0023 Inactive, 0024 Resync, 0025 Recovery, 0026 }; 0027 0028 explicit SoftwareRAID(const QString& name, 0029 SoftwareRAID::Status status = SoftwareRAID::Status::Active, 0030 const QString& iconName = QString()); 0031 0032 const QStringList deviceNodes() const override; 0033 const QStringList& partitionNodes() const override; 0034 qint64 partitionSize(QString &partitionPath) const override; 0035 0036 virtual bool growArray(Report& report, const QStringList& devices); 0037 0038 virtual bool shrinkArray(Report& report, const QStringList& devices); 0039 0040 virtual QString prettyName() const override; 0041 0042 virtual bool operator==(const Device& other) const override; 0043 0044 qint32 raidLevel() const; 0045 qint64 chunkSize() const; 0046 qint64 totalChunk() const; 0047 qint64 arraySize() const; 0048 QString uuid() const; 0049 QStringList devicePathList() const; 0050 SoftwareRAID::Status status() const; 0051 0052 void setStatus(SoftwareRAID::Status status); 0053 0054 public: 0055 static qint32 getRaidLevel(const QString& path); 0056 static qint64 getChunkSize(const QString& path); 0057 static qint64 getTotalChunk(const QString& path); 0058 static qint64 getArraySize(const QString& path); 0059 static QString getUUID(const QString& path); 0060 static QStringList getDevicePathList(const QString& path); 0061 0062 static bool isRaidPath(const QString& path); 0063 0064 static bool createSoftwareRAID(Report& report, 0065 const QString& name, 0066 const QStringList devicePathList, 0067 const qint32 raidLevel, 0068 const qint32 chunkSize); 0069 0070 static bool deleteSoftwareRAID(Report& report, 0071 SoftwareRAID& raidDevice); 0072 0073 static bool assembleSoftwareRAID(const QString& deviceNode); 0074 0075 static bool stopSoftwareRAID(const QString& deviceNode); 0076 0077 static bool reassembleSoftwareRAID(const QString& deviceNode); 0078 0079 static bool isRaidMember(const QString& path); 0080 0081 protected: 0082 void initPartitions() override; 0083 0084 qint64 mappedSector(const QString &partitionPath, qint64 sector) const override; 0085 0086 private: 0087 static void scanSoftwareRAID(QList<Device*>& devices); 0088 0089 static QString getDetail(const QString& path); 0090 0091 static QString getRAIDConfiguration(const QString& configurationPath); 0092 }; 0093 0094 #endif // SOFTWARERAID_H