6.13.2 Customizing the Guest Image to Add a Storage Volume and File System

The following example workflow shows how to customize a guest image to add a storage volume with a file system. You can adapt the following to perform similar customizations in your environment.

  1. Prepare a host with libguestfs packages and choose a staging server.

    Modification of the baseline Exadata system image is performed using the libguestfs tools (such as guestfish, virt-resize, and virt-customize). To avoid potential issues with Oracle Exadata System Software updates, Oracle recommends using a separate Linux host to perform image modification. You can use dnf to install the required libguestfs packages. For example:

    # dnf install libguestfs-xfs libguestfs-tools

    After image modification, the rest of the workflow is performed as root on an Exadata KVM host, also known as the staging server. Choose a suitable KVM host as the staging server. In this example workflow, the staging server is exa01adm05.

  2. Select the Exadata base system image being customized and copy it to the libguestfs server.

    Note:

    The base system image must be from Oracle Exadata System Software release 26.1.0 or later.

    In this example workflow, the baseline Exadata system image is System.first.boot.26.1.0.0.0.260515.rtg.img.

  3. On the libguestfs server, examine the baseline Exadata system image.

    Note:

    On the libguestfs server, set LIBGUESTFS_BACKEND=direct in the Linux shell environment to avoid potential configuration and permission issues with libguestfs tools.

    # ls -la ./System.first.boot.26.1.0.0.0.260515.rtg.img
    -rw-r-----. 1 root root 106622563328 Apr 27 12:03 System.first.boot.26.1.0.0.0.260515.rtg.img
    # export LIBGUESTFS_BACKEND=direct
    # virt-filesystems -a ./System.first.boot.26.1.0.0.0.260515.rtg.img --all -h -l
    Name                                Type       VFS     Label MBR Size Parent
    /dev/sda1                           filesystem xfs     BOOT  -   412M -
    /dev/sda2                           filesystem unknown -     -   256M -
    /dev/VGExaDbDomU/LVDbHome           filesystem xfs     HOME  -   3.9G -
    /dev/VGExaDbDomU/LVDbKdump          filesystem xfs     KDUMP -   20G  -
    /dev/VGExaDbDomU/LVDbSwap1          filesystem swap    SWAP  -   16G  -
    /dev/VGExaDbDomU/LVDbSys1           filesystem xfs     DBSYS -   15G  -
    /dev/VGExaDbDomU/LVDbSys2           filesystem unknown -     -   15G  -
    /dev/VGExaDbDomU/LVDbTmp            filesystem xfs     TMP   -   2.9G -
    /dev/VGExaDbDomU/LVDbVar1           filesystem xfs     VAR   -   1.9G -
    /dev/VGExaDbDomU/LVDbVar2           filesystem unknown -     -   2.0G -
    /dev/VGExaDbDomU/LVDbVarLog         filesystem xfs     DIAG  -   18G  -
    /dev/VGExaDbDomU/LVDbVarLogAudit    filesystem xfs     AUDIT -   924M -
    /dev/VGExaDbDomU/LVDoNotRemoveOrUse filesystem unknown -     -   2.5G -
    /dev/VGExaDbDomU/LVDbHome           lv         -       -     -   4.0G /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDbKdump          lv         -       -     -   20G  /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDbSwap1          lv         -       -     -   16G  /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDbSys1           lv         -       -     -   15G  /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDbSys2           lv         -       -     -   15G  /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDbTmp            lv         -       -     -   3.0G /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDbVar1           lv         -       -     -   2.0G /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDbVar2           lv         -       -     -   2.0G /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDbVarLog         lv         -       -     -   18G  /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDbVarLogAudit    lv         -       -     -   1.0G /dev/VGExaDbDomU
    /dev/VGExaDbDomU/LVDoNotRemoveOrUse lv         -       -     -   2.5G /dev/VGExaDbDomU
    /dev/VGExaDbDomU                    vg         -       -     -   99G  /dev/sda3
    /dev/sda3                           pv         -       -     -   99G  -
    /dev/sda1                           partition  -       -     -   512M /dev/sda
    /dev/sda2                           partition  -       -     -   256M /dev/sda
    /dev/sda3                           partition  -       -     -   99G  /dev/sda
    /dev/sda                            device     -       -     -   99G  -
    
    # virt-cat -a ./System.first.boot.26.1.0.0.0.260515.rtg.img /etc/fstab
    libguestfs: error: mount_ro: mount: /crashfiles: mount point is not a directory
    virt-cat: some filesystems could not be mounted (ignored)
    LABEL=BOOT              /boot   xfs     defaults,nodev,nosuid   0 0
    LABEL=DBSYS             /       xfs     defaults        0 0
    LABEL=SWAP              swap    swap    defaults        0 0
    LABEL=KDUMP             /crashfiles     xfs     defaults,nodev  0 0
    LABEL=TMP               /tmp    xfs     defaults,nodev,nosuid   0 0
    LABEL=HOME              /home   xfs     defaults,nodev,nosuid   0 0
    LABEL=VAR               /var    xfs     defaults,nodev  0 0
    LABEL=DIAG              /var/log        xfs     defaults,nodev,nosuid   0 0
    LABEL=AUDIT             /var/log/audit  xfs     defaults,nodev,noexec,nosuid    0 0
    tmpfs           /dev/shm        tmpfs   defaults,nodev,size=30831m 0 0
    
    # qemu-img info ./System.first.boot.26.1.0.0.0.260515.rtg.img
    image: System.first.boot.26.1.0.0.0.260515.rtg.img
    file format: raw
    virtual size: 99.3 GiB (106622563328 bytes)
    disk size: 5.81 GiB

    Take note of the size and internal structure of the baseline image.

  4. Create a clone of the baseline system image and create an image for the new storage volume and file system:

    # qemu-img create -f raw custom.img 100G
    Formatting 'custom.img', fmt=raw size=107374182400
    
    # virt-resize --expand /dev/sda3 ./System.first.boot.26.1.0.0.0.260515.rtg.img  ./custom.img
    [   0.0] Examining System.first.boot.26.1.0.0.0.260515.rtg.img
      25% ...
     100% ...
    **********
    
    Summary of changes:
    
    /dev/sda1: This partition will be left alone.
    
    /dev/sda2: This partition will be left alone.
    
    /dev/sda3: This partition will be resized from 98.5G to 99.2G.  The LVM PV 
    on /dev/sda3 will be expanded using the ‘pvresize’ method.
    
    **********
    [   4.5] Setting up initial partition table on custom.img
    [  15.7] Copying /dev/sda1
    [  16.5] Copying /dev/sda2
    [  16.8] Copying /dev/sda3
    ...
    [ 137.1] Expanding /dev/sda3 using the ‘pvresize’ method
    
    Resize operation completed with no errors.  Before deleting the old disk, 
    carefully check that the resized disk boots and works correctly
    
    # qemu-img create -f raw extra.img 200G
    Formatting 'extra.img', fmt=raw size=214748364800

    In the example, the size of the cloned baseline image is 100 GB (100G) and the size of the image for the new storage volume and file system is 200 GB (200G).

  5. Customize the base image and new storage volume.

    You can use guestfish to customize a guest image. It is recommended to prepare a script with the desired customizations and then run guestfish to apply the scripted customizations.

    Note:

    You are responsible for all image customizations that you perform. Oracle will not support questions or issues with specific image customizations. If a guest fails, and Oracle suspects the failure may be caused by an image customization, then Oracle may ask for the issue to be reproduced on a standard (uncustomized) system.

    The guestfish utility is a powerful and flexible tool for accessing and customizing a guest image. You can use it to install application binaries and data, create or resize file systems, and perform numerous other offline customizations.

    The following example shows a guestfish script that starts by mounting the guest image and making it bootable. This initialization is a typical requirement for system images. Following the initialization phase, the script continues to perform a set of customizations to add a storage volume and configure it as an XFS file system mounted on /extra. You can use the following example as a template for similar customizations that you want to make.

    # cat modify.fish
    # Add target disk/volume to guestfs environment
    add ./custom.img
    add ./extra.img
    
    # Start execution
    run
    
    # Mount root filesystem (LVM root) as /
    mount /dev/VGExaDbDomU/LVDbSys1 /
    
    # Mount /boot partition
    mount /dev/sda1 /boot
    
    # Install GRUB bootloader to disk (BIOS mode)
    # NOTE: Not applicable for UEFI systems
    sh "grub2-install /dev/sda"
    
    # NOTE: Alternative for UEFI systems
    # Mount EFI System Partition (required for UEFI boot files)
    # mount /dev/sda2 /boot/efi
    
    # End of Initialization 
    
    # Create PV on extra volume
    pvcreate /dev/sdb
    
    # Create VG on extra volume
    vgcreate vg_extra /dev/sdb
    
    # Create LV
    lvcreate-free lv_extra vg_extra 100
    
    # Format LV with XFS and label
    mkfs xfs /dev/vg_extra/lv_extra label:EXTRA
    
    # Create mount directory
    mkdir /extra
    
    # Append fstab entry
    write-append /etc/fstab "LABEL=EXTRA  /extra  xfs  defaults  0  2\n"
    
    # Exit guestfs session
    exit

    Note:

    For further guestfish commands and examples see the libguestfs help at https://libguestfs.org/.

    After you prepare the customization script, you can run guestfish to apply it. For example, the following guestfish command runs the script at ./modify.fish:

    # guestfish --rw -f ./modify.fish

    Examine any output from the guestfish command to ensure that the customizations are performed as planned.

  6. Create a checksum for each customized image and copy the customized images back to the Exadata staging server.

    You can use the Linux sha256sum utility to create a checksum for each customized image. For example:

    # sha256sum ./custom.img
    b796a1f4b38d442f8ce1ab405525c38b92bddf1f37031580b46b7cd4af348bac ./custom.img
    # sha256sum ./extra.img
    cd4af348bacb796a1f4bf37031580b46b7cd4af348bacd442f8ce1ab405525c3 ./extra.img

    These checksums are used later to validate the integrity of the customized images after they are copied to the Exadata staging server and loaded into the Exascale volumes used for deployment.

  7. On the Exadata staging server, provision volumes for the customized images.

    To provision volumes for customized images, use the Exascale command line interface (ESCLI) to create new empty volumes and then attach them to the staging server. For example:

    [root@exa01adm05 ~]# escli --wallet <wallet-location> --ctrl <ERS-endpoint>
    Wallet: <wallet-location>
    User: admin
    @> lsinitiator 
    id                                   hostName      giClusterName giClusterId 
    d8fd0073-59ac-e40b-d8fd-007359ace40b exa01adm06               
    f7c2bd74-08c7-b02c-f7c2-bd7408c7b02c exa01adm05               
    
    @> mkvolume 100g --attributes vault=sysvault_exa01,name=goldvol_exa01
    Created volume with id vol0021_0804568e719c4824bcdb146d4535c5f1
    
    @> mkvolumeattachment vol0021_0804568e719c4824bcdb146d4535c5f1 goldvol_exa01 --attributes initiator=f7c2bd74-08c7-b02c-f7c2-bd7408c7b02c
    Created edv attachment with id att0021_903462044500465c954358bca5e17510
    
    @> mkvolume 200g --attributes vault=sysvault_exa01,name=extravol_exa01
    Created volume with id vol0022_dd1a0d5d3fe94b97b95545d763e4324b
    
    @> mkvolumeattachment vol0022_dd1a0d5d3fe94b97b95545d763e4324b extravol_exa01 --attributes initiator=f7c2bd74-08c7-b02c-f7c2-bd7408c7b02c
    Created edv attachment with id att0022_dc2974e3331745099a05fb8e939b8b80
    
    @> exit

    In the example:

    • The first volume size is 100 GB (100g), matching the size of the customized system image it will accommodate. The second volume size is 200 GB (200g), matching the size of the new storage volume containing the /extra file system.

    • The volumes are named goldvol_exa01 and extravol_exa01. You can choose your own name for each customized image. Also take note of the volume IDs (for example, vol0021_0804568e719c4824bcdb146d4535c5f1 and vol0022_dd1a0d5d3fe94b97b95545d763e4324b) as you will require them later to reference the volumes.

    • The volumes are created in an Exascale vault named sysvault_exa01. You can choose an existing vault in your Exascale system or create a specific vault to house your customized images.

    After volume provisioning, you can verify each volume by examining the corresponding block device at /dev/exc/<volume-name>. For example:

    [root@exa01adm05 ~]# ls -la /dev/exc/*_exa01 
    brw-rw----. 2 root disk 251, 11 May  7 10:17 /dev/exc/goldvol_exa01
    brw-rw----. 2 root disk 251, 12 May  7 10:18 /dev/exc/extravol_exa01
  8. Copy the customized images into the prepared Exascale volumes.

    For example:

    [root@exa01adm05 ~]# dd if=./custom.img of=/dev/exc/goldvol_exa01 bs=16M status=progress oflag=direct
    ...
    
    [root@exa01adm05 ~]# dd if=./extra.img of=/dev/exc/extravol_exa01 bs=16M status=progress oflag=direct
    ...
  9. Catalog the gold-image volumes.

    As an operational best practice, you should maintain a catalog of your customized gold-images. For each image, you should maintain metadata to help you identify the image and its contents. You should also keep checksum information to validate the integrity of each image.

    To ensure an enduring read-only copy of the customized image, you can create a snapshot of the underlying Exascale volume. To identify the Exascale volume, use the volume ID reported during volume creation. For example:

    [root@exa01adm05 ~]# escli --wallet <wallet-location> --ctrl <ERS-endpoint>
    
    @> mkvolumesnapshot vol0021_0804568e719c4824bcdb146d4535c5f1 --attributes name=goldvol_exa01_snap1
    Created volume snapshot with id vol0021_snap0001_50e52177583f4be4bad68ac20b65001e
    
    @> mkvolumesnapshot vol0022_dd1a0d5d3fe94b97b95545d763e4324b --attributes name=extravol_exa01_snap1
    Created volume snapshot with id vol0022_snap0001_5217ad68ac207583fb65001e50e4be4b

    Take note of the volume snapshot IDs (for example, vol0021_snap0001_50e52177583f4be4bad68ac20b65001e and vol0022_snap0001_5217ad68ac207583fb65001e50e4be4b) as you will require them to reference the volume snapshots.

    After you create a volume snapshot, you can continue to use the original volume for further customizations. At any point you can make another snapshot for a different generation of the customized image.

    After you have a snapshot for each validated and tested image, you can lock them to prevent accidental deletion. For example:

    @> chvolumesnapshot vol0021_snap0001_50e52177583f4be4bad68ac20b65001e --attributes lockExpiryTime=2050-06-30T13:00:00,lockImmutable=true
    
    @> chvolumesnapshot vol0022_snap0001_5217ad68ac207583fb65001e50e4be4b --attributes lockExpiryTime=2050-06-30T13:00:00,lockImmutable=true

    To use a set of validated and tested images, make volume clones and associated attachments. For example:

    @> mkvolume --attributes volumeSnapshot=vol0021_snap0001_50e52177583f4be4bad68ac20b65001e,name=goldvol_exa01_clone1
    Created volume with id vol0039_e9867af0dc03439698e5f6d7edf43a04
    
    @> mkvolumeattachment vol0039_e9867af0dc03439698e5f6d7edf43a04 goldvol_exa01_clone1 --attributes initiator=f7c2bd74-08c7-b02c-f7c2-bd7408c7b02c
    Created edv attachment with id att0031_690f91c85ad64573a93485426467977b
    
    @> mkvolume --attributes volumeSnapshot=vol0022_snap0001_5217ad68ac207583fb65001e50e4be4b,name=extravol_exa01_clone1
    Created volume with id vol0040_5f6d7ed43dc690398ef43a04e9867af0
    
    @> mkvolumeattachment vol0040_5f6d7ed43dc690398ef43a04e9867af0 extravol_exa01_clone1 --attributes initiator=f7c2bd74-08c7-b02c-f7c2-bd7408c7b02c
    Created edv attachment with id att0032_64573a93c85a7b4d2646797854690f91

    The volume clones behave just like the original Exascale volumes, with the added convenience that it is easy to drop and re-create them to return back to the snapshot state.

    You can use the Linux sha256sum utility to create a checksum for each customized image. For example:

    [root@exa01adm05 ~]# sha256sum /dev/exc/goldvol_exa01_clone1
    b796a1f4b38d442f8ce1ab405525c38b92bddf1f37031580b46b7cd4af348bac /dev/exc/goldvol_exa01_clone1
    [root@exa01adm05 ~]# sha256sum /dev/exc/extravol_exa01_clone1
    cd4af348bacb796a1f4bf37031580b46b7cd4af348bacd442f8ce1ab405525c3 /dev/exc/extravol_exa01_clone1

    Compare the checksums with the ones created on the libguestfs server to validate that the images have not changed. You can also save the checksums in the image catalog and check them every time you use the images.

  10. Clone the customized images to the required KVM hosts.

    Before you can reference a customized image in an Exadata guest VM, you must clone the image to make it available on the required KVM hosts.

    You can use the Oracle Exadata Deployment Assistant (OEDA) Command Line Utility (OEDACLI) to perform the required actions.

    Following is an example of the required command sequence. In the example:

    • exa01adm05 and exa01adm06 identify the KVM hosts that will expose the customized images. The command sequence assumes that the customized images are being cloned to two hosts. However, you can extend this to any required number of hosts.

    • goldvol_exa01adm05 and extravol_exa01adm05 are the volume names used to identify the volumes on exa01adm05. goldvol_exa01adm06 and extravol_exa01adm06 are used to identify the volumes on exa01adm06.

    • vol0039_e9867af0dc03439698e5f6d7edf43a04 and vol0040_5f6d7ed43dc690398ef43a04e9867af0 are the Exascale volume IDs associated with the customized images.

    • /root/es.xml represents the path to the Exadata XML configuration file for your system.

    [root@exa01adm05 linux-x64]# cat ./clone.cmd
    CLONE EDVVOLUME volumename=goldvol_exa01adm05 where volumesource=vol0039_e9867af0dc03439698e5f6d7edf43a04 hostname=exa01adm05
    SAVE ACTION
    MERGE ACTIONS
    DEPLOY ACTIONS
    
    CLONE EDVVOLUME volumename=extravol_exa01adm05 where volumesource=vol0040_5f6d7ed43dc690398ef43a04e9867af0 hostname=exa01adm05
    SAVE ACTION
    MERGE ACTIONS
    DEPLOY ACTIONS
    
    CLONE EDVVOLUME volumename=goldvol_exa01adm06 where volumesource=vol0039_e9867af0dc03439698e5f6d7edf43a04 hostname=exa01adm06
    SAVE ACTION
    MERGE ACTIONS
    DEPLOY ACTIONS
    
    CLONE EDVVOLUME volumename=extravol_exa01adm06 where volumesource=vol0040_5f6d7ed43dc690398ef43a04e9867af0 hostname=exa01adm06
    SAVE ACTION
    MERGE ACTIONS
    DEPLOY ACTIONS
    
    SAVE FILE
    
    [root@exa01adm05 linux-x64]# ./oedacli -c /root/es.xml -f ./clone.cmd
    Version : 260504
    SUCCESS - file loaded OK
    Customer : Example - Example
    processMerge
    processMergeActions
    Merging Action : CLONE EDVVOLUME volumename=goldvol_exa01adm05 where volumesource=vol0039_e9867af0dc03439698e5f6d7edf43a04 hostname=exa01adm05
    Merging CLONE EDVVOLUME
    Action Validated and Merged OK
    Deploying Action ID : 12 CLONE EDVVOLUME volumename=goldvol_exa01adm05 where volumesource=vol0039_e9867af0dc03439698e5f6d7edf43a04 hostname=exa01adm05
    Deploying CLONE EDVVOLUME
    Found the source EDV volume goldvol_exa01_clone1 for volume source vol0039_e9867af0dc03439698e5f6d7edf43a04
    Cloned an EDV volume with Exascale Volume ID vol0053_4bb5b73865774dcd8da0bec3ee73c176
    Attached volume vol0053_4bb5b73865774dcd8da0bec3ee73c176 into KVM host exa01adm05.example.com for guest exa01adm05.example.com in /dev/exc/goldvol_exa01adm05_vol0053_4bb5b73865774dcd8da0bec3ee73c176
    Done...
    Done [Elapsed = 16457 mS [0.0 minutes] Thu May 07 11:41:12 PDT 2026]]
    processMerge
    processMergeActions
    Merging Action : CLONE EDVVOLUME volumename=extravol_exa01adm05 where volumesource=vol0040_5f6d7ed43dc690398ef43a04e9867af0 hostname=exa01adm05
    Merging CLONE EDVVOLUME
    Action Validated and Merged OK
    Deploying Action ID : 13 CLONE EDVVOLUME volumename=extravol_exa01adm05 where volumesource=vol0040_5f6d7ed43dc690398ef43a04e9867af0 hostname=exa01adm05
    Deploying CLONE EDVVOLUME
    Found the source EDV volume extravol_exa01_clone1 for volume source vol0040_5f6d7ed43dc690398ef43a04e9867af0
    Cloned an EDV volume with Exascale Volume ID vol0054_b804ab74ccd7400ca5aef861f588be54
    Attached volume vol0054_b804ab74ccd7400ca5aef861f588be54 into KVM host exa01adm05.example.com for guest exa01adm05.example.com in /dev/exc/extravol_exa01adm05_vol0054_b804ab74ccd7400ca5aef861f588be54
    Done...
    Done [Elapsed = 10285 mS [0.0 minutes] Thu May 07 11:41:22 PDT 2026]]
    processMerge
    processMergeActions
    Merging Action : CLONE EDVVOLUME volumename=goldvol_exa01adm06 where volumesource=vol0039_e9867af0dc03439698e5f6d7edf43a04 hostname=exa01adm06
    Merging CLONE EDVVOLUME
    Action Validated and Merged OK
    Deploying Action ID : 14 CLONE EDVVOLUME volumename=goldvol_exa01adm06 where volumesource=vol0039_e9867af0dc03439698e5f6d7edf43a04 hostname=exa01adm06
    Deploying CLONE EDVVOLUME
    Found the source EDV volume goldvol_exa01_clone1 for volume source vol0039_e9867af0dc03439698e5f6d7edf43a04
    Cloned an EDV volume with Exascale Volume ID vol0055_1f7d044d6a93435d9bf79c788a811e3e
    Attached volume vol0055_1f7d044d6a93435d9bf79c788a811e3e into KVM host exa01adm06.example.com for guest exa01adm06.example.com in /dev/exc/goldvol_exa01adm06_vol0055_1f7d044d6a93435d9bf79c788a811e3e
    Done...
    Done [Elapsed = 10305 mS [0.0 minutes] Thu May 07 11:41:32 PDT 2026]]
    processMerge
    processMergeActions
    Merging Action : CLONE EDVVOLUME volumename=extravol_exa01adm06 where volumesource=vol0040_5f6d7ed43dc690398ef43a04e9867af0 hostname=exa01adm06
    Merging CLONE EDVVOLUME
    Action Validated and Merged OK
    Deploying Action ID : 15 CLONE EDVVOLUME volumename=extravol_exa01adm06 where volumesource=vol0040_5f6d7ed43dc690398ef43a04e9867af0 hostname=exa01adm06
    Deploying CLONE EDVVOLUME
    Found the source EDV volume extravol_exa01_clone1 for volume source vol0040_5f6d7ed43dc690398ef43a04e9867af0
    Cloned an EDV volume with Exascale Volume ID vol0056_11b7c5feb9c74ca6b1e1e9b45578ea93
    Attached volume vol0056_11b7c5feb9c74ca6b1e1e9b45578ea93 into KVM host exa01adm06.example.com for guest exa01adm06.example.com in /dev/exc/extravol_exa01adm06_vol0056_11b7c5feb9c74ca6b1e1e9b45578ea93
    Done...
    Done [Elapsed = 10120 mS [0.0 minutes] Thu May 07 11:41:43 PDT 2026]]
    File : /root/es.xml saved OK 
    [root@exa01adm05 linux-x64]#

    Examine the OEDACLI output to determine the corresponding block device for the image volumes on each KVM host. For example, /dev/exc/goldvol_exa01adm05_vol0053_4bb5b73865774dcd8da0bec3ee73c176 and /dev/exc/extravol_exa01adm05_vol0054_b804ab74ccd7400ca5aef861f588be54 on exa01adm05, plus /dev/exc/goldvol_exa01adm06_vol0055_1f7d044d6a93435d9bf79c788a811e3e and /dev/exc/extravol_exa01adm06_vol0056_11b7c5feb9c74ca6b1e1e9b45578ea93 on exa01adm06. Take note of these block devices as you will require them to reference the customized images in your guest VMs.

  11. Alter the configuration of the Exadata guest VMs to use the customized images.

    To use a customized image in Exadata guest VMs, you must first define the VMs using OEDA as you would for any Exadata VM cluster. Then, before deploying the cluster, you must alter the VM definition in the Exadata XML configuration file using OEDACLI.

    Following is an example of the required command sequence. In the example:

    • exa01adm05vm01 and exa01adm06vm01 identify the guest VMs being altered.

      It is assumed that exa01adm05vm01 resides on the KVM host exa01adm05, and exa01adm06vm01 resides on exa01adm06.

      The command sequence assumes that the customized image is being used across two guests. However, you can extend this to any required number of guests.

    • The imagefile settings reference the block devices for the cloned image volumes on each KVM host (shown in the previous step).

      exa01adm05vm01 references volumes on the KVM host exa01adm05, where /dev/exc/goldvol_exa01adm05_vol0053_4bb5b73865774dcd8da0bec3ee73c176 is the system gold-image and /dev/exc/extravol_exa01adm05_vol0054_b804ab74ccd7400ca5aef861f588be54 is the extra volume image.

      exa01adm06vm01 references volumes on the KVM host exa01adm06, where /dev/exc/goldvol_exa01adm06_vol0055_1f7d044d6a93435d9bf79c788a811e3e is the system gold-image and /dev/exc/extravol_exa01adm06_vol0056_11b7c5feb9c74ca6b1e1e9b45578ea93 is the extra volume image.

    • The imagefileoption=ADDEXTRAEXCVOL setting adds an extra (non-standard) volume to the guest VM.

    • /root/cluster01-es.xml represents the path to the Exadata XML configuration file containing the VMs being altered.

    [root@exa01adm05 linux-x64]# cat ./update.cmd
    ALTER MACHINE imagefile=/dev/exc/goldvol_exa01adm05_vol0053_4bb5b73865774dcd8da0bec3ee73c176 where hostname=exa01adm05vm01
    SAVE ACTION
    MERGE ACTIONS
    
    ALTER MACHINE imagefileoption=ADDEXTRAEXCVOL imagefile=/dev/exc/extravol_exa01adm05_vol0054_b804ab74ccd7400ca5aef861f588be54 where hostname=exa01adm05vm01
    SAVE ACTION
    MERGE ACTIONS
    
    ALTER MACHINE imagefile=/dev/exc/goldvol_exa01adm06_vol0055_1f7d044d6a93435d9bf79c788a811e3e where hostname=exa01adm06vm01
    SAVE ACTION
    MERGE ACTIONS
    
    ALTER MACHINE imagefileoption=ADDEXTRAEXCVOL imagefile=/dev/exc/extravol_exa01adm06_vol0056_11b7c5feb9c74ca6b1e1e9b45578ea93 where hostname=exa01adm06vm01
    SAVE ACTION
    MERGE ACTIONS
    
    SAVE FILE
    
    [root@exa01adm05 linux-x64]# ./oedacli -c /root/cluster01-es.xml -f ./update.cmd
    Version : 260504
    SUCCESS - file loaded OK
    Customer : Example - Example
    processMerge
    processMergeActions
    Merging Action : ALTER MACHINE imagefile=/dev/exc/goldvol_exa01adm05_vol0053_4bb5b73865774dcd8da0bec3ee73c176 where hostname=exa01adm05vm01
    Merging ALTER MACHINE
    Action Validated and Merged OK
    processMerge
    processMergeActions
    Merging Action : ALTER MACHINE imagefileoption=ADDEXTRAEXCVOL imagefile=/dev/exc/extravol_exa01adm05_vol0054_b804ab74ccd7400ca5aef861f588be54 where hostname=exa01adm05vm01
    Merging ALTER MACHINE
    Action Validated and Merged OK
    processMerge
    processMergeActions
    Merging Action : ALTER MACHINE imagefile=/dev/exc/goldvol_exa01adm06_vol0055_1f7d044d6a93435d9bf79c788a811e3e where hostname=exa01adm06vm01
    Merging ALTER MACHINE
    Action Validated and Merged OK
    processMerge
    processMergeActions
    Merging Action : ALTER MACHINE imagefileoption=ADDEXTRAEXCVOL imagefile=/dev/exc/extravol_exa01adm06_vol0056_11b7c5feb9c74ca6b1e1e9b45578ea93 where hostname=exa01adm06vm01
    Merging ALTER MACHINE
    Action Validated and Merged OK
    File : /root/cluster01-es.xml saved OK 
    [root@exa01adm05 linux-x64]# 
  12. Deploy the Exadata guest VMs using the customized image.

    Use the OEDA deployment script (install.sh) to deploy the customized guest VMs. For example:

    [root@exa01adm05 linux-x64]# ./install.sh -cf /root/cluster01-es.xml -s 4
    Initializing
    ===== Executing Create Virtual Machine =====
    Checking Secure Fabric setup in [exa01celadm09.example.com, exa01celadm07.example.com, exa01celadm08.example.com]
    Checking status of remote files...
    Checking status of existing files on remote nodes...
    Getting status of local files...
    Creating KVM hosts vaults: sysvault_exa01adm06,sysvault_exa01adm05
    Vault sysvault_exa01adm06 was already created
    Vault sysvault_exa01adm05 was already created
    Creating EDV volumes and attachments...
    Setting up exascale on KVM hosts if not already setup
    Setting up exascale with lock on host: exa01adm05.example.com
    Setting up exascale with lock on host: exa01adm06.example.com
    Created 10 EDV volumes in 3163 mS
    Found 10 volume attachments
    Created EDV volume attachments in 3875 mS
    Successfully created EDV volumes and attachments.
    Creating guests for cluster Cluster-cluster01
    Creating KVM guests in cluster Cluster-cluster01
    File name is /EXAVMIMAGES/upgrade/linux-x64/WorkDir/exa01adm05vm01.example.com-vm.xml
    File name is /EXAVMIMAGES/upgrade/linux-x64/WorkDir/exa01adm06vm01.example.com-vm.xml
    Creating KVM guest using /EXAVMIMAGES/upgrade/linux-x64/WorkDir/exa01adm05vm01.example.com-vm.xml on node exa01adm05.example.com
    Creating KVM guest using /EXAVMIMAGES/upgrade/linux-x64/WorkDir/exa01adm06vm01.example.com-vm.xml on node exa01adm06.example.com
    KVM Guests created, waiting for guests to start...
    No config Keys in the configuration file..
    Creating databasemachine.xml for EM discovery
    Done Creating databasemachine.xml for EM discovery
    ===== Successfully completed execution of step Create Virtual Machine [elapsed Time [Elapsed = 314491 mS [5.0 minutes] Thu May 07 11:49:36 PDT 2026]] =====
    
    [root@exa01adm05 linux-x64]# 

    Note that the deployment does not specifically identify when customized images are used.

    To confirm that the customized images were used, examine the newly created guest VMs and verify that they contain the expected customizations. For example, the following confirms that guest VM exa01adm05vm01 has the new volume with the /extra file system:

    [root@exa01adm05 ~]# ssh -l root exa01adm05vm01
    root@exa01adm05vm01's password: 
    ...
    [root@exa01adm05vm01 ~]# df -h
    Filesystem                                                                                         Size  Used Avail Use% Mounted on
    devtmpfs                                                                                            40G     0   40G   0% /dev
    tmpfs                                                                                               41G  5.2M   41G   1% /run
    tmpfs                                                                                               41G     0   41G   0% /sys/fs/cgroup
    /dev/mapper/VGExaDbDomU-LVDbSys1                                                                    15G  3.0G   12G  21% /
    /dev/mapper/VGExaDbDomU-LVDbTmp                                                                    3.0G   54M  2.9G   2% /tmp
    /dev/sda1                                                                                          412M  170M  243M  42% /boot
    /dev/mapper/VGExaDbDomU-LVDbKdump                                                                   20G  175M   20G   1% /crashfiles
    /dev/mapper/vg_extra-lv_extra                                                                      200G  1.5G  199G   1% /extra
    /dev/mapper/VGExaDbDomU-LVDbVar1                                                                   2.0G  146M  1.8G   8% /var
    /dev/mapper/VGExaDbDomU-LVDbHome                                                                   4.0G   61M  3.9G   2% /home
    /dev/mapper/VGExaDbDomU-LVDbVarLog                                                                  18G  191M   18G   2% /var/log
    /dev/mapper/VGExaDbDomU-LVDbVarLogAudit                                                            924M   40M  885M   5% /var/log/audit
    tmpfs                                                                                               81G  4.0K   81G   1% /dev/shm
    /dev/mapper/VGExaDbDisk.scaqan08adm05vm04_u01_vol0042_f30f22cbc7c94b278b6426d726d9ce3c-LVDBDisk     18G  161M   18G   1% /u01
    /dev/mapper/VGExaDbDisk.scaqan08adm05vm04_gih01_vol0031_cc03aa825ac64dfcb52f67a95c7d1705-LVDBDisk   48G  3.1G   45G   7% /u01/app/23.0.0.0/grid
    /dev/mapper/VGExaDbDisk.scaqan08adm05vm04_dbh01_vol0041_e5f46b7535104263b1126520268d26f7-LVDBDisk   48G  8.6G   40G  18% /u01/app/oracle/product/23.0.0.0/dbhome_4
    tmpfs                                                                                              8.1G     0  8.1G   0% /run/user/0
    [root@exa01adm05vm01 ~]#