From 355c37097accd8b5c18c3dffd73df792d855a0b8 Mon Sep 17 00:00:00 2001 From: Caio Carvalho Date: Sat, 13 Oct 2018 18:27:52 -0300 Subject: [PATCH] Including fail and remove PV methods for RAID shrinking --- src/core/raid/softwareraid.cpp | 18 ++++++++++++++++++ src/core/raid/softwareraid.h | 6 ++++++ 2 files changed, 24 insertions(+) diff --git a/src/core/raid/softwareraid.cpp b/src/core/raid/softwareraid.cpp index 352757c..284ab1b 100644 --- a/src/core/raid/softwareraid.cpp +++ b/src/core/raid/softwareraid.cpp @@ -580,6 +580,24 @@ QString SoftwareRAID::getDefaultRaidConfigFile() return QString(); } +bool SoftwareRAID::failPV(Report& report, const QString& devicePath, const QString& physicalVolume) +{ + ExternalCommand cmd(QStringLiteral("mdadm"), + { QStringLiteral("--manage"), QStringLiteral("--fail"), devicePath, physicalVolume }); + + return cmd.run(-1) && cmd.exitCode() == 0; +} + +bool SoftwareRAID::removePV(Report& report, const QString& devicePath, const QString& physicalVolume) +{ + failPV(report, devicePath, physicalVolume); + + ExternalCommand cmd(QStringLiteral("mdadm"), + { QStringLiteral("--manage"), QStringLiteral("--remove"), devicePath, physicalVolume }); + + return cmd.run(-1) && cmd.exitCode() == 0; +} + void SoftwareRAID::setPartitionNodes(const QStringList& partitionNodes) { d_ptr->m_partitionPathList = partitionNodes; diff --git a/src/core/raid/softwareraid.h b/src/core/raid/softwareraid.h index 7e9b58d..37f351a 100644 --- a/src/core/raid/softwareraid.h +++ b/src/core/raid/softwareraid.h @@ -94,6 +94,12 @@ public: static QString getDefaultRaidConfigFile(); + static bool failPV(Report& report, const QString& devicePath, const QString& physicalVolume); + + //static bool insertPV(Report& report, SoftwareRAID& raid, const QString& deviceNode); + + static bool removePV(Report& report, const QString& devicePath, const QString& physicalVolume); + protected: void initPartitions() override;