diff --git a/src/core/raid/softwareraid.cpp b/src/core/raid/softwareraid.cpp index 3fc6938..4f81fe2 100644 --- a/src/core/raid/softwareraid.cpp +++ b/src/core/raid/softwareraid.cpp @@ -218,22 +218,33 @@ bool SoftwareRAID::deleteSoftwareRAID(Report &report, return false; } -bool SoftwareRAID::assembleSoftwareRAID(const SoftwareRAID &raidDevice) +bool SoftwareRAID::assembleSoftwareRAID(const QString& deviceNode) { + if (!isRaidPath(deviceNode)) + return false; + ExternalCommand cmd(QStringLiteral("mdadm"), - { QStringLiteral("--assemble"), QStringLiteral("--scan"), raidDevice.deviceNode() }); + { QStringLiteral("--assemble"), QStringLiteral("--scan"), deviceNode }); return cmd.run(-1) && cmd.exitCode() == 0; } -bool SoftwareRAID::stopSoftwareRAID(const SoftwareRAID &raidDevice) +bool SoftwareRAID::stopSoftwareRAID(const QString& deviceNode) { + if (!isRaidPath(deviceNode)) + return false; + ExternalCommand cmd(QStringLiteral("mdadm"), - { QStringLiteral("--stop"), raidDevice.deviceNode() }); + { QStringLiteral("--stop"), deviceNode }); return cmd.run(-1) && cmd.exitCode() == 0; } +bool SoftwareRAID::reassembleSoftwareRAID(const QString &deviceNode) +{ + return stopSoftwareRAID(deviceNode) && assembleSoftwareRAID(deviceNode); +} + void SoftwareRAID::initPartitions() { diff --git a/src/core/raid/softwareraid.h b/src/core/raid/softwareraid.h index 6145388..580bf84 100644 --- a/src/core/raid/softwareraid.h +++ b/src/core/raid/softwareraid.h @@ -65,9 +65,11 @@ public: static bool deleteSoftwareRAID(Report& report, SoftwareRAID& raidDevice); - static bool assembleSoftwareRAID(const SoftwareRAID& raidDevice); + static bool assembleSoftwareRAID(const QString& deviceNode); - static bool stopSoftwareRAID(const SoftwareRAID& raidDevice); + static bool stopSoftwareRAID(const QString& deviceNode); + + static bool reassembleSoftwareRAID(const QString& deviceNode); protected: void initPartitions() override; diff --git a/src/plugins/sfdisk/sfdiskpartitiontable.cpp b/src/plugins/sfdisk/sfdiskpartitiontable.cpp index c794d01..a6637d1 100644 --- a/src/plugins/sfdisk/sfdiskpartitiontable.cpp +++ b/src/plugins/sfdisk/sfdiskpartitiontable.cpp @@ -57,12 +57,7 @@ bool SfdiskPartitionTable::commit(quint32 timeout) ExternalCommand(QStringLiteral("blockdev"), { QStringLiteral("--rereadpt"), m_device->deviceNode() }).run(); ExternalCommand(QStringLiteral("udevadm"), { QStringLiteral("trigger") }).run(); - if (m_device->type() == Device::Type::SoftwareRAID_Device) - { - const SoftwareRAID& raid = static_cast(*m_device); - SoftwareRAID::stopSoftwareRAID(raid); - SoftwareRAID::assembleSoftwareRAID(raid); - } + SoftwareRAID::reassembleSoftwareRAID(m_device->deviceNode()); return true; }