Skip to main content

How to Change SCSI Controller Type on Virtual Machine

Some of my virtual machines used ISL logical SCSI controller. It's not recommended for Red Hat 6 virtual machines. We need to change it to VMware Paravirtual SCSI controller.

Basically the steps is power off virtual machine, change the SCSI controller type, and power on. Then you lost operation system. :-)



You need trick to modify boot disk since changed SCSI controller is recognized as a new device, BIOS cannot found original boot device. It can also caused blue screen on Windows machine if proper driver is not installed prior to the changes.

Cannot boot up is always scared :-). But it safe if you take proper steps. Please make sure VMware Tools is up to date since it contains latest driver for SCSI controller. Then try change non-boot disk to new controller type and boot up, it can proves driver is working fine if you can see non-boot disk on guest OS.

The last step is change boot disk controller, select disk in BIOS in first boot up. This step is important, most failure caused by that.

More detail please refer to following links:
Configuring disks to use VMware Paravirtual SCSI (PVSCSI) adapters
Changing the virtual SCSI controller of a virtual machine

*** Chinese Version ***

最近遇到一些虚拟机在用ISL logical SCSI控制器,这种控制器是RedHat 6虚拟机不推荐的SCSI控制器类型,需要改成VMware Paravirtual SCSI控制器。

由于修改SCSI控制器会导致一系列的问题,比如系统把修改后的控制器认作新的设备导致BIOS无法找到启动盘、由于无法加在适用的驱动程序导致Windows系统蓝屏等。

无法引导系统确实是件比较吓人的事儿,但是如果你采用正确的步骤就会降低风险。首先需要确认VMware Tools是最新的,因为它含有最新的SCSI驱动程序。然后先尝试修改非启动盘的SCSI控制器类型并启动系统。这主要是为了证明SCSI驱动是否能够被系统正常加载,以及系统是否能识别出更改过类型的SCSI控制器。

最后一步是更改启动盘的控制器类型,并且在第一次启动时进入BIOS设定新的启动盘。这一步很重要,很多问题由此引起。

更多细节可以参考以下KB文档:
Configuring disks to use VMware Paravirtual SCSI (PVSCSI) adapters
Changing the virtual SCSI controller of a virtual machine

Popular posts from this blog

Connect-NsxtServer shows "Unable to connect to the remote server"

When you run Connect-NsxtServer in the PowerCLI, it may show "Unable to connect to the remote server".  Because the error message is a little bit confusing with other login issues. It's not easy to troubleshoot. The actual reason is the NSX-T uses a self-signed certificate, and the PowerCLI cannot accept the certificate automatically. The fix is super easy. You need to set the PowerCLI to ignore the invalid certificate with the following command: Set-PowerCLIConfiguration -Scope User -InvalidCertificateAction:Ignore -Confirm:$false

Setup Terraform and Ansible for Windows provisionon CentOS

Provisioning Windows machines with Terraform is easy. Configuring Windows machines with Ansible is also not complex. However, it's a little bit challenging to combine them. The following steps are some ideas about handling a Windows machine from provisioning to post configuration without modifying the winrm configuration on the guest operating system. Install required repos for yum. yum -y install https://repo.ius.io/ius-release-el7.rpm yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm yum -y install epel-release yum -y install yum-utils yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo Install  Terraform . sudo yum -y install terraform Install  Ansible . sudo yum -y install ansible Install  Kerberos . yum -y install gcc python-devel krb5-devel krb5-libs krb5-workstation

How to List All Users in Terraform Cloud

Terraform has a rich API. However, the API documentation does not mention how to list all users. We can leverage the organization membership API and the PowerShell command  Invoke-RestMethod  to get a user list. 1. Create an organization token in Terraform Cloud. 2. Create the token variable ( $Token ) in PowerShell. $Token = "abcde" 3. Create the API parameters variable in PowerShell. $params = @{ Uri = "https://app.terraform.io/api/v2/organizations/ZHENGWU/organization-memberships?page%5Bsize%5D=100" Authentication = "Bearer" Token = $Token ContentType = "application/vnd.api+json" } Note: You need to replace ZHENGWU with your own organization name. And I used 100 at the end of the URI to retrieve the first 100 users. It can be any number.  4. Retrieve the API return and list the user's email address. $Test = Invoke-RestMethod @params $Test.data.attributes.email