Reassemble Software RAID when commit partition table.

This commit is contained in:
Caio Carvalho 2018-07-12 14:08:24 -03:00
parent b11b73b1e5
commit 3f7c5ca722
3 changed files with 19 additions and 12 deletions

View File

@ -218,18 +218,20 @@ bool SoftwareRAID::deleteSoftwareRAID(Report &report,
return false; return false;
} }
bool SoftwareRAID::assembleSoftwareRAID(Report &report, const SoftwareRAID &raidDevice) bool SoftwareRAID::assembleSoftwareRAID(const SoftwareRAID &raidDevice)
{ {
Q_UNUSED(report) ExternalCommand cmd(QStringLiteral("mdadm"),
Q_UNUSED(raidDevice) { QStringLiteral("--assemble"), QStringLiteral("--scan"), raidDevice.deviceNode() });
return false;
return cmd.run(-1) && cmd.exitCode() == 0;
} }
bool SoftwareRAID::stopSoftwareRAID(Report &report, const SoftwareRAID &raidDevice) bool SoftwareRAID::stopSoftwareRAID(const SoftwareRAID &raidDevice)
{ {
Q_UNUSED(report) ExternalCommand cmd(QStringLiteral("mdadm"),
Q_UNUSED(raidDevice) { QStringLiteral("--stop"), raidDevice.deviceNode() });
return false;
return cmd.run(-1) && cmd.exitCode() == 0;
} }
void SoftwareRAID::initPartitions() void SoftwareRAID::initPartitions()

View File

@ -65,11 +65,9 @@ public:
static bool deleteSoftwareRAID(Report& report, static bool deleteSoftwareRAID(Report& report,
SoftwareRAID& raidDevice); SoftwareRAID& raidDevice);
static bool assembleSoftwareRAID(Report& report, static bool assembleSoftwareRAID(const SoftwareRAID& raidDevice);
const SoftwareRAID& raidDevice);
static bool stopSoftwareRAID(Report& report, static bool stopSoftwareRAID(const SoftwareRAID& raidDevice);
const SoftwareRAID& raidDevice);
protected: protected:
void initPartitions() override; void initPartitions() override;

View File

@ -57,6 +57,13 @@ bool SfdiskPartitionTable::commit(quint32 timeout)
ExternalCommand(QStringLiteral("blockdev"), { QStringLiteral("--rereadpt"), m_device->deviceNode() }).run(); ExternalCommand(QStringLiteral("blockdev"), { QStringLiteral("--rereadpt"), m_device->deviceNode() }).run();
ExternalCommand(QStringLiteral("udevadm"), { QStringLiteral("trigger") }).run(); ExternalCommand(QStringLiteral("udevadm"), { QStringLiteral("trigger") }).run();
if (m_device->type() == Device::Type::SoftwareRAID_Device)
{
const SoftwareRAID& raid = static_cast<const SoftwareRAID&>(*m_device);
SoftwareRAID::stopSoftwareRAID(raid);
SoftwareRAID::assembleSoftwareRAID(raid);
}
return true; return true;
} }