http://www.tokiwinter.com/adding-scsi-controller-scsi-disks-to-kvm-based-guests/
Following on from my previous
article I wanted to add a SCSI disk to a KVM-based guest (hostname: mars). The guest was installed via kickstart with
all volumes on /dev/vda
.
I’d
seen conflicting reports of SCSI support (the fact you can’t add the SCSI controller/disks through virt-manager
,
for example) so I wanted to create a SCSI disk and attach it to the host at /dev/sda
.
I first used my new best friend fallocate
to
fast-allocate the required image:
1 | # fallocate -l 20480M /var/lib/libvirt/images/mars-dev-sda.img |
Next, I created the appropriate XML configuration for the new disk device:
1
2
3
4
5
6
|
#
cat /var/tmp/mars-dev-sda.xml
<disk
type='file'
device='disk'>
<driver
name='qemu'
type='raw'
cache='none'/>
<source
file='/var/lib/libvirt/images/mars-dev-sda.img'/>
<target
dev='sda'/>
</disk>
|
Trying to attach this device via virsh
yielded
the following unpleasantness:
1 2 3 | # virsh attach-device --config mars /var/tmp/mars-dev-sda.xml error: Failed to attach device from /var/tmp/mars-dev-sda.xml error: internal error Unable to determine model for scsi controller |
OK – let’s jump onto the guest and see what’s going on. First, I installed lspci
and lsscsi
so that I could diagnose the issue …
1
|
#
yum install pciutils lsscsi
|
… and ran lspci
:
1 2 3 4 5 6 7 8 9 10 | # lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 00:02.0 VGA compatible controller: Cirrus Logic GD 5446 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device 00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:05.0 RAM memory: Red Hat, Inc Virtio memory balloon |
OK – so there is a SCSI controller available, but it’s for the virtio block devices. Looking at theRed Hat Documentation we need to add a SCSI controller of type virtio-scsi. This can also be confirmed by the lack of output from the following command:
1
|
#
virsh dumpxml mars | grep controller.*scsi
|
Let’s create a simple XML configuration file for our new SCSI controller:
1 2 | # cat /var/tmp/mars-scsi-controller.xml <controller type='scsi' model='virtio-scsi'/> |
And add it to our guest configuration:
1
|
#
virsh attach-device --config mars /var/tmp/mars-scsi-controller.xml
|
Dumping the guest domain’s XML should now show the controller added to the configuration:
1 2 | # virsh dumpxml mars | grep controller.*scsi <controller type='scsi' index='0' model='virtio-scsi'> |
On the guest, lspci
should show the new controller added:
1
2
3
4
5
6
7
8
9
10
11
|
#
lspci
00:00.0
Host
bridge:
Intel
Corporation
440FX
-
82441FX
PMC
[Natoma]
(rev
02)
00:01.0
ISA
bridge:
Intel
Corporation
82371SB
PIIX3
ISA
[Natoma/Triton
II]
00:01.1
IDE
interface:
Intel
Corporation
82371SB
PIIX3
IDE
[Natoma/Triton
II]
00:01.2
USB
controller:
Intel
Corporation
82371SB
PIIX3
USB
[Natoma/Triton
II]
(rev
01)
00:01.3
Bridge:
Intel
Corporation
82371AB/EB/MB
PIIX4
ACPI
(rev
03)
00:02.0
VGA
compatible
controller:
Cirrus
Logic
GD
5446
00:03.0
Ethernet
controller:
Red
Hat,
Inc
Virtio
network
device
00:04.0
SCSI
storage
controller:
Red
Hat,
Inc
Virtio
block
device
00:05.0
RAM
memory:
Red
Hat,
Inc
Virtio
memory
balloon
00:06.0
SCSI
storage
controller:
Red
Hat,
Inc
Device
1004
|
The controller appears as “Device 1004“. I was then able to add the disk device as an appropriate SCSI drive:
1 2 | # virsh attach-device --config mars /var/tmp/mars-dev-sda.xml Device attached successfully |
And on the guest, fdisk
proves it’s there:
1
2
3
4
5
6
7
8
|
#
fdisk -l /dev/sda
Disk
/dev/sda:
21.5
GB,
21474836480
bytes
64
heads,
32
sectors/track,
20480
cylinders
Units
=
cylinders
of
2048
*
512
=
1048576
bytes
Sector
size
(logical/physical):
512
bytes
/
512
bytes
I/O
size
(minimum/optimal):
512
bytes
/
512
bytes
Disk
identifier:
0x00000000
|
As does a quick probe with lsscsi
:
1
2
|
#
lsscsi
[2:0:0:0] disk QEMU
QEMU
HARDDISK 0.12 /dev/sda
|
As I like making things difficult for myself, I’ll be placing a btrfs
filesystem
on this and playing around with volumes – but that’s something for another article
It’s worth noting that whilst the VM configuration within virt-manager
shows
that there is now a SCSI controller associated with the guest, it still will not allow the creation of SCSI disks – you’ll need to use virsh
(at
least you will on virt-manager
version
0.9.0).