9.2. Adding storage devices to guests


This section covers adding storage devices to virtual machines. Additional storage can only be added after guests are created. The supported storage devices and protocol include:
  • local hard drive partitions,
  • logical volumes,
  • Fibre Channel or iSCSI directly connected to the host.
  • File containers residing in a file system on the host.
  • NFS file systems mounted directly by the virtual machine.
  • iSCSI storage directly accessed by the guest.
  • Cluster File Systems (GFS).
Adding file-based storage to a guest

File-based storage or file-based containers are files on the hosts file system which act as virtualized hard drives for virtual machines. To add a file-based container perform the following steps:

  1. Create an empty container file or using an existing file container (such as an ISO file).
    1. Create a sparse file using the dd command. Sparse files are not recommended due to data integrity and performance issues. Sparse files are created much faster and can used for testing but should not be used in production environments.
      Copy to Clipboard Toggle word wrap
      # dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M seek=4096 count=0
      
    2. Non-sparse, pre-allocated files are recommended for file-based storage images. Create a non-sparse file, execute:
      Copy to Clipboard Toggle word wrap
      # dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M count=4096
      
    Both commands create a 4GB file which can be used as additional storage for a virtual machine.
  2. Dump the configuration for the guest. In this example the guest is called Guest1 and the file is saved in the users home directory.
    Copy to Clipboard Toggle word wrap
    # virsh dumpxml Guest1 > ~/Guest1.xml
    
  3. Open the configuration file (Guest1.xml in this example) in a text editor. Find the <disk> elements, these elements describe storage devices. The following is an example disk element:
    Copy to Clipboard Toggle word wrap
    <disk type='file' device='disk'>
        <driver name='tap' type='aio'/>
        <source file='/var/lib/libvirt/images/Guest1.img'/>
        <target dev='xvda'/>
    </disk>
    
  4. Add the additional storage by duplicating or writing a new <disk> element. Ensure you specify a device name for the virtual block device attributes. These attributes must be unique for each guest configuration file. The following example is a configuration file section which contains an additional file-based storage container named FileName.img.
    Copy to Clipboard Toggle word wrap
    <disk type='file' device='disk'>
        <driver name='tap' type='aio'/>
        <source file='/var/lib/libvirt/images/Guest1.img'/>
        <target dev='xvda'/>
    </disk>
    <disk type='file' device='disk'>
        <driver name='tap' type='aio'/>
        <source file='/var/lib/libvirt/images/FileName.img'/>
        <target dev='hda'/>
    </disk>
    
  5. Restart the guest from the updated configuration file.
    Copy to Clipboard Toggle word wrap
    # virsh create Guest1.xml
    
  6. The following steps are Linux guest specific. Other operating systems handle new storage devices in different ways. For other systems, see your operating system's documentation.
    The guest now uses the file FileName.img as the device called /dev/sdb. This device requires formatting from the guest. On the guest, partition the device into one primary partition for the entire device then format the device.
    1. Press n for a new partition.
      Copy to Clipboard Toggle word wrap
      # fdisk /dev/sdb
      Command (m for help):
      
    2. Press p for a primary partition.
      Copy to Clipboard Toggle word wrap
      Command action
         e   extended
         p   primary partition (1-4)
      
    3. Choose an available partition number. In this example the first partition is chosen by entering 1.
      Copy to Clipboard Toggle word wrap
      Partition number (1-4): 1
    4. Enter the default first cylinder by pressing Enter.
      Copy to Clipboard Toggle word wrap
      First cylinder (1-400, default 1):
      
    5. Select the size of the partition. In this example the entire disk is allocated by pressing Enter.
      Copy to Clipboard Toggle word wrap
      Last cylinder or +size or +sizeM or +sizeK (2-400, default 400):
      
    6. Set the type of partition by pressing t.
      Copy to Clipboard Toggle word wrap
      Command (m for help): t
    7. Choose the partition you created in the previous steps. In this example, the partition number is 1.
      Copy to Clipboard Toggle word wrap
      Partition number (1-4): 1
    8. Enter 83 for a linux partition.
      Copy to Clipboard Toggle word wrap
      Hex code (type L to list codes): 83
    9. write changes to disk and quit.
      Copy to Clipboard Toggle word wrap
      Command (m for help): w 
      Command (m for help): q
    10. Format the new partition with the ext3 file system.
      Copy to Clipboard Toggle word wrap
      # mke2fs -j /dev/sdb1
      
  7. Mount the disk on the guest. Copy to Clipboard Toggle word wrap
    # mount /dev/sdb1 /myfiles
The guest now has an additional virtualized file-based storage device.
Adding hard drives and other block devices to a guest

System administrators use additional hard drives for to provide more storage space or to separate system data from user data. This procedure, Procedure 9.1, “Adding physical block devices to virtual machines”, describes how to add a hard drive on the host to a guest.

The procedure works for all physical block devices, this includes CD-ROM, DVD and floppy devices.

Warning

The host should not use disk labels to identify file systems in the fstab file, the initrd file or used by the kernel command line. If less privileged users, especially virtual machines, have write access to whole partitions or LVM volumes the host system could be compromised.
Guests should not be given write access to whole disks or block devices (for example, /dev/sdb). Virtual machines with access to block devices may be able to access other block devices on the system or modify volume labels which can be used to compromise the host system. Use partitions (for example, /dev/sdb1) or LVM volumes to prevent this issue.

Procedure 9.1. Adding physical block devices to virtual machines

  1. Physically attach the hard disk device to the host. Configure the host if the drive is not accessible by default.
  2. Configure the device with multipath and persistence on the host if required.
  3. Use the virsh attach command. Replace: myguest with your guest's name, /dev/sdb1 with the device to add, and sdc with the location for the device on the guest. The sdc must be an unused device name. Use the sd* notation for Windows guests as well, the guest will recognize the device correctly.
    Append the --type cdrom parameter to the command for CD-ROM or DVD devices.
    Append the --type floppy parameter to the command for floppy devices.
    Copy to Clipboard Toggle word wrap
    # virsh attach-disk myguest
    					/dev/sdb1
    					sdc --driver tap --mode readonly
    
  4. The guest now has a new hard disk device called /dev/sdb on Linux or D: drive, or similar, on Windows. This device may require formatting.
Volver arriba
Red Hat logoGithubredditYoutubeTwitter

Aprender

Pruebe, compre y venda

Comunidades

Acerca de la documentación de Red Hat

Ayudamos a los usuarios de Red Hat a innovar y alcanzar sus objetivos con nuestros productos y servicios con contenido en el que pueden confiar. Explore nuestras recientes actualizaciones.

Hacer que el código abierto sea más inclusivo

Red Hat se compromete a reemplazar el lenguaje problemático en nuestro código, documentación y propiedades web. Para más detalles, consulte el Blog de Red Hat.

Acerca de Red Hat

Ofrecemos soluciones reforzadas que facilitan a las empresas trabajar en plataformas y entornos, desde el centro de datos central hasta el perímetro de la red.

Theme

© 2025 Red Hat, Inc.