diff --git a/common/dynamic_partition_control_interface.h b/common/dynamic_partition_control_interface.h
index 530b0af..c8a2274 100644
--- a/common/dynamic_partition_control_interface.h
+++ b/common/dynamic_partition_control_interface.h
@@ -154,6 +154,11 @@
       const std::string& unsuffixed_partition_name,
       const std::optional<std::string>&,
       bool is_append = false) = 0;
+
+  // Create virtual block devices for all partitions.
+  virtual bool MapAllPartitions() = 0;
+  // Unmap virtual block devices for all partitions.
+  virtual bool UnmapAllPartitions() = 0;
 };
 
 }  // namespace chromeos_update_engine
diff --git a/common/dynamic_partition_control_stub.cc b/common/dynamic_partition_control_stub.cc
index 64ab201..cfc9e2e 100644
--- a/common/dynamic_partition_control_stub.cc
+++ b/common/dynamic_partition_control_stub.cc
@@ -96,4 +96,12 @@
   return nullptr;
 }
 
+bool DynamicPartitionControlStub::MapAllPartitions() {
+  return false;
+}
+
+bool DynamicPartitionControlStub::UnmapAllPartitions() {
+  return false;
+}
+
 }  // namespace chromeos_update_engine
diff --git a/common/dynamic_partition_control_stub.h b/common/dynamic_partition_control_stub.h
index a939cfb..1fc8a35 100644
--- a/common/dynamic_partition_control_stub.h
+++ b/common/dynamic_partition_control_stub.h
@@ -62,6 +62,9 @@
       const std::string& unsuffixed_partition_name,
       const std::optional<std::string>&,
       bool is_append) override;
+
+  bool MapAllPartitions() override;
+  bool UnmapAllPartitions() override;
 };
 }  // namespace chromeos_update_engine
 
diff --git a/dynamic_partition_control_android.cc b/dynamic_partition_control_android.cc
index 06e5745..7c331f0 100644
--- a/dynamic_partition_control_android.cc
+++ b/dynamic_partition_control_android.cc
@@ -273,9 +273,9 @@
   return true;
 }
 
-void DynamicPartitionControlAndroid::UnmapAllPartitions() {
+bool DynamicPartitionControlAndroid::UnmapAllPartitions() {
   if (mapped_devices_.empty()) {
-    return;
+    return false;
   }
   // UnmapPartitionOnDeviceMapper removes objects from mapped_devices_, hence
   // a copy is needed for the loop.
@@ -284,6 +284,7 @@
   for (const auto& partition_name : mapped) {
     ignore_result(UnmapPartitionOnDeviceMapper(partition_name));
   }
+  return true;
 }
 
 void DynamicPartitionControlAndroid::Cleanup() {
@@ -1240,16 +1241,12 @@
     bool is_append) {
   auto suffix = SlotSuffixForSlotNumber(target_slot_);
 
-  std::string device_dir_str;
-  if (!GetDeviceDir(&device_dir_str)) {
-    LOG(ERROR) << "Failed to get device dir!";
+  auto super_device = GetSuperDevice();
+  if (!super_device.has_value()) {
     return nullptr;
   }
-  base::FilePath device_dir(device_dir_str);
-  auto super_device =
-      device_dir.Append(GetSuperPartitionName(target_slot_)).value();
   CreateLogicalPartitionParams params = {
-      .block_device = super_device,
+      .block_device = super_device->value(),
       .metadata_slot = target_slot_,
       .partition_name = partition_name + suffix,
       .force_writable = true,
@@ -1259,4 +1256,19 @@
   return snapshot_->OpenSnapshotWriter(params, std::move(source_path));
 }
 
+std::optional<base::FilePath> DynamicPartitionControlAndroid::GetSuperDevice() {
+  std::string device_dir_str;
+  if (!GetDeviceDir(&device_dir_str)) {
+    LOG(ERROR) << "Failed to get device dir!";
+    return {};
+  }
+  base::FilePath device_dir(device_dir_str);
+  auto super_device = device_dir.Append(GetSuperPartitionName(target_slot_));
+  return super_device;
+}
+
+bool DynamicPartitionControlAndroid::MapAllPartitions() {
+  return snapshot_->MapAllSnapshots();
+}
+
 }  // namespace chromeos_update_engine
diff --git a/dynamic_partition_control_android.h b/dynamic_partition_control_android.h
index 9bffb59..4f3964b 100644
--- a/dynamic_partition_control_android.h
+++ b/dynamic_partition_control_android.h
@@ -90,6 +90,8 @@
       const std::optional<std::string>& source_path,
       bool is_append) override;
 
+  bool UnmapAllPartitions() override;
+
  protected:
   // These functions are exposed for testing.
 
@@ -201,11 +203,14 @@
       const DeltaArchiveManifest& manifest,
       bool delete_source);
 
+  bool MapAllPartitions() override;
+
  private:
   friend class DynamicPartitionControlAndroidTest;
   friend class SnapshotPartitionTestP;
 
-  void UnmapAllPartitions();
+  std::optional<base::FilePath> GetSuperDevice();
+
   bool MapPartitionInternal(const std::string& super_device,
                             const std::string& target_partition_name,
                             uint32_t slot,
diff --git a/mock_dynamic_partition_control.h b/mock_dynamic_partition_control.h
index 5144cbb..d5853ca 100644
--- a/mock_dynamic_partition_control.h
+++ b/mock_dynamic_partition_control.h
@@ -90,6 +90,8 @@
                const std::optional<std::string>& source_path,
                bool is_append),
               (override));
+  MOCK_METHOD(bool, MapAllPartitions, (), (override));
+  MOCK_METHOD(bool, UnmapAllPartitions, (), (override));
 
   void set_fake_mapped_devices(const std::set<std::string>& fake) override {
     DynamicPartitionControlAndroid::set_fake_mapped_devices(fake);
