Files
Xen-Orchestra-xen-orchestra…/@xen-orchestra/disk-cli
Bastien Nollet 9cdaf6bb41 feat: technical release (#10305)
* feat(@xen-orchestra/async-map): 0.1.4

* feat(xo-common): 0.11.0

* feat(xen-api): 4.9.0

* feat(@vates/types): 1.30.2

* feat(@xen-orchestra/acl): 1.6.0

* feat(@xen-orchestra/xapi): 8.10.3

* feat(@xen-orchestra/backups): 0.74.0

* feat(@xen-orchestra/backups-cli): 1.1.14

* feat(@xen-orchestra/disk-cli): 2.2.1

* feat(@xen-orchestra/immutable-backups): 3.0.5

* feat(@xen-orchestra/web-core): 0.59.0

* feat(@xen-orchestra/mixins): 0.20.2

* feat(@xen-orchestra/proxy): 0.31.7

* feat(@xen-orchestra/proxy-cli): 0.3.3

* feat(@xen-orchestra/qa-test): 1.2.0

* feat(@xen-orchestra/rest-api): 0.38.0

* feat(@xen-orchestra/upload-ova): 0.1.9

* feat(@xen-orchestra/web): 0.58.0

* feat(xo-acl-resolver): 0.5.4

* feat(xo-cli): 0.32.4

* feat(xo-server): 5.207.3

* feat(xo-server-audit): 0.15.2

* feat(xo-server-ipmi-sensors): 2.1.0

* feat(xo-server-netbox): 1.13.2

* feat(xo-server-sdn-controller): 1.4.1

* feat(xo-web): 5.202.0

* chore(CHANGELOG): update next
2026-08-25 16:19:35 +02:00
..
2026-08-25 16:19:35 +02:00

@xen-orchestra/disk-cli

Package Version License PackagePhobia Node compatibility

CLI tool to inspect and manage disks in backup repositories

Install

Installation of the npm package:

npm install --global @xen-orchestra/disk-cli

Usage

$ xo-disk-cli --help
Usage: xo-disk-cli <command> <handler-url> <path> [options]

Commands:
  info       Show disk info (virtual size, uid, parent uid, block size); --chain shows the full parent chain, --size adds the size on disk
  list       List all disks at a path and display their properties in a table; --size adds the size on disk
  transform  Convert a disk to another format and write to stdout (raw | vhd | qcow2)

Commands

info

Display metadata for a single disk file.

xo-disk-cli info <handler-url> <disk-path> [--chain] [--size]

Output includes: UID, parent UID (for differencing disks), virtual size, and block size.

$ xo-disk-cli info file:///mnt/backups /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd
Disk info: /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd
  UID:          <uuid>
  Parent UID:   <parent-uuid>
  Virtual size: 8.00 GiB (8589934592 bytes)
  Block size:   2.00 MiB (2097152 bytes)

By default the disk is opened without reading its block allocation table, which is cheap but does not allow computing the size on disk. Pass --size to read the block allocation table and print the size on disk as an extra line:

$ xo-disk-cli info file:///mnt/backups /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd --size
Disk info: /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd
  UID:          <uuid>
  Parent UID:   <parent-uuid>
  Virtual size: 8.00 GiB (8589934592 bytes)
  Block size:   2.00 MiB (2097152 bytes)
  Size on disk: 128.00 MiB (134217728 bytes)

With --chain, the disk's full parent chain is opened and each disk is printed from the root (base) disk down to the given leaf disk. --chain and --size can be combined:

$ xo-disk-cli info file:///mnt/backups /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd --chain
Disk chain: /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd (2 disks, root → leaf)

Disk info: /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/base.vhd
  UID:          <base-uuid>
  Parent UID:   (none)
  Virtual size: 8.00 GiB (8589934592 bytes)
  Block size:   2.00 MiB (2097152 bytes)

Disk info: /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd
  UID:          <uuid>
  Parent UID:   <base-uuid>
  Virtual size: 8.00 GiB (8589934592 bytes)
  Block size:   2.00 MiB (2097152 bytes)

list

List all disk files found at a directory path and display their properties in a table. Disks are sorted so that each child appears directly after its parent. When a disk's parent is the row immediately above, the parent UID column shows for quick chain health assessment.

xo-disk-cli list <handler-url> <dir-path> [--size]

By default disks are opened without reading their block allocation table (cheap), so the "Size on disk" column is omitted:

$ xo-disk-cli list file:///mnt/backups /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/
┌──────────────┬──────────────────────────────────────┬──────────────┬─────────────┬──────────────────────────────────────┐
│ File         │ UID                                  │ Virtual size │ Differencing │ Parent UID                           │
├──────────────┼──────────────────────────────────────┼──────────────┼─────────────┼──────────────────────────────────────┤
│ base.vhd     │ xxxxxxxx-...                         │ 8.00 GiB     │ no          │ (none)                               │
│ snapshot.vhd │ yyyyyyyy-...                         │ 8.00 GiB     │ yes         │ ↑                                    │
└──────────────┴──────────────────────────────────────┴──────────────┴─────────────┴──────────────────────────────────────┘

Pass --size to read each disk's block allocation table and add the "Size on disk" column:

$ xo-disk-cli list file:///mnt/backups /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/ --size
┌──────────────┬──────────────────────────────────────┬─────────────┬──────────────┬─────────────┬──────────────────────────────────────┐
│ File         │ UID                                  │ Size on disk│ Virtual size │ Differencing │ Parent UID                           │
├──────────────┼──────────────────────────────────────┼─────────────┼──────────────┼─────────────┼──────────────────────────────────────┤
│ base.vhd     │ xxxxxxxx-...                         │ 1.20 GiB    │ 8.00 GiB     │ no          │ (none)                               │
│ snapshot.vhd │ yyyyyyyy-...                         │ 128.00 MiB  │ 8.00 GiB     │ yes         │ ↑                                    │
└──────────────┴──────────────────────────────────────┴─────────────┴──────────────┴─────────────┴──────────────────────────────────────┘

transform

Convert a disk (or its full parent chain if differencing) to the specified format and write the result to stdout. Redirect to a file to save the output.

xo-disk-cli transform <handler-url> <disk-path> <format>

Supported formats:

  • raw — flat binary image; absent blocks are written as zeros
  • vhd — VHD fixed/dynamic image
  • qcow2 — QCOW2 image
$ xo-disk-cli transform file:///mnt/backups /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd raw > disk.img
$ xo-disk-cli transform file:///mnt/backups /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd qcow2 > disk.qcow2
$ xo-disk-cli transform file:///mnt/backups /xo-vm-backups/<vm-uuid>/vdis/<vdi-uuid>/snapshot.vhd vhd > disk.vhd

Handler URLs

The <handler-url> argument identifies the remote storage backend. Examples:

Backend URL format
Local filesystem file:///absolute/path
NFS nfs://host/export
SMB smb://host/share
S3 s3://bucket/prefix

Contributions

Contributions are very welcomed, either on the documentation or on the code.

You may:

  • report any issue you've encountered;
  • fork and create a pull request.

License

AGPL-3.0-or-later © Vates SAS