in host/AzureRecoveryLib/config/HostInfoConfig.cpp [773:905]
bool HostInfoConfig::GetPartitionInfoFromSystemDevice(const std::string& mount_point,
partition_details& sys_part_info
) const
{
TRACE_FUNC_BEGIN;
BOOST_ASSERT(m_bInitialized);
bool bFound = false;
if (boost::trim_copy(mount_point).empty())
{
TRACE_WARNING("Invalid argument: Empty mount point provided\n");
TRACE_FUNC_END;
return bFound;
}
disks_iter_t iterDisk = m_disks.begin();
for (; iterDisk != m_disks.end() && !bFound; iterDisk++)
{
if (!iterDisk->Bootable)
continue;
partition_iter_t iterPartition = iterDisk->partitions.begin();
for (; iterPartition != iterDisk->partitions.end() && !bFound;
iterPartition++)
{
//
// Verify mount point in LVs first, if not found then verify
// at partition level
//
partition_info_iter_t iterLV = iterPartition->logical_volumes.begin();
for (; iterLV != iterPartition->logical_volumes.end();
iterLV++)
{
if (//iterLV->IsSystemVolume && // System device check happens at disk level
boost::iequals(mount_point, iterLV->MountPoint))
{
bFound = true;
sys_part_info.DiskName = iterDisk->Name;
sys_part_info.FsType = iterLV->FSType;
sys_part_info.MountPoint = iterLV->MountPoint;
sys_part_info.LvName = iterLV->Name;
sys_part_info.VolType = PartitionLayout::LVM;
sys_part_info.Partition =
iterPartition->info.Name.empty() ?
iterDisk->Name :
iterPartition->info.Name;
sys_part_info.VgName = iterLV->DiskGrp.empty() ?
( iterPartition->info.DiskGrp.empty() ?
iterDisk->DiskGrp :
iterPartition->info.DiskGrp
) :
iterLV->DiskGrp;
break;
}
}
if ( !bFound &&
//iterPartition->info.IsSystemVolume && // System device check happens at disk level
boost::iequals(mount_point, iterPartition->info.MountPoint))
{
bFound = true;
sys_part_info.DiskName = iterDisk->Name;
sys_part_info.FsType = iterPartition->info.FSType;
sys_part_info.MountPoint = iterPartition->info.MountPoint;
sys_part_info.Partition = iterPartition->info.Name;
sys_part_info.VolType = PartitionLayout::FS;
}
}
if (!bFound &&
boost::iequals(mount_point, iterDisk->MountPoint))
{
// The mount point is laid over entire disk.
bFound = true;
sys_part_info.DiskName = iterDisk->Name;
sys_part_info.FsType = iterDisk->FSType;
sys_part_info.MountPoint = iterDisk->MountPoint;
sys_part_info.Partition = iterDisk->Name;
sys_part_info.VolType = PartitionLayout::FS;
}
}
//
// Trace the found partitin info
//
if (bFound)
{
TRACE_INFO("Found the parition with mount-point: %s\n", mount_point.c_str());
TRACE_INFO("Disk : %s\n", sys_part_info.DiskName.c_str());
if (!sys_part_info.LvName.empty())
TRACE_INFO("LV : %s\n", sys_part_info.LvName.c_str());
if (!sys_part_info.VgName.empty())
TRACE_INFO("VG : %s\n", sys_part_info.VgName.c_str());
if (!sys_part_info.Partition.empty())
TRACE_INFO("Partition : %s\n", sys_part_info.Partition.c_str());
if (!sys_part_info.FsType.empty())
TRACE_INFO("File System : %s\n", sys_part_info.FsType.c_str());
}
else
{
TRACE_WARNING("Partition not found with mount point: %s\n", mount_point.c_str());
}
TRACE_FUNC_END;
return bFound;
}