From c2900760a100212cb8ef3d4022ba508f02d3ae5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sat, 8 Dec 2012 15:24:07 +0000 Subject: [PATCH] Add initial support for LVM2 Physical Volumes. svn path=/trunk/extragear/sysadmin/partitionmanager/; revision=1327775 --- src/config.kcfg | 3 +- src/config/configurepagefilesystemcolors.ui | 60 ++++++++-- src/fs/btrfs.cpp | 2 +- src/fs/btrfs.h | 2 +- src/fs/exfat.cpp | 2 +- src/fs/exfat.h | 2 +- src/fs/filesystem.cpp | 16 ++- src/fs/filesystem.h | 6 +- src/fs/filesystemfactory.cpp | 6 +- src/fs/luks.cpp | 2 +- src/fs/luks.h | 2 +- src/fs/lvm2_pv.cpp | 115 ++++++++++++++++++++ src/fs/lvm2_pv.h | 89 +++++++++++++++ src/fs/nilfs2.cpp | 2 +- src/fs/nilfs2.h | 2 +- src/jobs/deletefilesystemjob.cpp | 8 +- src/ops/newoperation.cpp | 8 ++ src/ops/newoperation.h | 3 + src/plugins/libparted/libpartedbackend.cpp | 1 + 19 files changed, 308 insertions(+), 23 deletions(-) create mode 100644 src/fs/lvm2_pv.cpp create mode 100644 src/fs/lvm2_pv.h diff --git a/src/config.kcfg b/src/config.kcfg index 3dc8637..28f06e4 100644 --- a/src/config.kcfg +++ b/src/config.kcfg @@ -60,7 +60,7 @@ - + 220,205,175 187,249,207 @@ -86,6 +86,7 @@ 33,137,108 250,230,255 242,155,104 + 160,210,180 diff --git a/src/config/configurepagefilesystemcolors.ui b/src/config/configurepagefilesystemcolors.ui index 70053a6..8bfa76d 100644 --- a/src/config/configurepagefilesystemcolors.ui +++ b/src/config/configurepagefilesystemcolors.ui @@ -483,7 +483,7 @@ - + extended: @@ -496,10 +496,10 @@ - + - + Qt::Horizontal @@ -512,7 +512,7 @@ - + unformatted: @@ -525,10 +525,10 @@ - + - + Qt::Horizontal @@ -541,7 +541,7 @@ - + unknown: @@ -554,10 +554,10 @@ - + - + Qt::Horizontal @@ -590,6 +590,48 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + lvm2 pv: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + diff --git a/src/fs/btrfs.cpp b/src/fs/btrfs.cpp index f911608..a5370d7 100644 --- a/src/fs/btrfs.cpp +++ b/src/fs/btrfs.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * diff --git a/src/fs/btrfs.h b/src/fs/btrfs.h index b8ceabb..c84be1b 100644 --- a/src/fs/btrfs.h +++ b/src/fs/btrfs.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * diff --git a/src/fs/exfat.cpp b/src/fs/exfat.cpp index c6899e7..f111444 100644 --- a/src/fs/exfat.cpp +++ b/src/fs/exfat.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * diff --git a/src/fs/exfat.h b/src/fs/exfat.h index 97ba1b8..b7a154e 100644 --- a/src/fs/exfat.h +++ b/src/fs/exfat.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * diff --git a/src/fs/filesystem.cpp b/src/fs/filesystem.cpp index 0443b3c..6b1eecc 100644 --- a/src/fs/filesystem.cpp +++ b/src/fs/filesystem.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008,2009 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -178,6 +178,19 @@ bool FileSystem::backup(Report& report, const Device& sourceDevice, const QStrin return false; } +/** Removes a FileSystem + @param report Report to write status information to + @param deviceNode the device node for the Partition the FileSystem is on + @return true if FileSystem is removed +*/ +bool FileSystem::remove(Report& report, const QString& deviceNode) const +{ + Q_UNUSED(report); + Q_UNUSED(deviceNode); + + return true; +} + /** Checks a FileSystem for errors @param report Report to write status information to @param deviceNode the device node for the Partition the FileSystem is on @@ -275,6 +288,7 @@ static const QString* typeNames() i18nc("@item/plain filesystem name", "zfs"), i18nc("@item/plain filesystem name", "exfat"), i18nc("@item/plain filesystem name", "nilfs2"), + i18nc("@item/plain filesystem name", "lvm2 pv"), }; return s; diff --git a/src/fs/filesystem.h b/src/fs/filesystem.h index 7002cd8..c60e3b7 100644 --- a/src/fs/filesystem.h +++ b/src/fs/filesystem.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008,2009 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -80,8 +80,9 @@ class FileSystem Zfs = 21, Exfat = 22, Nilfs2 = 23, + Lvm2_PV = 24, - __lastType = 24 + __lastType = 25 }; /** The type of support for a given FileSystem action */ @@ -110,6 +111,7 @@ class FileSystem virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); virtual bool copy(Report& report, const QString& targetDeviceNode, const QString& sourceDeviceNode) const; virtual bool backup(Report& report, const Device& sourceDevice, const QString& deviceNode, const QString& filename) const; + virtual bool remove(Report& report, const QString& deviceNode) const; virtual bool check(Report& report, const QString& deviceNode) const; virtual bool updateUUID(Report& report, const QString& deviceNode) const; virtual QString readUUID(const QString& deviceNode) const; diff --git a/src/fs/filesystemfactory.cpp b/src/fs/filesystemfactory.cpp index b14ef65..a4c1284 100644 --- a/src/fs/filesystemfactory.cpp +++ b/src/fs/filesystemfactory.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -34,6 +34,7 @@ #include "fs/jfs.h" #include "fs/linuxswap.h" #include "fs/luks.h" +#include "fs/lvm2_pv.h" #include "fs/nilfs2.h" #include "fs/ntfs.h" #include "fs/ocfs2.h" @@ -70,6 +71,7 @@ void FileSystemFactory::init() m_FileSystems.insert(FileSystem::Jfs, new FS::jfs(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::LinuxSwap, new FS::linuxswap(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::Luks, new FS::luks(-1, -1, -1, QString())); + m_FileSystems.insert(FileSystem::Lvm2_PV, new FS::lvm2_pv(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::Nilfs2, new FS::nilfs2(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::Ntfs, new FS::ntfs(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::Ocfs2, new FS::ocfs2(-1, -1, -1, QString())); @@ -95,6 +97,7 @@ void FileSystemFactory::init() FS::jfs::init(); FS::linuxswap::init(); FS::luks::init(); + FS::lvm2_pv::init(); FS::nilfs2::init(); FS::ntfs::init(); FS::ocfs2::init(); @@ -137,6 +140,7 @@ FileSystem* FileSystemFactory::create(FileSystem::Type t, qint64 firstsector, qi case FileSystem::Jfs: fs = new FS::jfs(firstsector, lastsector, sectorsused, label); break; case FileSystem::LinuxSwap: fs = new FS::linuxswap(firstsector, lastsector, sectorsused, label); break; case FileSystem::Luks: fs = new FS::luks(firstsector, lastsector, sectorsused, label); break; + case FileSystem::Lvm2_PV: fs = new FS::lvm2_pv(firstsector, lastsector, sectorsused, label); break; case FileSystem::Nilfs2: fs = new FS::nilfs2(firstsector, lastsector, sectorsused, label); break; case FileSystem::Ntfs: fs = new FS::ntfs(firstsector, lastsector, sectorsused, label); break; case FileSystem::Ocfs2: fs = new FS::ocfs2(firstsector, lastsector, sectorsused, label); break; diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 9c88604..c6dfc13 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * diff --git a/src/fs/luks.h b/src/fs/luks.h index 177c432..ccf028b 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * diff --git a/src/fs/lvm2_pv.cpp b/src/fs/lvm2_pv.cpp new file mode 100644 index 0000000..2b7d564 --- /dev/null +++ b/src/fs/lvm2_pv.cpp @@ -0,0 +1,115 @@ +/*************************************************************************** + * Copyright (C) 2012 by Volker Lanz * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + +#include "fs/lvm2_pv.h" + +#include "util/externalcommand.h" +#include "util/capacity.h" + +#include + +namespace FS +{ + FileSystem::CommandSupportType lvm2_pv::m_GetUsed = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_GetLabel = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_Create = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_Grow = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_Shrink = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_Move = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_Check = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_Copy = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_Backup = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_SetLabel = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_UpdateUUID = FileSystem::cmdSupportNone; + FileSystem::CommandSupportType lvm2_pv::m_GetUUID = FileSystem::cmdSupportNone; + + lvm2_pv::lvm2_pv(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label) : + FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::Lvm2_PV) + { + } + + void lvm2_pv::init() + { + m_Create = findExternal("lvm") ? cmdSupportFileSystem : cmdSupportNone; + m_Check = findExternal("lvm") ? cmdSupportFileSystem : cmdSupportNone; + + m_GetLabel = cmdSupportCore; + m_UpdateUUID = findExternal("lvm") ? cmdSupportFileSystem : cmdSupportNone; + + m_Copy = cmdSupportNone; // Copying PV can confuse LVM + m_Move = (m_Check != cmdSupportNone) ? cmdSupportCore : cmdSupportNone; + + m_GetLabel = cmdSupportNone; + m_Backup = cmdSupportCore; + m_GetUUID = cmdSupportCore; + } + + bool lvm2_pv::supportToolFound() const + { + return +// m_GetUsed != cmdSupportNone && +// m_GetLabel != cmdSupportNone && +// m_SetLabel != cmdSupportNone && + m_Create != cmdSupportNone && + m_Check != cmdSupportNone && + m_UpdateUUID != cmdSupportNone && +// m_Grow != cmdSupportNone && +// m_Shrink != cmdSupportNone && +// m_Copy != cmdSupportNone && + m_Move != cmdSupportNone && + m_Backup != cmdSupportNone && + m_GetUUID != cmdSupportNone; + } + + FileSystem::SupportTool lvm2_pv::supportToolName() const + { + return SupportTool("lvm2", KUrl("http://sourceware.org/lvm2/")); + } + + qint64 lvm2_pv::maxCapacity() const + { + return Capacity::unitFactor(Capacity::Byte, Capacity::EiB); + } + + bool lvm2_pv::check(Report& report, const QString& deviceNode) const + { + ExternalCommand cmd(report, "lvm", QStringList() << "pvck" << "-v" << deviceNode); + return cmd.run(-1) && cmd.exitCode() == 0; + } + + bool lvm2_pv::create(Report& report, const QString& deviceNode) const + { + ExternalCommand cmd(report, "lvm", QStringList() << "pvcreate" << deviceNode); + return cmd.run(-1) && cmd.exitCode() == 0; + } + + bool lvm2_pv::remove(Report& report, const QString& deviceNode) const + { +// TODO: check if PV is a member of an exported VG + ExternalCommand cmd(report, "lvm", QStringList() << "pvremove" << "-ffy" << deviceNode); + cmd.run(-1); + return cmd.run(-1) && cmd.exitCode() == 0; + } + + bool lvm2_pv::updateUUID(Report& report, const QString& deviceNode) const + { + ExternalCommand cmd(report, "lvm", QStringList() << "pvchange" << "-u" << deviceNode); + return cmd.run(-1) && cmd.exitCode() == 0; + } +} diff --git a/src/fs/lvm2_pv.h b/src/fs/lvm2_pv.h new file mode 100644 index 0000000..753538c --- /dev/null +++ b/src/fs/lvm2_pv.h @@ -0,0 +1,89 @@ +/*************************************************************************** + * Copyright (C) 2012 by Volker Lanz * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + +#if !defined(LVM2_PV__H) + +#define LVM2_PV__H + +#include "util/libpartitionmanagerexport.h" + +#include "fs/filesystem.h" + +#include + +class Report; + +class QString; + +namespace FS +{ + /** LVM2 physical volume. + @author Andrius Štikonas + */ + class LIBPARTITIONMANAGERPRIVATE_EXPORT lvm2_pv : public FileSystem + { + public: + lvm2_pv(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label); + + public: + static void init(); + +// virtual qint64 readUsedCapacity(const QString& deviceNode) const; + virtual bool check(Report& report, const QString& deviceNode) const; + virtual bool create(Report& report, const QString& deviceNode) const; + virtual bool remove(Report& report, const QString& deviceNode) const; +// virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; +// virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); + virtual bool updateUUID(Report& report, const QString& deviceNode) const; + + virtual CommandSupportType supportGetUsed() const { return m_GetUsed; } + virtual CommandSupportType supportGetLabel() const { return m_GetLabel; } + virtual CommandSupportType supportCreate() const { return m_Create; } + virtual CommandSupportType supportGrow() const { return m_Grow; } + virtual CommandSupportType supportShrink() const { return m_Shrink; } + virtual CommandSupportType supportMove() const { return m_Move; } + virtual CommandSupportType supportCheck() const { return m_Check; } + virtual CommandSupportType supportCopy() const { return m_Copy; } + virtual CommandSupportType supportBackup() const { return m_Backup; } + virtual CommandSupportType supportSetLabel() const { return m_SetLabel; } + virtual CommandSupportType supportUpdateUUID() const { return m_UpdateUUID; } + virtual CommandSupportType supportGetUUID() const { return m_GetUUID; } + +// virtual qint64 minCapacity() const; + virtual qint64 maxCapacity() const; + virtual SupportTool supportToolName() const; + virtual bool supportToolFound() const; + + public: + static CommandSupportType m_GetUsed; + static CommandSupportType m_GetLabel; + static CommandSupportType m_Create; + static CommandSupportType m_Grow; + static CommandSupportType m_Shrink; + static CommandSupportType m_Move; + static CommandSupportType m_Check; + static CommandSupportType m_Copy; + static CommandSupportType m_Backup; + static CommandSupportType m_SetLabel; + static CommandSupportType m_UpdateUUID; + static CommandSupportType m_GetUUID; + }; +} + +#endif diff --git a/src/fs/nilfs2.cpp b/src/fs/nilfs2.cpp index 2693e95..1fce21d 100644 --- a/src/fs/nilfs2.cpp +++ b/src/fs/nilfs2.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * diff --git a/src/fs/nilfs2.h b/src/fs/nilfs2.h index ed98e8a..4e54aea 100644 --- a/src/fs/nilfs2.h +++ b/src/fs/nilfs2.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * diff --git a/src/jobs/deletefilesystemjob.cpp b/src/jobs/deletefilesystemjob.cpp index 339edf8..40cac05 100644 --- a/src/jobs/deletefilesystemjob.cpp +++ b/src/jobs/deletefilesystemjob.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008 by Volker Lanz * + * Copyright (C) 2012 by Volker Lanz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -61,6 +61,12 @@ bool DeleteFileSystemJob::run(Report& parent) rval = true; else { + if (!partition().fileSystem().remove(*report, partition().deviceNode())) + { + jobFinished(*report, rval); + return false; + } + CoreBackendDevice* backendDevice = CoreBackendManager::self()->backend()->openDevice(device().deviceNode()); if (backendDevice) diff --git a/src/ops/newoperation.cpp b/src/ops/newoperation.cpp index 215383b..77b793f 100644 --- a/src/ops/newoperation.cpp +++ b/src/ops/newoperation.cpp @@ -26,6 +26,7 @@ #include "jobs/createpartitionjob.h" #include "jobs/createfilesystemjob.h" #include "jobs/setfilesystemlabeljob.h" +#include "jobs/setpartflagsjob.h" #include "jobs/checkfilesystemjob.h" #include "fs/filesystem.h" @@ -48,6 +49,7 @@ NewOperation::NewOperation(Device& d, Partition* p) : m_NewPartition(p), m_CreatePartitionJob(new CreatePartitionJob(targetDevice(), newPartition())), m_CreateFileSystemJob(NULL), + m_SetPartFlagsJob(NULL), m_SetFileSystemLabelJob(NULL), m_CheckFileSystemJob(NULL) { @@ -66,6 +68,12 @@ NewOperation::NewOperation(Device& d, Partition* p) : m_CreateFileSystemJob = new CreateFileSystemJob(targetDevice(), newPartition()); addJob(createFileSystemJob()); + if (fs.type() == FileSystem::Lvm2_PV) + { + m_SetPartFlagsJob = new SetPartFlagsJob(targetDevice(), newPartition(), PartitionTable::FlagLvm); + addJob(setPartFlagsJob()); + } + m_SetFileSystemLabelJob = new SetFileSystemLabelJob(newPartition(), fs.label()); addJob(setLabelJob()); diff --git a/src/ops/newoperation.h b/src/ops/newoperation.h index 62d63d6..dc8e44a 100644 --- a/src/ops/newoperation.h +++ b/src/ops/newoperation.h @@ -31,6 +31,7 @@ class OperationStack; class CreatePartitionJob; class CreateFileSystemJob; class SetFileSystemLabelJob; +class SetPartFlagsJob; class CheckFileSystemJob; /** Create a Partition. @@ -71,6 +72,7 @@ class NewOperation : public Operation CreatePartitionJob* createPartitionJob() { return m_CreatePartitionJob; } CreateFileSystemJob* createFileSystemJob() { return m_CreateFileSystemJob; } + SetPartFlagsJob* setPartFlagsJob() { return m_SetPartFlagsJob; } SetFileSystemLabelJob* setLabelJob() { return m_SetFileSystemLabelJob; } CheckFileSystemJob* checkJob() { return m_CheckFileSystemJob; } @@ -79,6 +81,7 @@ class NewOperation : public Operation Partition* m_NewPartition; CreatePartitionJob* m_CreatePartitionJob; CreateFileSystemJob* m_CreateFileSystemJob; + SetPartFlagsJob* m_SetPartFlagsJob; SetFileSystemLabelJob* m_SetFileSystemLabelJob; CheckFileSystemJob* m_CheckFileSystemJob; }; diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index a7008cd..e2b99cc 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -554,6 +554,7 @@ FileSystem::Type LibPartedBackend::detectFileSystem(PedPartition* pedPartition) else if (s == "crypto_LUKS") rval = FileSystem::Luks; else if (s == "exfat") rval = FileSystem::Exfat; else if (s == "nilfs2") rval = FileSystem::Nilfs2; + else if (s == "LVM2_member") rval = FileSystem::Lvm2_PV; else kWarning() << "blkid: unknown file system type " << s << " on " << pedPath; }