October 4, 2021
SCSI Controller and Other VMware Controller Types
Storage controllers connect disk drives to a computer. There are different standards and types of storage controllers such as IDE, SATA, and SCSI controllers. In virtual machines, virtual storage controllers connect virtual and physical disks to these machines. There are different types of storage controllers available for VMware virtual machines to connect disks and CD/DVD drives. Each kind of storage controller has its own advantages and limitations, but this blog post focuses mostly on SCSI controllers. Then I compare SCSI controllers with other types of storage controllers that are available in VMware vSphere virtual machine settings to find out which storage controller would be the best for a given situation.
General Information About Storage Controllers
When you create a VMware vSphere VM, at least one virtual storage controller is created by default in the VM configuration. If a virtual disk and CD/DVD drive are connected to different storage controllers, then you can have two storage controllers after creating the VM. You can also add more storage controllers to connect disk drives when creating the VM.
When you create a virtual machine on an ESXi host by using VMware Host Client or VMware vSphere Client, or in VMware Workstation, the optimal storage controller is selected automatically to provide the best performance for the selected guest operating system. As we shall see, this makes selecting the appropriate guest OS in the VM creation wizard a very important task.
The importance of selecting the right storage controller cannot be emphasized enough. Newer storage controller types might not be supported in older operating systems. For that reason, the drivers included in the chosen guest OS should be taken into account in order to select the best default controller. Virtual machine hardware compatibility (VMware hardware version) and device type (virtual hard disk or DVD-ROM) are also important factors. Newer hardware versions support more storage controllers.
Before changing the storage controller used for a boot disk, you should ensure that the guest operating system (OS) supports this controller type and that the appropriate drivers are installed in the guest OS. When you connect storage devices to multiple storage controllers, input/output performance can be increased compared to connecting all disk drives to a single storage controller. Hence, if more than one SCSI controller is used for a VM, the recommended practice is to distribute virtual disks across these SCSI controllers for better performance.
Another reason to add a storage controller is when you exceed the maximum supported number of disk devices connected to a controller. In that case, how a new controller is added becomes important. Some controllers can be added to a VM configuration by using the hot-add feature. Other storage controller types require a cold operation, that is, powering off the VM first.
The default number of the first storage controller on a VM is 0. If you add a second storage controller, the assigned number is 1, etc. The controllers afterward are numbered sequentially. The numbering of storage devices connected to a storage controller similarly starts at 0. For example, if your VM has one storage controller and one virtual disk attached to this controller, the disk is numbered as (0:0). If you add a second virtual disk to the same controller, then the number is (0:1). If you connect another virtual disk to the second storage controller, the number of the disk is (1:1) in this case. The full name and number of the connection node contain the controller interface and the number of the controller and disk, for example, SCSI (0:0), SCSI (1:3), SATA (1:7), IDE (0:0), etc. SCSI (z:7) cannot be assigned in controller options because this number is reserved for a virtual device node.
Available VMware Storage Controllers
There are many types of storage controllers available. The types of storage controllers for VMware vSphere VMs are SCSI, IDE, AHCI SATA, and NVM Express (NVMe).
Within SCSI controllers, there are four sub-types:
- BusLogic Parallel
- LSI Logic Parallel
- LSI Logic SAS
- VMware Paravirtual SCSI
A maximum of four SCSI controllers are supported per VMware virtual machine. There is a 15-device limit for devices connected to a single SCSI controller.
This VMware SCSI controller was one of the first storage controller types emulated for VMware vSphere VMs. Older Windows versions contain a driver for this controller type by default and, for that reason, this controller can be used in VM configurations to install old versions of Windows on a VM (for example, Windows 2000). The BusLogic Parallel SCSI controller is now considered a legacy controller. Virtual machines with disks larger than 2 TB are not supported. Queue depth is limited to 1 by the driver, and this has an impact on performance. If you need higher performance for VM storage, consider using the LSI Logic Parallel SCSI storage controller.
LSI Logic Parallel
LSI Logic Parallel is formerly known as the LSI Logic SCSI controller. This is another VMware SCSI storage controller that has been available from the first versions of the VMware virtualization platform. The LSI Logic Parallel SCSI controller is also emulated and is supported by a high number of operating systems including old operating systems because they contain a driver for this storage controller by default. A queue depth of 32 is supported by these drivers, which has made this VMware SCSI controller a common choice and default selection for many guest operating systems. LSI Logic Parallel is selected by default when creating a Windows Server 2003 VM because this storage controller supports SCSI2 commands and Windows Server 2003 supports this SCSI standard.
LSI Logic SAS
The LSI Logic Parallel storage controller evolved into the LSI Logic SAS controller. Starting from Windows Server 2008, the LSI Logic SAS controller is selected by default when creating a new VM because LSI Logic SAS is compatible with SCSI3 commands and newer Windows operating systems also support the newer standard. Using this VMware SCSI controller is preferred in many cases.
Compatibility: ESXi 4.x or later.
VMware Paravirtual SCSI
Unlike the previous VMware SCSI controllers described in this blog post, this controller is virtualization-aware and supports high throughput. CPU load is lower compared to the emulated VMware storage controllers. There is no real hardware equivalent of the VMware paravirtual SCSI controller (PVSCI) and as such many operating systems (primarily older operating systems) don’t support this controller out of the box. The driver must be installed manually to make an OS work with the VMware paravirtual SCSI controller. This controller is adopted for high IOPS performance (input/output operations per second).
If there are snapshots for virtual disks that are connected to a paravirtual SCSI controller, or if memory is overcommitted on a host, then performance may be lower than expected when using this storage controller type for a VM.
Compatibility: ESXi 4.x or later. Windows Server 2003 or later are supported.
Note that changing the storage controller for a VMware VM when a guest operating system is installed can make existing virtual disks inaccessible if the needed driver is not installed on the guest OS. VMware Tools must be installed on the guest OS because VMware Tools contains the driver needed to work with the VMware paravirtual SCSI controller.
When you install Windows on a VM and a system disk is connected to the VMware paravirtual SCSI controller, you may need to insert a virtual floppy image that contains drivers and select the driver for the controller during installation to make Windows detect the installation disk.
To add the VMware paravirtual SCSI controller to a VM configuration you may need to add one of the highly supported SCSI controllers, such as LSI logic controller, install VMware Tools, power off the VM, add the VMware paravirtual SCSI controller to the VM configuration, and finally, attach a virtual disk to the VMware paravirtual SCSI controller (or change the existing storage controller type to the paravirtual SCSI controller).
This storage controller is new and has been available since VMware vSphere 5.5 with Virtual Hardware 10. You can connect a large amount of storage (including high-capacity virtual disks) to a VMware VM by using the AHCI SATA storage controller. SATA storage controllers can be used for boot disks to boot a guest operating system (OS). Make sure that the AHCI SATA controller is supported by an operating system. Performance is not as high as with PVSCI or LSI Logic controllers. It is better to use other controllers for running applications that are disk performance-sensitive. The SATA controller is usually used by default for the CD/DVD drive of a VM.
Compatibility: ESXi 5.5 or later virtual hardware compatibility. A maximum of four SATA controllers per VM are supported. The maximum number of storage devices that can be connected to a single SATA controller is 30 (0-29).
NVM Express or NVMe (Non-Volatile Memory) controller is a controller designed to work with SSD storage. The NVMe protocol is adopted for non-magnetic disks to provide the best performance and multi-queue communication. The NVMe protocol is supported in VMware vSphere and you can add the NVMe storage controller in VM configuration. The maximum number of queues is 65535 and the maximum queue depth is 64000.
Requirements: VMware vSphere 6.5 and VM hardware version 13. The guest OS must have NVMe support. A maximum of four NVMe controllers are supported, and 15 disks can be connected to a single NVMe controller (0-14).
IDE Storage Controllers
An emulated IDE storage controller is one of the oldest storage controller types. A maximum of one IDE controller can be connected to a virtual machine with four storage devices (two channels – primary and secondary, each with two devices – master and slave). Disk hot-add and resize is not supported. You need to shut down the VM to edit the disk configuration. IDE controllers use ATAPI.
The total number of disks you can connect to a VM is determined by controller type as displayed in the table below.
There are general recommendations to select a storage controller for configuring VMware vSphere VMs from the perspective of performance and compatibility.
If you are not sure which SCSI controller to use for your VM, follow this order (priority):
- VMware Paravirtual (PVCSI) (if supported by the guest OS)
- LSI Logic SAS (if supported by the guest OS)
- LSI Logic Parallel
- BusLogic Parallel (if nothing else works)
If you want to change the storage controller for a boot disk, you must ensure that the storage controller driver is installed in the boot mode. If a VM is configured to use BIOS, you may need to modify the VM configuration and BIOS settings. If a VM is configured to use UEFI, the options to change the storage controller for the boot disk are more flexible, and there is no additional setup in most cases.
Refer to the compatibility table to see whether the guest operating system can boot after changing the storage controller configuration for the VM.
See also the table with general recommendations of using different storage controller types for VMs and guest operating systems.
Configuration of VMware Storage Controllers
Now that we are familiar with the types of storage controllers available in VMware vSphere, let’s see how to edit storage controller settings in VMware vSphere Client. In my example, I have a VM with a default storage controller, and Ubuntu Linux is installed on this VM.
The Virtual machine.Configuration.Add or remove device privilege is required to edit the storage controller settings for a VM.
Open VMware vSphere Client, go to Hosts and Clusters, select the host needed, and select the virtual machine needed. Right-click the VM and in the menu that opens hit Edit Settings. You can also click Actions > Edit Settings.
Changing the controller type
In the Edit Settings window, I see that my VM uses SCSI controller 0 and the SCSI storage controller type is LSI Logic Parallel. Below, you can find SATA controller 0, which is used to connect a virtual CD/DVD drive to the VM. Click the SCSI controller to expand the options, then in the Change Type line, click the drop-down menu to change the type of the existing storage controller. Hit OK to save the settings. Remember that the VM and guest operating system must support the selected controller. This is especially important if a boot disk is connected to this storage controller.
Adding a new storage controller
In order to add a new storage controller to a VM configuration, in the Edit Settings window click Add New Device, and in the menu that opens select the needed controller (in the Controllers section). In my example, I can select NVMe Controller, SATA Controller, or SCSI Controller. Let’s add the SATA controller to the VM configuration.
Note: The USB controller should be added if you want to use a USB pass-through and connect a physical USB device (for example, a USB hard disk drive or flash drive) directly to a virtual machine (a USB device must be attached to a physical USB port of a host).
SATA controller 1 is added. Initially, the new controller is named as New SATA Controller. After you hit OK to save VM settings, the SATA storage controller name is saved as SATA controller 1.
Connecting a virtual disk to the storage controller
Let’s add a new virtual hard disk and connect this virtual disk to the SATA storage controller. In the Edit Settings window, click Add New Device > Hard Disk.
The new hard disk is now displayed in the VM configuration, but you need to configure the virtual disk options, such as disk size, thin or thick provisioning, and location, and select the needed storage controller in the Virtual Device Node options. You can also configure sharing options, disk mode, and IOPs limits if needed. After you click OK to save settings, the New Hard Disk name is saved as Hard Disk 2.
If you need to connect an existing virtual disk to another storage controller, follow the same principle - open VM settings, expand disk settings and edit the virtual device node options.
If I connect the new virtual hard disk to the SATA controller 0 to which the CD/DVD drive is connected, I can select SATA (0:1), SATA (0:2), or other (0:x) node except SATA (0:0) because the virtual DVD-ROM uses SATA (0:0). If I connect a new virtual disk to the new SATA controller 1, then I can select SATA (1:0), SATA (1:1), and any other free node on this storage controller.
Editing the VMX Configuration File
You can edit the SCSI controller type and other storage controller types for a VM by editing the VMX configuration file. This method is the alternative to editing the configuration in the GUI of VMware vSphere Client and can be used in the command-line interface. It is recommended that you use VMware vSphere Client in general and edit the VMX file manually only in exceptional cases.
Let’s explore the initial VMX configuration file of our Ubuntu VM before adding any additional storage controllers and virtual disks. In the configuration part displayed below, only lines related to storage configuration are displayed. The full configuration file also contains other settings, but I’ll skip them to focus only on storage configuration and storage controllers in this blog post.
config.version = "8"
virtualHW.version = "17"
vmci0.present = "TRUE"
scsi0.virtualDev = "lsilogic"
scsi0.present = "TRUE"
sata0.present = "TRUE"
scsi0:0.deviceType = "scsi-hardDisk"
scsi0:0.fileName = "blog-Ubuntu1.vmdk"
sched.scsi0:0.shares = "normal"
sched.scsi0:0.throughputCap = "off"
scsi0:0.present = "TRUE"
sata0:0.deviceType = "cdrom-raw"
sata0:0.clientDevice = "TRUE"
sata0:0.fileName = "emptyBackingString"
sata0:0.present = "TRUE"
displayName = "blog-Ubuntu1"
guestOS = "ubuntu-64"
The most interesting configuration lines are:
scsi0.virtualDev = "lsilogic" is the LSI Logic Parallel SCSI controller used to connect a virtual hard disk.
scsi0:0.deviceType = "scsi-hardDisk" is the type of storage device connected to SCSI (0:0).
scsi0:0.fileName = "blog-Ubuntu1.vmdk" is the name of the virtual disk file connected to the node SCSI (0:0).
After I added the second SATA storage controller and the second virtual disk connected to the SATA controller, the following lines were added to the VMX configuration file:
sata1.present = "TRUE"
sata1:0.fileName = "blog-Ubuntu1_1.vmdk"
sched.sata1:0.shares = "normal"
sched.sata1:0.throughputCap = "off"
sata1:0.present = "TRUE"
If we change the LSI Logic Parallel SCSI controller to the LSI Logic SAS in VM configuration, we should edit the line
scsi0.virtualDev = "lsilogic"
scsi0.virtualDev = "lsisas1068"
Let’s look at the VMX configuration parameters related to storage controllers including SCSI controllers. You may need to change 0, 0:0, and other values (x:x) to the appropriate values according to your VM configuration.
scsi0.present = "" – defines whether SCSI controller 0 is present (possible values are TRUE or FALSE).
scsi0:0.deviceType = "" is used to define the SCSI ID. Supported values are "scsi-hardDisk", "PhysicalDrive0", "rawDisk", "scsi-passthru", "scsi-nonpassThru-rdm", "scsi-passthru", "scsi-passthruscsi-passThru-rdm".
scsi0:0.fileName = "diskname.vmdk" – defines the file name of the virtual disk file attached to the defined virtual device node (SCSI(0:0) in this case). If a virtual disk file is located in the same directory, setting "diskname.vmdk" is enough. If the virtual disk file is located in another directory, you have to define the full path to the VMDK file.
sched.scsi0:0.throughputCap = "off" – bandwidth and throughput limits are disabled. An example for setting the limit for this parameter is sched.scsi0:0.throughputCap = 80IOPS, 10KIOps, 4GBps, etc.
scsi0:0.present = "" – defines whether the SCSI storage device is present. Can be TRUE or FALSE.
scsi0.virtualDev = "" - defines the type of the SCSI controller.
All supported values for the scsi0.virtualDev = "" parameter that defines the type of the SCSI controller:
- buslogic – BusLogic SCSI
- lsilogic – LSI Logic SCSI
- lsisas1068 – LSI Logic SAS
- pvscsi – VMware Paravirtual SCSI
You can use the processes explained in this blog post to edit the configuration of storage controllers for VMs running on VMware Workstation and VMware Player and connect storage devices to the storage controllers needed. You can also practice by configuring the VMware home lab in vSphere 6.7 and vSphere 7.
VMware storage controllers are used to connect storage devices such as virtual disks to virtual machines. This blog post looked at the types of virtual storage controllers including SATA, IDE, NVMe, and SCSI storage controllers as well as configuring these controllers in the GUI of the VMware vSphere client. The performance of a storage system and proper work of a guest operating system depend on selecting the correct controller type. By default, the optimal storage controller is selected in VM configuration, but you can always edit the VM settings and change or add another controller type.
Don’t forget to protect your VMware VMs and perform VMware backup on time. Download NAKIVO Backup & Replication and use the product to protect your virtual machines and other workloads. NAKIVO Backup & Replication supports VMware vSphere 7 for the backup and replication of VMs and contains a set of useful features to improve data protection speed and reliability.