diff --git a/src/modules/partition/Config.cpp b/src/modules/partition/Config.cpp
index 085c451791e96d10c34e286b200007d33c2c039f..d90111555db974cbbfd5e004bdc34d139580f1a6 100644
--- a/src/modules/partition/Config.cpp
+++ b/src/modules/partition/Config.cpp
@@ -451,9 +451,11 @@ Config::setConfigurationMap( const QVariantMap& configurationMap )
     {
         bool bogus = true;
         const auto lvmConfiguration = Calamares::getSubMap( configurationMap, "lvm", bogus );
-        m_isLVMEnabled = Calamares::getBool( lvmConfiguration, "enable", true);
+        m_isLVMEnabled = Calamares::getBool( lvmConfiguration, "enable", true );
     }
 
+    m_doNotClose = Calamares::getStringList( configurationMap, "doNotClose" );
+
     Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
     gs->insert( "armInstall", Calamares::getBool( configurationMap, "armInstall", false ) );
     fillGSConfigurationEFI( gs, configurationMap );
diff --git a/src/modules/partition/Config.h b/src/modules/partition/Config.h
index 13da58ac44c445d482af2db68ae1977fd515b92b..ebbe196131d2a7d46789278cc7da0e3d582e81fb 100644
--- a/src/modules/partition/Config.h
+++ b/src/modules/partition/Config.h
@@ -40,6 +40,8 @@ class Config : public QObject
 
     Q_PROPERTY( bool lvmEnabled READ isLVMEnabled CONSTANT FINAL )
 
+    Q_PROPERTY( QStringList doNotClose READ doNotClose CONSTANT FINAL )
+
 public:
     Config( QObject* parent );
     ~Config() override = default;
@@ -178,6 +180,14 @@ public:
 
     bool isLVMEnabled() const { return m_isLVMEnabled; }
 
+    /** @brief A list of names that can follow /dev/mapper/ that must not be closed
+     *
+     * These names (if any) are skipped by the ClearMountsJob.
+     * The names may contain a trailing '*' which acts as a wildcard.
+     * In any other position, '*' is interpreted literally.
+     */
+    QStringList doNotClose() const { return m_doNotClose; }
+
 public Q_SLOTS:
     void setInstallChoice( int );  ///< Translates a button ID or so to InstallChoice
     void setInstallChoice( InstallChoice );
@@ -213,6 +223,7 @@ private:
     bool m_preCheckEncryption = false;
     bool m_showNotEncryptedBootMessage = true;
     bool m_isLVMEnabled = true;
+    QStringList m_doNotClose;
 };
 
 /** @brief Given a set of swap choices, return a sensible value from it.
diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp
index c2fd61db9aebf956d2c593edcfd8c77ef03d58c8..8666f0099e3eda8835b6831449c7973083cdea60 100644
--- a/src/modules/partition/core/PartitionCoreModule.cpp
+++ b/src/modules/partition/core/PartitionCoreModule.cpp
@@ -670,7 +670,7 @@ PartitionCoreModule::jobs( const Config* config ) const
 #ifdef DEBUG_PARTITION_SKIP
     cWarning() << "Partitioning actions are skipped.";
 #else
-    const QStringList doNotClose = findEssentialLVs( m_deviceInfos );
+    const QStringList doNotClose = findEssentialLVs( m_deviceInfos ) + config->doNotClose();
 
     for ( const auto* info : m_deviceInfos )
     {