Add initial support for growing LUKS volumes.
Added support for filling btrfs, ext and swap partitions.
This commit is contained in:
parent
7edc601a36
commit
d126f04886
|
@ -143,7 +143,8 @@ bool btrfs::resize(Report& report, const QString& deviceNode, qint64 length) con
|
||||||
ExternalCommand mountCmd(report, QStringLiteral("mount"), QStringList() << QStringLiteral("-v") << QStringLiteral("-t") << QStringLiteral("btrfs") << deviceNode << tempDir.path());
|
ExternalCommand mountCmd(report, QStringLiteral("mount"), QStringList() << QStringLiteral("-v") << QStringLiteral("-t") << QStringLiteral("btrfs") << deviceNode << tempDir.path());
|
||||||
|
|
||||||
if (mountCmd.run(-1) && mountCmd.exitCode() == 0) {
|
if (mountCmd.run(-1) && mountCmd.exitCode() == 0) {
|
||||||
ExternalCommand resizeCmd(report, QStringLiteral("btrfs"), QStringList() << QStringLiteral("filesystem") << QStringLiteral("resize") << QString::number(length) << tempDir.path());
|
QString len = length == -1 ? QStringLiteral("max") : QString::number(length);
|
||||||
|
ExternalCommand resizeCmd(report, QStringLiteral("btrfs"), QStringList() << QStringLiteral("filesystem") << QStringLiteral("resize") << len << tempDir.path());
|
||||||
|
|
||||||
if (resizeCmd.run(-1) && resizeCmd.exitCode() == 0)
|
if (resizeCmd.run(-1) && resizeCmd.exitCode() == 0)
|
||||||
rval = true;
|
rval = true;
|
||||||
|
|
|
@ -137,7 +137,9 @@ bool ext2::create(Report& report, const QString& deviceNode) const
|
||||||
bool ext2::resize(Report& report, const QString& deviceNode, qint64 length) const
|
bool ext2::resize(Report& report, const QString& deviceNode, qint64 length) const
|
||||||
{
|
{
|
||||||
const QString len = QString::number(length / 512) + QStringLiteral("s");
|
const QString len = QString::number(length / 512) + QStringLiteral("s");
|
||||||
ExternalCommand cmd(report, QStringLiteral("resize2fs"), QStringList() << deviceNode << len);
|
const QStringList command = length == -1 ? QStringList() << deviceNode : QStringList() << deviceNode << len;
|
||||||
|
|
||||||
|
ExternalCommand cmd(report, QStringLiteral("resize2fs"), command);
|
||||||
return cmd.run(-1) && cmd.exitCode() == 0;
|
return cmd.run(-1) && cmd.exitCode() == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -185,7 +185,7 @@ bool FileSystem::create(Report& report, const QString& deviceNode) const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Resized a FileSystem to a given new length
|
/** Resize a FileSystem to a given new length
|
||||||
@param report Report to write status information to
|
@param report Report to write status information to
|
||||||
@param deviceNode the device node for the Partition the FileSystem is on
|
@param deviceNode the device node for the Partition the FileSystem is on
|
||||||
@param newLength the new length for the FileSystem in bytes
|
@param newLength the new length for the FileSystem in bytes
|
||||||
|
|
|
@ -83,6 +83,7 @@ bool linuxswap::create(Report& report, const QString& deviceNode) const
|
||||||
|
|
||||||
bool linuxswap::resize(Report& report, const QString& deviceNode, qint64 length) const
|
bool linuxswap::resize(Report& report, const QString& deviceNode, qint64 length) const
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(length);
|
||||||
const QString label = readLabel(deviceNode);
|
const QString label = readLabel(deviceNode);
|
||||||
const QString uuid = readUUID(deviceNode);
|
const QString uuid = readUUID(deviceNode);
|
||||||
|
|
||||||
|
@ -92,7 +93,7 @@ bool linuxswap::resize(Report& report, const QString& deviceNode, qint64 length)
|
||||||
if (!uuid.isEmpty())
|
if (!uuid.isEmpty())
|
||||||
args << QStringLiteral("-U") << uuid;
|
args << QStringLiteral("-U") << uuid;
|
||||||
|
|
||||||
args << deviceNode << QString::number(length / 1024);
|
args << deviceNode;
|
||||||
|
|
||||||
ExternalCommand cmd(report, QStringLiteral("mkswap"), args);
|
ExternalCommand cmd(report, QStringLiteral("mkswap"), args);
|
||||||
return cmd.run(-1) && cmd.exitCode() == 0;
|
return cmd.run(-1) && cmd.exitCode() == 0;
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include "util/capacity.h"
|
#include "util/capacity.h"
|
||||||
#include "util/externalcommand.h"
|
#include "util/externalcommand.h"
|
||||||
|
#include "util/report.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
@ -69,6 +70,7 @@ void luks::init()
|
||||||
{
|
{
|
||||||
m_Create = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone;
|
m_Create = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone;
|
||||||
m_UpdateUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone;
|
m_UpdateUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone;
|
||||||
|
m_Grow = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone;
|
||||||
m_Copy = cmdSupportCore;
|
m_Copy = cmdSupportCore;
|
||||||
m_Move = cmdSupportCore;
|
m_Move = cmdSupportCore;
|
||||||
m_Backup = cmdSupportCore;
|
m_Backup = cmdSupportCore;
|
||||||
|
@ -129,7 +131,7 @@ bool luks::supportToolFound() const
|
||||||
m_Create != cmdSupportNone &&
|
m_Create != cmdSupportNone &&
|
||||||
// m_Check != cmdSupportNone &&
|
// m_Check != cmdSupportNone &&
|
||||||
m_UpdateUUID != cmdSupportNone &&
|
m_UpdateUUID != cmdSupportNone &&
|
||||||
// m_Grow != cmdSupportNone &&
|
m_Grow != cmdSupportNone &&
|
||||||
// m_Shrink != cmdSupportNone &&
|
// m_Shrink != cmdSupportNone &&
|
||||||
m_Copy != cmdSupportNone &&
|
m_Copy != cmdSupportNone &&
|
||||||
m_Move != cmdSupportNone &&
|
m_Move != cmdSupportNone &&
|
||||||
|
@ -418,6 +420,28 @@ FileSystem::Type luks::type() const
|
||||||
return FileSystem::Luks;
|
return FileSystem::Luks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool luks::resize(Report& report, const QString& deviceNode, qint64) const
|
||||||
|
{
|
||||||
|
Q_ASSERT(m_innerFs);
|
||||||
|
|
||||||
|
QString mapperNode = mapperName(deviceNode);
|
||||||
|
if (mapperNode.isEmpty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("resize") << mapperNode);
|
||||||
|
report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition <filename>%1</filename>.", deviceNode);
|
||||||
|
|
||||||
|
bool rval = false;
|
||||||
|
if (cryptResizeCmd.run(-1))
|
||||||
|
{
|
||||||
|
rval = m_innerFs->resize(report, mapperNode, -1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
report.line() << xi18nc("@info/plain", "Resizing encrypted file system on partition <filename>%1</filename> failed.", deviceNode);
|
||||||
|
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
QString luks::readUUID(const QString& deviceNode) const
|
QString luks::readUUID(const QString& deviceNode) const
|
||||||
{
|
{
|
||||||
ExternalCommand cmd(QStringLiteral("cryptsetup"),
|
ExternalCommand cmd(QStringLiteral("cryptsetup"),
|
||||||
|
|
|
@ -89,6 +89,7 @@ public:
|
||||||
virtual bool supportToolFound() const;
|
virtual bool supportToolFound() const;
|
||||||
virtual QString readUUID(const QString& deviceNode) const;
|
virtual QString readUUID(const QString& deviceNode) const;
|
||||||
virtual bool updateUUID(Report& report, const QString& deviceNode) const;
|
virtual bool updateUUID(Report& report, const QString& deviceNode) const;
|
||||||
|
virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const;
|
||||||
|
|
||||||
virtual QString mountTitle() const override;
|
virtual QString mountTitle() const override;
|
||||||
virtual QString unmountTitle() const override;
|
virtual QString unmountTitle() const override;
|
||||||
|
|
Loading…
Reference in New Issue