diff --git a/src/core/lvmdevice.cpp b/src/core/lvmdevice.cpp --- a/src/core/lvmdevice.cpp +++ b/src/core/lvmdevice.cpp @@ -132,7 +132,7 @@ if (fs->type() == FileSystem::Luks) { r |= PartitionRole::Luks; FS::luks* luksFs = static_cast(fs); - luksFs->initLUKS(); + luksFs->initLUKS(logicalSize()); QString mapperNode = luksFs->mapperName(); mountPoint = FileSystem::detectMountPoint(fs, mapperNode); diff --git a/src/fs/luks.h b/src/fs/luks.h --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -126,6 +126,10 @@ return m_GetUUID; } + void setLogicalSectorSize(unsigned int logicalSectorSize) { + m_logicalSectorSize = logicalSectorSize; + } + bool check(Report& report, const QString& deviceNode) const override; bool create(Report& report, const QString& deviceNode) override; SupportTool supportToolName() const override; @@ -182,7 +186,7 @@ qint64 payloadOffset() const { return m_PayloadOffset; } static bool canEncryptType(FileSystem::Type type); - void initLUKS(); + void initLUKS(unsigned int sectorSize); protected: virtual QString readOuterUUID(const QString& deviceNode) const; @@ -208,7 +212,7 @@ mutable bool m_cryptsetupFound; QString m_passphrase; bool m_isMounted; - constexpr static unsigned int m_logicalSectorSize = 512; + unsigned int m_logicalSectorSize; QString m_MapperName; QString m_CipherName; diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -62,6 +62,7 @@ , m_isCryptOpen(false) , m_cryptsetupFound(m_Create != cmdSupportNone) , m_isMounted(false) + , m_logicalSectorSize(512) , m_KeySize(-1) , m_PayloadOffset(-1) { @@ -495,7 +496,7 @@ else if (m_innerFs->resize(report, mapperName(), payloadLength)) { ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), - { QStringLiteral("--size"), QString::number(payloadLength / m_logicalSectorSize), // LUKS assumes 512 bytes sector + { QStringLiteral("--size"), QString::number(payloadLength / 512), // LUKS payload length is specified in multiples of 512 bytes QStringLiteral("resize"), mapperName() }); report.line() << xi18nc("@info:progress", "Resizing LUKS crypt on partition %1.", deviceNode); if (cryptResizeCmd.run(-1) && cryptResizeCmd.exitCode() == 0) @@ -650,8 +651,9 @@ } } -void luks::initLUKS() +void luks::initLUKS(unsigned int sectorSize) { + setLogicalSectorSize(sectorSize); QString mapperNode = mapperName(); bool isCryptOpen = !mapperNode.isEmpty(); setCryptOpen(isCryptOpen); diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -341,7 +341,7 @@ if (fs->type() == FileSystem::Luks) { r |= PartitionRole::Luks; FS::luks* luksFs = static_cast(fs); - luksFs->initLUKS(); + luksFs->initLUKS(d.logicalSize()); QString mapperNode = luksFs->mapperName(); mountPoint = FileSystem::detectMountPoint(fs, mapperNode); mounted = FileSystem::detectMountStatus(fs, mapperNode);