修改磁盘驱动

介绍如何修改虚拟机磁盘的驱动。

介绍

默认情况下,虚拟机的磁盘驱动是 scsi 的,这种驱动在 Linux 虚拟机内部看到的磁盘就是 ‘/dev/sd’ 开头的块设备。可以通过一些命令设置磁盘的驱动,比如 Windows 虚拟机在没有安装 virtio 驱动的时候,只能使用 ide 驱动的方式启动。

查看虚拟机磁盘驱动

首先通过 server-disk-list 命令查看虚拟机所有磁盘的驱动,比如虚拟机的名称是 vm1 。

# server-disk-list 命令查看虚拟机和关联磁盘的关系
#   --details: 显示详细信息
#   --server: 指定对应的虚拟机名称或者 ID
#   --scope system: 表示显示系统里面所有资源
$ climc server-disk-list --details --server vm1 --scope system
+--------------------------------------+-------+--------------------------------------+-------------------------------+-----------+--------+------------+-------+--------+-----------+--------------+
|               Guest_ID               | Guest |               Disk_ID                |             Disk              | Disk_size | Driver | Cache_mode | Index | Status | Disk_type | Storage_type |
+--------------------------------------+-------+--------------------------------------+-------------------------------+-----------+--------+------------+-------+--------+-----------+--------------+
| 84090287-9dc5-4d6b-854d-24f99ad6f170 | vm1   | 968d9285-6353-4bce-8a6f-bf540efad3f5 | data-disk                     | 10240     | scsi   | none       | 1     | ready  | data      | local        |
| 84090287-9dc5-4d6b-854d-24f99ad6f170 | vm1   | 5448ea7d-5c64-47a2-847d-06060e187a47 | vdisk-vm1-1624970026002516731 | 30720     | scsi   | none       | 0     | ready  | sys       | local        |
+--------------------------------------+-------+--------------------------------------+-------------------------------+-----------+--------+------------+-------+--------+-----------+--------------+

其中 Index 为 0 表示虚拟机的第一块磁盘,对应到 Linux 系统里面的 ‘/dev/sda’,Driver 表示对应驱动为 scsi,Disk_type 为 sys 表示系统盘。

Index 为 1 表示第二块磁盘,对应 Linux 系统里面的 ‘/dev/sdb’,驱动也为 scsi ,Disk_type 为 data 表示数据盘。

修改驱动

通过 server-disk-update 命令更新虚拟机上的磁盘驱动。

先看下 server-disk-update 命令的帮助信息。

$ climc server-disk-update --help
Usage: climc server-disk-update [--cache {writethrough,none,writeback}] [--aio {native,threads}] [--index INDEX] [--driver {virtio,ide,scsi,pvscsi}] <SERVER> <DISK>

Update details of a virtual disk of a virtual server

Positional arguments:
    <SERVER>
        ID or Name of server
    <DISK>
        ID or Name of Disk

Optional arguments:
    # 对应 qemu/kvm 虚拟机磁盘 cache mode
    [--cache {writethrough,none,writeback}]
        Cache mode of vDisk
    # 对应 qemu/kvm 虚拟机磁盘的 aio
    [--aio {native,threads}]
        Asynchronous IO mode of vDisk
    # 磁盘索引顺序
    [--index INDEX]
        Index of vDisk
    # 对应 qemu/kvm 虚拟机磁盘 driver
    [--driver {virtio,ide,scsi,pvscsi}]
        Driver of vDisk

从帮助信息可以看到支持的 driver 为 virtio, ide, scsi 或者 pvscsi ,请根据自己的需要进行选择。

# 把虚拟机 vm1 的系统盘 5448ea7d-5c64-47a2-847d-06060e187a47 驱动改为 virtio
$ climc server-disk-update --driver virtio vm1 5448ea7d-5c64-47a2-847d-06060e187a47

# 查看记录,发现已经改成 virtio 了
$ climc server-disk-list --details --server vm1 --scope system | grep 5448ea7d-5c64-47a2-847d-06060e187a47
| 84090287-9dc5-4d6b-854d-24f99ad6f170 | vm1   | 5448ea7d-5c64-47a2-847d-06060e187a47 | vdisk-vm1-1624970026002516731 | 30720     | virtio | none       | 0     | ready  | sys       | local        |

修改了磁盘驱动后,需要重启虚拟机才能生效,使用 server-stop 和 server-start 命令重启虚拟机 vm1 。

# 停止虚拟机
$ climc server-stop vm1

# 调用 server-list 查看虚拟机状态,等到状态变为 ready
$ climc server-list --search vm1 --scope system
+--------------------------------------+------+--------------+---------+------------+-----------+-----------+-----------------------------+------------+---------+-----------+
|                  ID                  | Name | Billing_type | Status  | vcpu_count | vmem_size | Secgrp_id |         Created_at          | Hypervisor | os_type | is_system |
+--------------------------------------+------+--------------+---------+------------+-----------+-----------+-----------------------------+------------+---------+-----------+
| 84090287-9dc5-4d6b-854d-24f99ad6f170 | vm1  | postpaid     | ready   | 1          | 1024      | default   | 2021-06-29T12:33:45.000000Z | kvm        | Linux   | false     |
+--------------------------------------+------+--------------+---------+------------+-----------+-----------+-----------------------------+------------+---------+-----------+

# 启动虚拟机
$ climc server-start vm1

# 之后再重复查看虚拟机状态,知道变为 running

然后通过前端的 vnc 或者 ssh 登录虚拟机,用 lsblk 之类的磁盘工具查看磁盘,发现里面的磁盘块设备名称已经从 ‘/dev/sda’ 变成 ‘/dev/vda’ 了。

[cloudroot@vm1 ~]$ lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom  
vda    253:0    0   30G  0 disk 
├─vda1 253:1    0    1M  0 part 
├─vda2 253:2    0  512M  0 part /boot
└─vda3 253:3    0 29.5G  0 part /