mirror of
https://github.com/systemd/systemd.git
synced 2024-10-28 20:25:38 +03:00
cbb576b91d
> Hello, > > incremental to udev-016/extras/multipath, > > * don't rely on the linux symlink in the udev/klibc dir since > udev build doesn't use it anymore. This corrects build breakage > * remove make_dm_node fn & call. Rely on udev for this. > > The first patch is to be applied. > The second is conditioned by udev dealing correctly with devmap names. > > For this I can suggest a CALLOUT rule like this : > KERNEL="dm-[0-9]*", PROGRAM="/tmp/name_devmap %M %m", NAME="%k", > SYMLINK="%c" > > With name_devmap like : > #!/bin/sh > /usr/sbin/dmsetup ls|/bin/grep "$1, $2"|/usr/bin/awk '{print $1}' > ok I coded the suggested tool. it works with the following rule : KERNEL="dm-[0-9]*", PROGRAM="/sbin/devmap_name %M %m", NAME="%k", SYMLINK="%c" I don't know if it's right to keep this tools packaged with multipath because it's widely more general. Maybe Joe should merge it in the device-mapper package or provide the functionnality through dmsetup ?
91 lines
2.7 KiB
Plaintext
91 lines
2.7 KiB
Plaintext
Dependancies :
|
|
==============
|
|
|
|
o libdevmapper : comes with device-mapper-XXXX.tar.gz
|
|
See www.sistina.com
|
|
This lib has been dropped in the multipath tree
|
|
o libsysfs : comes with sysutils or udev
|
|
See ftp.kernel.org/pub/linux/utils/kernel/hotplug/
|
|
o Linux kernel 2.6.0 with udm5 patchset
|
|
http://people.sistina.com/~thornber/dm/
|
|
o udev
|
|
See ftp.kernel.org/pub/linux/utils/kernel/hotplug/
|
|
|
|
How it works :
|
|
==============
|
|
|
|
Fill the all_paths array. Each path store this info :
|
|
|
|
struct path {
|
|
char dev[FILE_NAME_SIZE];
|
|
char sg_dev[FILE_NAME_SIZE];
|
|
struct scsi_idlun scsi_id;
|
|
struct sg_id sg_id;
|
|
int state;
|
|
char wwid[WWID_SIZE];
|
|
};
|
|
|
|
scsi_id, sg_dev and sg_id are only really useful for 2.4
|
|
kernels, for which SG cmnds must go through sg devs.
|
|
In 2.5+ we have the nice opportunity to send SG cmnds
|
|
through SCSI bdevs.
|
|
|
|
For 2.4 compat, we pivot on idlun tupple to map sg devs
|
|
to SCSI bdevs.
|
|
|
|
2.4 does not do device enumeration, so we must scan a
|
|
defined number of sg devs and scsi bdevs. Good enough.
|
|
In 2.5+, we rely on libsysfs (sysutils) to access to
|
|
sysfs device enums.
|
|
|
|
the wwid is retrieved by a switch fonction. Only White
|
|
Listed HW can filled this field. For now every FC array
|
|
HW listed in kernel's devinfo.c is White Listed, assuming
|
|
the WWID is stored is the SCSI-3 standard 0x83 EVPD page.
|
|
|
|
When all_paths is filled, we coalesce the paths and store
|
|
the result in mp array. Each mp is a struct like this :
|
|
|
|
struct multipath {
|
|
char wwid[WWID_SIZE];
|
|
int npaths;
|
|
int pindex[MAX_MP_PATHS];
|
|
};
|
|
|
|
When mp is filled, the device maps are fed to the kernel
|
|
through libdevmapper.
|
|
|
|
The naming of the corresponding block device is handeld
|
|
by udev with the help of the devmap_name proggy. It is
|
|
called by the following rule in /etc/udev/udev.rules :
|
|
KERNEL="dm-[0-9]*", PROGRAM="/sbin/devmap_name %M %m", \
|
|
NAME="%k", SYMLINK="%c"
|
|
|
|
Notes :
|
|
=======
|
|
|
|
o On 2.4, make sure you have enough /dev/sg* nodes
|
|
(/dev/MAKEDEV if necesary). Same goes for /dev/sd*
|
|
|
|
o path coalescing relies on a path unique id being found.
|
|
This unique id, lacking a standard method, is vendor
|
|
specific. A switch function (get_unique_id) is present
|
|
and an example function is provided for storageworks
|
|
arrays (get_evpd_wwid). Feel free to enrich
|
|
with hardware you have at hand :)
|
|
|
|
o The kernel does NOT manage properly ghosts paths
|
|
with StorageWorks HW. Seems nobody cares after a load
|
|
of posts to linux-scsi.
|
|
|
|
o 2.4.21 version of DM does not like even segment size.
|
|
if you enconter pbs with this, upgrade DM.
|
|
|
|
Credits :
|
|
=========
|
|
|
|
o Heavy cut'n paste from sg_utils. Thanks goes to D.
|
|
Gilbert.
|
|
o Light cut'n paste from dmsetup. Thanks Joe Thornber.
|
|
o Greg KH for the nice sysfs API.
|