[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kpmcore/raid-support] src/core/raid: Initial Software RAID creation.
From: Caio Carvalho <null () kde ! org>
Date: 2018-07-31 19:23:41
Message-ID: E1fkaFB-0003LI-RK () code ! kde ! org
[Download RAW message or body]
Git commit fed87159da7b9ddf065554270b3512d24e8a0e14 by Caio Carvalho.
Committed on 31/07/2018 at 19:21.
Pushed by cdelimacarvalho into branch 'raid-support'.
Initial Software RAID creation.
M +44 -1 src/core/raid/softwareraid.cpp
M +4 -0 src/core/raid/softwareraid.h
https://commits.kde.org/kpmcore/fed87159da7b9ddf065554270b3512d24e8a0e14
diff --git a/src/core/raid/softwareraid.cpp b/src/core/raid/softwareraid.cpp
index 21aebd9..4802f05 100644
--- a/src/core/raid/softwareraid.cpp
+++ b/src/core/raid/softwareraid.cpp
@@ -380,7 +380,26 @@ bool SoftwareRAID::createSoftwareRAID(Report &report,
const qint32 raidLevel,
const qint32 chunkSize)
{
- return false;
+ QStringList args;
+ args << QStringLiteral("--create") << name;
+ args << QStringLiteral("--level=") + QString::number(raidLevel);
+ args << QStringLiteral("--chunk=") + QString::number(chunkSize);
+ args << QStringLiteral("--raid-devices=") + QString::number(devicePathList.size());
+
+ for (const QString path : qAsConst(devicePathList)) {
+ if (!eraseDeviceMDSuperblock(path))
+ return false;
+
+ args << path;
+ }
+
+ ExternalCommand cmd(QStringLiteral("mdadm"), args);
+
+ if (!cmd.run(-1) || cmd.exitCode() != 0)
+ return false;
+
+ // TODO: Support custom config files.
+ return updateConfigurationFile(QStringLiteral("/etc/mdadm.conf"), cmd.output());
}
bool SoftwareRAID::deleteSoftwareRAID(Report &report,
@@ -456,6 +475,30 @@ qint64 SoftwareRAID::mappedSector(const QString &partitionPath, qint64 sector) c
return -1;
}
+bool SoftwareRAID::eraseDeviceMDSuperblock(const QString &path)
+{
+ ExternalCommand cmd(QStringLiteral("mdadm"),
+ { QStringLiteral("--misc"), QStringLiteral("--zero-superblock"), path});
+
+ return cmd.run(-1) && cmd.exitCode() == 0;
+}
+
+bool SoftwareRAID::updateConfigurationFile(const QString &configurationPath, const QString &info)
+{
+ QFile config(configurationPath);
+
+ if (!config.open(QIODevice::WriteOnly | QIODevice::Append))
+ return false;
+
+ QTextStream out(&config);
+
+ out << info << QLatin1Char('\n');
+
+ config.close();
+
+ return true;
+}
+
QString SoftwareRAID::getDetail(const QString &path)
{
ExternalCommand cmd(QStringLiteral("mdadm"),
diff --git a/src/core/raid/softwareraid.h b/src/core/raid/softwareraid.h
index 803ec54..9269b97 100644
--- a/src/core/raid/softwareraid.h
+++ b/src/core/raid/softwareraid.h
@@ -95,6 +95,10 @@ protected:
qint64 mappedSector(const QString &partitionPath, qint64 sector) const override;
private:
+ static bool eraseDeviceMDSuperblock(const QString& path);
+
+ static bool updateConfigurationFile(const QString& configurationPath, const QString& info);
+
static QString getDetail(const QString& path);
static QString getRAIDConfiguration(const QString& configurationPath);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic