diff --git a/src/plugins/sfdisk/sfdiskbackend.cpp b/src/plugins/sfdisk/sfdiskbackend.cpp index 842d13f..3a859fd 100644 --- a/src/plugins/sfdisk/sfdiskbackend.cpp +++ b/src/plugins/sfdisk/sfdiskbackend.cpp @@ -464,12 +464,20 @@ FileSystem::Type SfdiskBackend::detectFileSystem(const QString& partitionPath) QStringLiteral("--query=property"), partitionPath }); - QString udevTypeRegExp = QStringLiteral("ID_FS_TYPE=(\\w+)"); - QString udevVersionRegExp = QStringLiteral("ID_FS_VERSION=(\\w+)"); + QString typeRegExp = QStringLiteral("ID_FS_TYPE=(\\w+)"); + QString versionRegExp = QStringLiteral("ID_FS_VERSION=(\\w+)"); QString name = {}; - rval = runDetectFileSystemCommand(udevCommand, udevTypeRegExp, udevVersionRegExp, name); + rval = runDetectFileSystemCommand(udevCommand, typeRegExp, versionRegExp, name); + + // Fallback to blkid. blkid has slightly worse detection but it works on whole block device filesystems. + if (rval == FileSystem::Type::Unknown) { + ExternalCommand blkidCommand(QStringLiteral("blkid"), { partitionPath }); + typeRegExp = QStringLiteral("TYPE=\"(\\w+)\""); + versionRegExp = QStringLiteral("SEC_TYPE=\"(\\w+)\""); + rval = runDetectFileSystemCommand(blkidCommand, typeRegExp, versionRegExp, name); + } if (rval == FileSystem::Type::Unknown) { qWarning() << "unknown file system type " << name << " on " << partitionPath; diff --git a/src/util/externalcommand_whitelist.h b/src/util/externalcommand_whitelist.h index 7ebae8d..4c52ced 100644 --- a/src/util/externalcommand_whitelist.h +++ b/src/util/externalcommand_whitelist.h @@ -1,5 +1,5 @@ /* - SPDX-FileCopyrightText: 2018-2019 Andrius Štikonas + SPDX-FileCopyrightText: 2018-2020 Andrius Štikonas SPDX-FileCopyrightText: 2019 Shubham Jangra SPDX-License-Identifier: GPL-3.0-or-later @@ -15,6 +15,7 @@ QStringLiteral("udevadm"), //Core programs QStringLiteral("blockdev"), +QStringLiteral("blkid"), QStringLiteral("partx"), QStringLiteral("sfdisk"), QStringLiteral("wipefs"),