# Commvault Integration with PCD

## Overview

Commvault protects virtual machines running in Private Cloud Director (PCD). This guide walks through the Commvault setup for PCD. VM protection is agentless. It does not require agents inside the guest. Commvault integrates with PCD through OpenStack APIs.

### What you deploy

Commvault components you deploy (see [OpenStack system requirements](https://documentation.commvault.com/11.42/software/openstack_system_requirements.html)):

* **CommServe**: Central management and metadata server.
* **MediaAgent / Access Node**: VM(s) per PCD region for data movement and restores.
* **Disk library**: Backup storage. This is typically local disks on MediaAgent VMs.

### Terminology used in this guide

* **Access Node**: A MediaAgent VM used as the Virtual Server Agent (VSA) proxy for backup/restore.
* **Restore proxy**: The Access Node selected for restore operations.

### Key constraints

{% hint style="warning" %}
Only VMs that boot from persistent (bootable) volumes are supported. VMs that boot from ephemeral disks (created directly from images) are not protected.
{% endhint %}

* Snapshot quota and snapshot concurrency must match your backup schedule.
* Restores require an OS-matching Access Node (Windows ↔ Windows, Linux ↔ Linux).
* Restoring to a network with port security disabled is not supported.

### Architecture overview

#### Core components

* **CommServe**
  * Central management and metadata server.
  * No backup data stored here.
* **Media Agents (MA) / Access Nodes (VMs)**
  * Deployed as VMs per PCD region.
  * Responsible for:
    * Data movement (backup and restore)
    * Hosting local disk backup storage
    * Acting as restore proxies

#### OS separation (important for restores)

* **Backup**: Either Windows or Linux MediaAgent can move data.
* **Restore**: The VSA proxy mounts VM disks to browse or restore files. This requires an OS-matching MediaAgent.
  * Windows VM restore → Windows MediaAgent
  * Linux VM restore → Linux MediaAgent

## Prerequisites

### Commvault

* A supported OS for CommServe (Windows or Linux).
* Commvault packages for OpenStack / Virtual Server Agent (VSA) on the Access Nodes.
* Commvault system requirements: <https://documentation.commvault.com/11.20/system\\_and\\_hardware\\_requirements\\_for\\_commvault.html>
* OpenStack VSA proxy requirements: <https://documentation.commvault.com/11.20/commcell-console/system\\_requirements\\_for\\_virtual\\_server\\_agent\\_with\\_openstack\\_03.html#virtual-server-agent-proxy-requirements>

### PCD / OpenStack

* Keystone endpoint reachable over **HTTPS/443** from CommServe and Access Nodes.
* Credentials with enough scope to discover and snapshot the VMs you plan to protect.
  * Use **system-scoped admin** if you need cross-project discovery.
  * Use **project-scoped** permissions if you only protect one project.

### Network and storage

* Access Nodes must be able to reach:
  * PCD endpoints (Keystone/Nova/Cinder/Glance) over HTTPS/443. You may need provider networks to host Access Nodes.
  * The disk library (local disk or object storage, if used)

***

## CommServe installation

#### Requirements

* Supported OS (Windows or Linux)
* As per **Commvault** system requirements

#### Install

{% stepper %}
{% step %}

#### Download & Run Installer

1. Download the Commvault Media Kit.
2. Run the installer.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/QFKBdjjOTBlj22wiDzAA/images/image49.png)

Choose:

* Install required packages locally
* Configure CommCell
  {% endstep %}

{% step %}

#### Installer Options & Defaults

* Install required packages on the server, or on a different computer. This guide uses the first option.
* There are many options depending on what you want to configure (in this case CommCell).
* Proceed with the default setup.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/PDzNrsOVtF0yvbBYotrD/images/image38.png)

<details>

<summary>More installer screenshots</summary>

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/mcKaQESHvMIYlkVslXW7/images/image28.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/ICsTRzwFbnTSj8po2w1R/images/image22.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/xmjrwN7ED8YwUiwdhfzz/images/image21.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/9cIYQKA2qDY2jMFkgyZI/images/image6.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/FmONdlir3JP1H38nFs8x/images/image42.png)

</details>
{% endstep %}

{% step %}

#### Credentials & Installation Progress

1. Enter the Commvault credentials. You will use these to access Commvault Command Center.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/hjNj8FTKTuNiM8XqJR7t/images/image37.png)

2. Wait for package download and installation. This can take \~1 hour.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/ETshfLLmycuXMLvFVTPr/images/image4.png)

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/zHehImgPaFE78bGGtdq2/images/image24.png) ![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/jb40RntIsQaeIM4alx6e/images/image2.png) ![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/iPfKnZKm1xNk4bOIYxV5/images/image45.png)
{% endstep %}
{% endstepper %}

#### Post-install

* Confirm Commvault services are running.

#### Access UI

`https://<commserve-fqdn>/commandcenter`

![](https://1100565312-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIYcmHH6U169jTwihxwwy%2Fuploads%2FgACtF4JNRCNqnPABIz0H%2Fcommvault-login.jpg?alt=media\&token=3fcbd444-86d4-4927-b897-1594fbc2e8fc)

### Backup storage configuration

#### Primary storage (recommended)

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/DPTtAce9ncZbn7mBQs04/images/image19.png)

* Local disk storage on Media Agent VMs
* Disk Library configuration:
  * Use high IOPS storage.
  * Size it based on retention and workload.
* Benefits:
  * Faster restores (low RTO)
  * No WAN dependency during recovery

#### Secondary storage (optional)

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/o5nKp1kpDLDJKnYgZfpe/images/image51.png) ![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/tJIx9egTqIb3MRXqtCHp/images/image52.png)

* Can be cloud storage (S3 / Azure / etc.)
* Used for:
  * Secondary copy
  * Long-term retention
  * DR use cases

### MediaAgent (MA) / Access Node deployment

VMs can be configured to do various jobs depending on the packages installed on them:

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/AKQibIjxMSPOxLhHMvIK/images/image8.png) ![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/Se15SHFZC5tx34zjH8Gw/images/image33.png)

#### General Rules

* Deploy as VMs in PCD.
* Use one Windows MediaAgent and one Linux MediaAgent per region.
* Attach local disks for backup storage.

#### Create a Custom Installation Package

{% stepper %}
{% step %}

### Run installer on CommServe

Execute the Commvault installation script on the CommServe server.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/wE06by7gsxLwEyECgDCF/images/image31.png)
{% endstep %}

{% step %}

### Select Download Package

Select "Download package to install on a different computer."

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/aNJQEK3fPUjXrksUthUh/images/image41.png)
{% endstep %}

{% step %}

### Choose Media Option & Platform

* Choose the correct media option (e.g., Linux / Unix Custom Package).
* Select the correct operating system platform.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/a4lAvagzYOzBLFqKGVSe/images/image43.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/6uf0Hh6Guys48odWGK5J/images/image44.png)
{% endstep %}

{% step %}

### Advanced & Join CommCell

* Choose Advanced to select specific components.
* Select "Join an existing CommCell."

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/fkipHg7JmRNoTW13IwCK/images/image5.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/W7pQL0H81cyPadfhyuZT/images/image7.png)
{% endstep %}

{% step %}

### Select Roles & Verify

* Select the required roles.
* Verify the package directory.
* Select the Latest Maintenance Release.
* Review the configuration and proceed.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/frbIDmo6GvOA2WOA7pBY/images/image18.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/asUFRA2VbhQSKmNSP99K/images/image29.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/xjvplPK5r9gKP44DUE5o/images/image14.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/hDpBt8w0uxYlfMEmWJNN/images/image10.png)
{% endstep %}

{% step %}

### Package Creation & Recording

* Wait while the custom package is created.
* Record the custom package answers for reference.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/xh3AEpKcS4QYrVMpxZt4/images/image40.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/JTE6Q7Rxxjmr02ElJAer/images/image26.png)
{% endstep %}

{% step %}

### Installation-specific Answers

* Leave the Instance Number empty. This uses the current instance.
* Join an existing CommCell.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/CJ6ayP1KFhQfwxTSFg0u/images/image34.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/WYuxN3lUblvWecZuDzFH/images/image3.png)
{% endstep %}

{% step %}

### Role & Option Selections

* Select the required roles.
* Select **No** for restore-only agent.
* Check the installation directory.
* Select **No** for dedicated Unix group.
* Leave the CVD Port empty to use the default.
* Set the Data Directory to /opt.
* Review the configuration before starting installation.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/FVfBGtddquPti9gGVDHa/images/image32.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/mwBXJmRyN9nF2XOypSYP/images/image15.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/OkPvjreNsOP3ByfarE2x/images/image48.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/rhkn0mb0207o92INs8rt/images/image54.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/jsCcOVBn7JOlYMk7D17e/images/image13.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/hzWeEk74rnpeo4mysPwm/images/image16.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/vpoikhrTThqHXGQxICKf/images/image27.png)
{% endstep %}

{% step %}

### Certificate / CommServe Details

* Select **No** for server pre-client certificate.
* Provide the CommServe hostname or IP address.
* Select **No** for decoupled install.
* Select **No** for ignore name conflict.
* Enter the CommServe authentication credentials.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/mm75DP1ZQn70Mj1rxesJ/images/image47.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/VPVh2TslJVDZCoz87jAy/images/image17.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/MYItHpDRtMC9OfDJ4Ojv/images/image1.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/OlP54cJbAqNOnbs8llzJ/images/image56.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/3kFEeUDh7TmnHmDSy15G/images/image46.png)
{% endstep %}

{% step %}

### Final Options & TAR file

* Leave the plan option empty for now.
* Client group: No.
* Subclient Policy: Empty.
* Leave the Storage policy empty for now.
* Prepare tar file: Yes.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/v19BlHD6l4lbbCq8DWlp/images/image57.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/Cx9Xb5tjf7nOS2dkExT9/images/image55.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/TGiyxmJTE1TdQdC0wjdj/images/image36.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/0uNH3MDfhclHUaHW23AJ/images/image35.png)\
![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/knOZndJYXJqmlHZp1yhE/images/image12.png)

The custom package (TAR file) will be created under: /opt/DownloadPackageLocation/tar

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/knOZndJYXJqmlHZp1yhE/images/image12.png)
{% endstep %}
{% endstepper %}

### Linux MediaAgent (Access Node)

#### OS-level requirements

Install the following packages (required for restore & file browse):

* QEMU disk image utility (qemu-img)
* libguestfs
* libguestfs-tools
* Logical Volume Management (lvm)

#### Required Commvault packages

Installed from Commvault UI:

* Linux File System
* Virtual Server Agent
* MediaAgent

#### Install

{% stepper %}
{% step %}

### Add server in the UI

1. Go to Commvault UI.
2. Manage → Servers → Add Server.
3. Select a Linux server.
   {% endstep %}

{% step %}

### Push install and verify

4. Push install the required packages.
5. Verify the MediaAgent appears under **Servers**.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/dIULpxJgzKLGeKfKjwWw/images/image23.png)
{% endstep %}
{% endstepper %}

### Windows MediaAgent (Access Node)

#### OS-level requirements

* Install .NET Framework 4.8
* Required before Commvault package installation

{% hint style="info" %}
Windows clients cannot be installed from a Linux CommServe UI in some versions.
{% endhint %}

#### Install

{% stepper %}
{% step %}

#### Copy TAR to Access Node

Copy the generated TAR file to the Access Node server.
{% endstep %}

{% step %}

#### Silent Installation

Execute the silent installation script (silent\_install).

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/IRsN9v2HTieVuq5TEtdM/images/image30.png)
{% endstep %}
{% endstepper %}

#### Verify

* Appears as Media Agent in UI
* Assigned as Windows restore proxy

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/fveZhbJ09UYD8OaMOASq/images/image11.png)

## Add PCD to Commvault

Go to Commvault UI.

{% stepper %}
{% step %}

### Add Hypervisor

1. Go to Virtualization → Add Hypervisor.
2. Select OpenStack.

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/sUsASoVmmSzc3TeMbut2/images/image9.png)
{% endstep %}

{% step %}

### Enter PCD Details

Enter:

* PCD Keystone endpoint (HTTPS/443), for example: `https://<pcd-region-fqdn>/keystone/v3`
* OpenStack Domain User (mandatory): the domain associated with the user. Specify **Default** if not using a custom domain.
* Credentials
* Project / Region details

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/lav9tqWylEj7DbIzM68m/images/image50.png)
{% endstep %}

{% step %}

### Validate & Discover

1. Validate connection.
2. Discover PCD VMs.
   {% endstep %}
   {% endstepper %}

## Backup and restore

### Add VMs for backup

VM Groups

* Create VM Groups using:
  * Content (explicit VMs)
  * Rules (tags / naming patterns)

![](https://content.gitbook.com/content/IYcmHH6U169jTwihxwwy/blobs/A2a9ie1ksKdrEbLs77OL/images/image53.png)

Backup Configuration

* Assign:
  * Storage Policy
  * Media Agent
* Schedule backups

### Restore behavior

#### Backup Phase

* MediaAgent OS does not need to match the VM OS.
* Backup uses the Access Node for data movement only.

#### Restore Phase

* OS-specific proxy is mandatory
* Examples:
  * Windows VM restore → Windows Media Agent
  * Linux VM restore → Linux Media Agent
* Reason:
  * File systems
  * Guest tools
  * OS-specific restore operations

<details>

<summary>Database protection (optional)</summary>

Database protection is agent-based.

Add the DB serverAdd the DB server:Manage → Servers → Add ServerInstall agents on the DB serverInstall directly on the same database server:File System AgentApplication-specific agent (MySQL, MSSQL, etc.)Configure policies and verifyConfigure DB backup policies.Verify visibility under the Database tab.Since the agent is installed on the database server itself, backups are application-aware. This ensures consistent backups and supported restores.

</details>

### Backup and restore workflow in PCD

This section explains the sequence of operations and the resources created in PCD when a backup or restore job is triggered from Commvault.

#### Backup Workflow (High-Level Flow)

Commvault interacts with PCD using the OpenStack APIs. Backups are agentless at the VM level (for VMs), with data movement handled by the Media Agent (Access Node).

{% stepper %}
{% step %}

#### 1. Backup Job Triggered

* A backup job is initiated from Commvault (scheduled or manual).
* The job is associated with a VM Group and a Storage Policy.
  {% endstep %}

{% step %}

#### 2. PCD / OpenStack Authentication

* Commvault authenticates to PCD via Keystone using the configured credentials.
* Project and region context is established.
  {% endstep %}

{% step %}

#### 3. VM Metadata Collection

* Commvault queries PCD for:
  * VM details
  * Attached volumes
  * Disk layout
  * Snapshot capabilities
    {% endstep %}

{% step %}

#### 4. Snapshot Creation (PCD Side)

* PCD creates:
  * AVM snapshot or
  * Volume snapshots (depending on configuration)

{% hint style="warning" %}
Only VMs that boot from persistent (bootable) volumes are supported. Ephemeral-root VMs are not protected.
{% endhint %}

* The VM remains powered on unless otherwise configured.
  {% endstep %}

{% step %}

#### 5. Temporary Snapshot Resources Created

On the PCD side, the following resources are created temporarily:

* Snapshot objects (VM or volume)
* Temporary snapshot volumes
* Snapshot metadata entries
  {% endstep %}

{% step %}

#### 6. Data Read by Media Agent

* The MediaAgent (Access Node VM) accesses the snapshot data.
* A temporary volume created from the snapshot is attached or mapped to the MediaAgent. This allows reads without impacting the source VM.
* Backup data is streamed:
  * From snapshot → MediaAgent
  * From MediaAgent → local disk library
    {% endstep %}

{% step %}

#### 7. Snapshot Cleanup

* Once data transfer completes successfully:
  * Snapshot resources are deleted
  * Temporary volumes are removed
* PCD returns the VM to its original state.
  {% endstep %}

{% step %}

#### 8. Job Completion

* Backup metadata is updated in Commvault.
* Backup data is retained according to the Storage Policy.
  {% endstep %}
  {% endstepper %}

PCD Impact Summary (Backup)

* No permanent resources left behind
* Short-lived snapshots only
* No agent installed inside the VM
* Minimal VM performance impact

#### Restore Workflow

Restores are proxy-based and require an OS-matching MediaAgent. Commvault uses PCD APIs to recreate or overwrite VM resources.

{% stepper %}
{% step %}

#### 1. Restore Job Triggered

* Restore initiated from Commvault:
  * Full VM restore
  * File-level restore
    {% endstep %}

{% step %}

#### 2. Restore Proxy Selection

* Commvault selects an OS-specific Media Agent:
  * Windows VM restore → Windows Media Agent
  * Linux VM restore → Linux Media Agent
    {% endstep %}

{% step %}

#### 3. PCD Authentication

* Commvault authenticates to PCD using Keystone.
* Target project, network, cluster, and region are selected.
  {% endstep %}

{% step %}

#### 4. Target Resource Preparation (PCD Side)

Depending on restore type, PCD creates:

* New volumes from backup data
* Temporary volumes (during restore)
* Network attachments
  {% endstep %}

{% step %}

#### 5. Data Transfer

* Backup data is read from:
  * Local disk library on Media Agent
* Data is written to:
  * Newly created or existing PCD volumes
    {% endstep %}

{% step %}

#### 6. VM Reconstruction

For full VM restore:

* VM definition is recreated
* Volumes attached
* Networks connected

  <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>The network selected for restore should have port security enabled.</p></div>
* VM powered on (optional)
  {% endstep %}

{% step %}

#### 7. Cleanup of Temporary Resources

* Temporary restore volumes or staging resources are removed.
* Final VM and disks remain active.
  {% endstep %}

{% step %}

#### 8. Restore Job Completion

* Restore status updated in Commvault.
* VM becomes available in PCD.
  {% endstep %}
  {% endstepper %}

PCD Impact Summary (Restore)

* New resources may be permanently created:
  * VMs
  * Volumes
  * Network attachments
* Temporary resources are cleaned automatically
* Restore speed depends on:
  * Media Agent proximity
  * Local disk performance
  * Volume size

### Troubleshooting quick checks

* **Discovery fails**
  * Confirm Keystone URL ends in `/keystone/v3`.
  * Confirm HTTPS/443 reachability from CommServe and Access Nodes.
  * Confirm credentials and scope (system vs project).
* **Backup fails at snapshot**
  * Check tenant snapshot quota and concurrent jobs.
  * Check Cinder snapshot support for the backend.
* **Restore fails**
  * Confirm the restore proxy OS matches the guest OS.
  * Confirm Access Node can attach and read volumes in the target project.

### Summary

* Deploy CommServe and Access Nodes per PCD region for performance and isolation.
* Backups are snapshot-based and agentless for VMs.
  * Database backups remain agent-based (inside the DB server).
* Media Agents handle all data movement.
* Local disk storage ensures:
  * Faster restores
  * Reduced dependency on network or cloud storage
* OS-specific Media Agents are mandatory for restores, not backups.
