VM disques à chaud

Voir vm_creation_fs_lvm_a_chaud

Quelques commandes bien pratiques pour prendre en compte les manipulations à chaud des disques SCSI sous Linux :

La commande suivante permet de rescanner un disque SCSI dont la taille a été modifiée à chaud dans la console Vmware. Il est alors possible d'agrandir une partition existante ou d'en créer une nouvelle sur un disque qui était plein.

# Obsolète ? echo "1" > /sys/class/scsi_device/<device>/device/rescan

La commande suivante permet d'ajouter un disque à chaud dans une machine virtuelle. Attention, le numéro de device change en fonction de l'emplacement du disque dans la chaine (ici, le 1 indique que l'on a ajouté un deuxième disque, ce numéro sera à incrémenter en fonction du nombre de disque déjà présent)

# Obsolète ? #echo "scsi add-single-device" 0 0 1 0 > /proc/scsi/scsi #echo "scsi add-single-device" 0 0 3 0 > /proc/scsi/scsi echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/scsi_host/host1/scan echo "- - -" > /sys/class/scsi_host/host2/scan

lvmdiskscan |grep sd

/dev/sda1 [ 509.84 MB]

/dev/sda2 [ 19.50 GB] LVM physical volume
/dev/sdb [ 20.00 GB] LVM physical volume
/dev/sdc [ 20.00 GB] LVM physical volume
/dev/sdd [ 20.00 GB] LVM physical volume
/dev/sde [ 20.00 GB] LVM physical volume
#echo "scsi add-single-device" 0 0 5 0 > /proc/scsi/scsi
#lvmdiskscan |grep sd
/dev/sda1 [ 509.84 MB]
/dev/sda2 [ 19.50 GB] LVM physical volume
/dev/sdb [ 20.00 GB] LVM physical volume
/dev/sdc [ 20.00 GB] LVM physical volume
/dev/sdd [ 20.00 GB] LVM physical volume
/dev/sde [ 20.00 GB] LVM physical volume
/dev/sdf [ 40.00 GB]

Voir http://www.tldp.org/HOWTO/archived/SCSI-Programming-HOWTO/SCSI-Programming-HOWTO-4.html

Device Mapping

These device files are dynamically mapped to SCSI id/LUNs on your SCSI bus (LUN = logical unit). The mapping allocates devices consecutively for each LUN of each device on each SCSI bus found at time of the SCSI scan, beginning at the lower LUNs/ids/buses. It starts with the first SCSI controller and continues without interruption with all following controllers. This is currently done in the initialisation of the SCSI driver.

For example, assuming you had three SCSI devices hooked up with ids 1, 3, and 5 on the first SCSI bus (each having one LUN), then the following mapping would be in effect:

/dev/sga -> SCSI id 1
/dev/sgb -> SCSI id 3
/dev/sgc -> SCSI id 5

If you now add a new device with id 4, then the mapping (after the next rescan) will be:

/dev/sga -> SCSI id 1
/dev/sgb -> SCSI id 3
/dev/sgc -> SCSI id 4
/dev/sgd -> SCSI id 5

Notice the change for id 5 -- the corresponding device is no longer mapped to /dev/sgc but is now under /dev/sgd.

Luckily newer kernels allow for changing this order.

Dynamically insert and remove SCSI devices

If a newer kernel and the /proc file system is running, a non-busy device can be removed and installed 'on the fly'.

To remove a SCSI device:

echo "scsi remove-single-device a b c d" > /proc/scsi/scsi

and similar, to add a SCSI device, do

echo "scsi add-single-device a b c d" > /proc/scsi/scsi

where

a == hostadapter id (first one being 0)
b == SCSI channel on hostadapter (first one being 0)
c == ID
d == LUN (first one being 0)

So in order to swap the /dev/sgc and /dev/sgd mappings from the previous example, we could do

echo "scsi remove-single-device 0 0 4 0" > /proc/scsi/scsi
echo "scsi remove-single-device 0 0 5 0" > /proc/scsi/scsi
echo "scsi add-single-device 0 0 5 0" > /proc/scsi/scsi
echo "scsi add-single-device 0 0 4 0" > /proc/scsi/scsi

since generic devices are mapped in the order of their insertion.

When adding more devices to the scsi bus keep in mind there are limited spare entries for new devices. The memory has been allocated at boot time and has room for 2 more devices.