Add used and free PV scan for lvm2_pv.

This commit is contained in:
Chantara Tith 2016-07-03 18:09:56 +07:00
parent 016daaa75d
commit e5714ced27
2 changed files with 57 additions and 25 deletions

View File

@ -173,16 +173,6 @@ bool lvm2_pv::canUnmount(const QString& deviceNode) const
return true;
}
QString lvm2_pv::mountTitle() const
{
return i18nc("@title:menu", "Add to VG");
}
QString lvm2_pv::unmountTitle() const
{
return i18nc("@title:menu", "Remove from VG");
}
qint64 lvm2_pv::getTotalPE(const QString& deviceNode) const
{
QString val = getpvField(QStringLiteral("pv_pe_count"), deviceNode);
@ -214,17 +204,19 @@ qint64 lvm2_pv::getPESize(const QString& deviceNode) const
QString lvm2_pv::getpvField(const QString& fieldname, const QString& deviceNode)
{
ExternalCommand cmd(QStringLiteral("lvm"),
{ QStringLiteral("pvs"),
QStringLiteral("--foreign"),
QStringLiteral("--readonly"),
QStringLiteral("--noheadings"),
QStringLiteral("--units"),
QStringLiteral("B"),
QStringLiteral("--nosuffix"),
QStringLiteral("--options"),
fieldname,
deviceNode });
QStringList args = { QStringLiteral("pvs"),
QStringLiteral("--foreign"),
QStringLiteral("--readonly"),
QStringLiteral("--noheadings"),
QStringLiteral("--units"),
QStringLiteral("B"),
QStringLiteral("--nosuffix"),
QStringLiteral("--options"),
fieldname };
if (!deviceNode.isEmpty()) {
args << deviceNode;
}
ExternalCommand cmd(QStringLiteral("lvm"), args);
if (cmd.run(-1) && cmd.exitCode() == 0) {
return cmd.output().trimmed();
}
@ -236,4 +228,42 @@ QString lvm2_pv::getVGName(const QString& deviceNode)
return getpvField(QStringLiteral("vg_name"), deviceNode);
}
QStringList lvm2_pv::getFreePV()
{
QStringList rlist;
QString output = getpvField(QStringLiteral("pv_name"));
QStringList pvList = output.split(QStringLiteral("\n"), QString::SkipEmptyParts);
foreach (QString pvnode, pvList) {
if (!isUsed(pvnode.trimmed())) {
rlist.append(pvnode);
}
}
return rlist;
}
QStringList lvm2_pv::getUsedPV(const QString& vgname)
{
QStringList rlist;
QString output = getpvField(QStringLiteral("pv_name"), vgname);
QStringList pvList = output.split(QStringLiteral("\n"), QString::SkipEmptyParts);
foreach (QString pvnode, pvList) {
if (isUsed(pvnode.trimmed())) {
rlist.append(pvnode);
}
}
return rlist;
}
bool lvm2_pv::isUsed(const QString& deviceNode)
{
QString output = getpvField(QStringLiteral("pv_in_use"), deviceNode.trimmed());
if (output.trimmed() == QStringLiteral("used")) {
return true;
}
return false;
}
}

View File

@ -54,8 +54,6 @@ public:
bool canMount(const QString & deviceNode, const QString & mountPoint) const override;
bool canUnmount(const QString& deviceNode) const override;
QString mountTitle() const override;
QString unmountTitle() const override;
bool mount(Report& report, const QString& deviceNode, const QString& mountPoint) override; // mountPoint == VG name
bool unmount(Report& report, const QString& deviceNode) override;
@ -108,9 +106,13 @@ public:
qint64 getPESize(const QString& deviceNode) const; // return PE size in bytes
qint64 getPVSize(const QString& deviceNode) const; // return PV size in bytes
static QString getVGName(const QString& deviceNode);
static bool isUsed(const QString& pvNode);
static QString getpvField(const QString& fieldname, const QString& deviceNode);
static QString getVGName(const QString& deviceNode);
static QString getpvField(const QString& fieldname, const QString& deviceNode = QString());
static QStringList getFreePV();
static QStringList getUsedPV(const QString& vgname = QString());
public:
static CommandSupportType m_GetUsed;