[dm-devel] Problems with multipathd

gistolero at gmx.de gistolero at gmx.de
Tue Sep 6 16:46:14 UTC 2005


Hi,

 > Also know the 0.4.5 snapshots are largely better suited to the task.
 > Consider upgrading.

Now, I use multipath-tools-0.4.5, udev-068 and device-mapper-1.01.03.


 > Lower the timeouts in your Qlogic driver.

===> I found some settings in /sys/module/qla2xxx/parameters/...,
but most of them are read-only values. I have changed ql2xretrycount
and ql2xsuspendcount but without success. Any suggestions for
this driver?


I.) --- udev and udevstart ---


 > Default udev.rules file has a directive to ignore dm-*
 > Something like :
 > KERNEL=="dm-[0-9]*", OPTIONS+="ignore_device"
 >
 > /etc/udev/rules.d/20-multipath.rules is useless unless you you comment
 > out this rule.

I have commented this line, but udev still has difficulties to create this
links. Therefore I have changed /etc/dev.d/block/multipath.dev (the script
is attached at the end of this post) and added debug messages. The most
important modification is that kpartx uses the block-device-files in
/dev/mapper/... instead of /dev/...
===> Why isn't that the default? Are there any disadvantages?


testhalde2 ~ # multipath /dev/sda
create: 150gb (3600508b40010079d0001900000460000)
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0
  \_ 0:0:0:1 sda 8:0  [ready]
  \_ 1:0:0:1 sdb 8:16 [ready]

testhalde2 ~ # multipath -ll
150gb (3600508b40010079d0001900000460000)
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [active]
  \_ 0:0:0:1 sda 8:0  [active][ready]
  \_ 1:0:0:1 sdb 8:16 [active][ready]

testhalde2 ~ # dmsetup table
150gb1: 0 64197 linear 254:0 63
150gb: 0 314572800 multipath 0 0 1 1 round-robin 0 2 1 8:0 1000 8:16 1000
150gb2: 0 314504505 linear 254:0 64260

testhalde2 ~ # ls -lF /dev/mapper/
total 0
brw-------  1 root root 254,  0 Sep  6 15:04 150gb
brw-------  1 root root 254,  1 Sep  6 15:04 150gb1
brw-------  1 root root 254,  2 Sep  6 15:04 150gb2
crw-rw----  1 root root  10, 63 Sep  6  2005 control

testhalde2 ~ # ls -lF /dev/1*
ls: /dev/1*: No such file or directory

testhalde2 ~ # udevstart

testhalde2 ~ # ls -lF /dev/1*
lrwxrwxrwx  1 root root 4 Sep  6 15:10 /dev/150gb -> dm-0
lrwxrwxrwx  1 root root 4 Sep  6 15:11 /dev/150gb1 -> dm-1
lrwxrwxrwx  1 root root 4 Sep  6 15:11 /dev/150gb2 -> dm-2


===> Without "udevstart" udev doesn't create the /dev/150gb*
links! Is this a udev bug?



II.) --- Using multipathd ---



testhalde2 ~ # multipathd -v4
testhalde2 ~ # ps ax | fgrep multipathd
11024 pts/1    SL     0:00 multipathd -v4
11025 pts/1    SL     0:00 multipathd -v4
11026 pts/1    SL     0:00 multipathd -v4
11029 pts/1    SL     0:00 multipathd -v4
11030 pts/1    SL     0:00 multipathd -v4
11031 pts/1    SL     0:00 multipathd -v4
11032 pts/1    SL     0:00 multipathd -v4
11071 pts/1    S+     0:00 fgrep multipathd
testhalde2 ~ # cat /var/run/multipathd.pid
11024

Yeah! Version 0.4.5 creates a pid and a socket file :-)
It's important that I start "multipath /dev/sda" _before_
multipathd! If I change this order, multipathd does nothing.
/var/log/messages shows "tick", "map garbage collection"
etc. and nothing about /dev/sda or /dev/sdb. It seems that
multipathd doesn't read the device-mapper table at startup.
===> Is this behavior ok?


testhalde2 ~ # less /var/log/messages
...
/etc/dev.d/multipath.dev (10904): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/dm-0, $ACTION=add, $@=block
/etc/dev.d/multipath.dev (10904): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (10904): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (10904): Getting /block/dm-0 major and minor number
/etc/dev.d/multipath.dev (10904): /block/dm-0 major:minor = 254:0
/etc/dev.d/multipath.dev (10904): Getting /block/dm-0 alias
/etc/dev.d/multipath.dev (10904): /block/dm-0 alias = /dev/mapper/150gb
/etc/dev.d/multipath.dev (10904): /sbin/kpartx -v -a /dev/mapper/150gb
/etc/dev.d/multipath.dev (10935): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/dm-1, $ACTION=add, $@=block
/etc/dev.d/multipath.dev (10935): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (10935): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (10935): Getting /block/dm-1 major and minor number
/etc/dev.d/multipath.dev (10935): /block/dm-1 major:minor = 254:1
/etc/dev.d/multipath.dev (10935): Getting /block/dm-1 alias
/etc/dev.d/multipath.dev (10963): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/dm-2, $ACTION=add, $@=block
/etc/dev.d/multipath.dev (10963): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (10963): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (10963): Getting /block/dm-2 major and minor number
/etc/dev.d/multipath.dev (10963): /block/dm-2 major:minor = 254:2
/etc/dev.d/multipath.dev (10963): Getting /block/dm-2 alias
/etc/dev.d/multipath.dev (10935): /block/dm-1 alias = /dev/mapper/150gb1
/etc/dev.d/multipath.dev (10935): /sbin/kpartx -v -a /dev/mapper/150gb1
/etc/dev.d/multipath.dev (10963): /block/dm-2 alias = /dev/mapper/150gb2
/etc/dev.d/multipath.dev (10963): /sbin/kpartx -v -a /dev/mapper/150gb2
multipathd: --------start up--------
multipathd: read /etc/multipath.conf
multipathd: fd0 blacklisted
...
multipathd: hda blacklisted
multipathd: path sda not found in pathvec
multipathd: ===== path sda =====
multipathd: bus = 1
multipathd: dev_t = 8:0
multipathd: size = 314572800
multipathd: vendor = HP
multipathd: product = HSV100
multipathd: rev = 3025
multipathd: h:b:t:l = 0:0:0:1
multipathd: tgt_node_name = 0x50001fe150051d20
multipathd: getuid = /sbin/scsi_id -g -u -s /block/%n (controler setting)
multipathd: uid = 3600508b40010079d0001900000460000 (callout)
multipathd: path sdb not found in pathvec
multipathd: ===== path sdb =====
multipathd: bus = 1
multipathd: dev_t = 8:16
multipathd: size = 314572800
multipathd: vendor = HP
multipathd: product = HSV100
multipathd: rev = 3025
multipathd: h:b:t:l = 1:0:0:1
multipathd: tgt_node_name = 0x50001fe150051d20
multipathd: getuid = /sbin/scsi_id -g -u -s /block/%n (controler setting)
multipathd: uid = 3600508b40010079d0001900000460000 (callout)
multipathd: dm-0 blacklisted
multipathd: dm-1 blacklisted
multipathd: dm-2 blacklisted
multipathd: discovered map 150gb
multipathd: *word = 0, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = round-robin, len = 11
multipathd: *word = 0, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 8:0, len = 3
multipathd: *word = 8:16, len = 4
multipathd: *word = 1, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 0, len = 1
multipathd: 8:0 ownership set
multipathd: 8:16 ownership set
multipathd: pgfailback = -2 (LUN setting)
multipathd: 150gb: event checker started
multipathd: path checkers start up
multipathd: tick
multipathd: ===== path sda =====
multipathd: bus = 1
multipathd: dev_t = 8:0
multipathd: size = 314572800
multipathd: vendor = HP
multipathd: product = HSV100
multipathd: rev = 3025
multipathd: h:b:t:l = 0:0:0:1
multipathd: tgt_node_name = 0x50001fe150051d20
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: path checker = tur (controler setting)
multipathd: 8:0: tur checker reports path is up
multipathd: 8:0: reinstated
multipathd: *word = 0, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = round-robin, len = 11
multipathd: *word = 0, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 8:0, len = 3
multipathd: *word = 8:16, len = 4
multipathd: *word = 1, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 0, len = 1
multipathd: ===== path sda =====
multipathd: getprio = /bin/true (internal default)
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: ===== path sdb =====
multipathd: getprio = /bin/true (internal default)
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: path prio refresh
multipathd: ===== path sda =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: ===== path sdb =====
multipathd: bus = 1
multipathd: dev_t = 8:16
multipathd: size = 314572800
multipathd: vendor = HP
multipathd: product = HSV100
multipathd: rev = 3025
multipathd: h:b:t:l = 1:0:0:1
multipathd: tgt_node_name = 0x50001fe150051d20
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: path checker = tur (controler setting)
multipathd: 8:16: tur checker reports path is up
multipathd: 8:16: reinstated
multipathd: *word = 0, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = round-robin, len = 11
multipathd: *word = 0, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 8:0, len = 3
multipathd: *word = 8:16, len = 4
multipathd: *word = 1, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 0, len = 1
multipathd: ===== path sda =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: ===== path sdb =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: path prio refresh
multipathd: ===== path sdb =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: map garbage collection
multipathd: tick
last message repeated 5 times
multipathd: map garbage collection
multipathd: tick
last message repeated 4 times
multipathd: 8:0: tur checker reports path is up
multipathd: 8:0: delay next check 20s
multipathd: path prio refresh
multipathd: ===== path sda =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: 8:16: tur checker reports path is up
multipathd: 8:16: delay next check 20s
multipathd: path prio refresh
multipathd: ===== path sdb =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: tick
multipathd: map garbage collection
multipathd: tick
last message repeated 5 times
multipathd: map garbage collection
multipathd: tick
last message repeated 5 times
multipathd: map garbage collection
multipathd: tick
last message repeated 5 times
multipathd: map garbage collection
multipathd: tick
multipathd: tick
multipathd: 8:0: tur checker reports path is up
multipathd: 8:0: delay next check 40s
multipathd: path prio refresh
multipathd: ===== path sda =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: 8:16: tur checker reports path is up
multipathd: 8:16: delay next check 40s
multipathd: path prio refresh
multipathd: ===== path sdb =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: tick
...



*** Disabling san-port from HBA-1... ***


testhalde2 ~ # multipath -ll
[ sleeping 35 seconds ]
150gb (3600508b40010079d0001900000460000)
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [active]
  \_ 0:0:0:1 sda 8:0  [active][faulty]
  \_ 1:0:0:1 sdb 8:16 [active][ready]

testhalde2 ~ # multipath -ll
[ sleeping 10 seconds ]
failed to open /dev/sda
150gb (3600508b40010079d0001900000460000)
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [active]
  \_ 0:0:0:1 sda 8:0  [failed][faulty]
  \_ 1:0:0:1 sdb 8:16 [active][ready]

testhalde2 ~ # multipath -ll
[ sleeping 10 seconds ]
failed to open /dev/sda
150gb (3600508b40010079d0001900000460000)
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [active]
  \_ 0:0:0:1 sda 8:0  [active][ready]
  \_ 1:0:0:1 sdb 8:16 [active][ready]


testhalde2 ~ # ls /sys/block/
dm-0  fd0    loop1  loop4  loop7  ram10  ram13  ram2  ram5  ram8
dm-1  hda    loop2  loop5  ram0   ram11  ram14  ram3  ram6  ram9
dm-2  loop0  loop3  loop6  ram1   ram12  ram15  ram4  ram7  sdb


testhalde2 ~ # dmsetup table
150gb1: 0 64197 linear 254:0 63
150gb: 0 314572800 multipath 0 0 1 1 round-robin 0 2 1 8:0 1000 8:16 1000
150gb2: 0 314504505 linear 254:0 64260


testhalde2 ~ # less /var/log/messages
...
kernel: qla2300 0000:03:01.0: LOOP DOWN detected.
multipathd: tick
...
kernel:  rport-0:0-3: blocked FC remote port time out: removing target
multipathd: 8:0: tur checker reports path is down
multipathd: checker failed path 8:0 in map 150gb
kernel: device-mapper: dm-multipath: Failing path 8:0.
multipathd: 150gb: devmap event #2
multipathd: 8:16: tur checker reports path is up
multipathd: 8:16: delay next check 40s
multipathd: path prio refresh
multipathd: ===== path sdb =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: discovered map 150gb
multipathd: *word = 0, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = round-robin, len = 11
multipathd: *word = 0, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 8:0, len = 3
multipathd: *word = 8:16, len = 4
multipathd: *word = 1, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = F, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 0, len = 1
multipathd: 8:0 ownership set
multipathd: 8:16 ownership set
multipathd: pgfailback = -2 (LUN setting)
/etc/dev.d/multipath.dev (11579): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sda/sda1, $ACTION=remove, $@=block
/etc/dev.d/multipath.dev (11579): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11579): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11579): Exiting: $ACTION != "add"
/etc/dev.d/multipath.dev (11571): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sda/sda2, $ACTION=remove, $@=block
/etc/dev.d/multipath.dev (11571): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11571): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11571): Exiting: $ACTION != "add"
/etc/dev.d/multipath.dev (11604): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sda, $ACTION=remove, $@=block
/etc/dev.d/multipath.dev (11604): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11604): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11604): Exiting: $ACTION != "add"
multipathd: tick
multipathd: map garbage collection
multipathd: tick
multipathd: tick
multipathd: Got request [dump pathvec]
multipathd: *word = dump, len = 4
multipathd: *word = pathvec, len = 7
multipathd: tick
last message repeated 3 times
multipathd: map garbage collection
multipathd: tick
last message repeated 3 times
multipathd: 8:0: tur checker reports path is up
multipathd: 8:0: reinstated
multipathd: *word = 0, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = round-robin, len = 11
multipathd: *word = 0, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 8:0, len = 3
multipathd: *word = 8:16, len = 4
multipathd: *word = 1, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 0, len = 1
multipathd: ===== path sda =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: ===== path sdb =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: path prio refresh
multipathd: ===== path sda =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: 150gb: devmap event #3
multipathd: discovered map 150gb
multipathd: *word = 0, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = round-robin, len = 11
multipathd: *word = 0, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = 8:0, len = 3
multipathd: *word = 8:16, len = 4
multipathd: *word = 1, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 2, len = 1
multipathd: *word = 0, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 1, len = 1
multipathd: *word = A, len = 1
multipathd: *word = 0, len = 1
multipathd: 8:0 ownership set
multipathd: 8:16 ownership set
multipathd: pgfailback = -2 (LUN setting)
kernel: scsi0 (0:1): rejecting I/O to dead device
multipathd: Got request [dump pathvec]
multipathd: *word = dump, len = 4
multipathd: *word = pathvec, len = 7
multipathd: tick
multipathd: tick
multipathd: map garbage collection
multipathd: tick
last message repeated 5 times
multipathd: map garbage collection
multipathd: tick
last message repeated 2 times
multipathd: 8:0: tur checker reports path is up
multipathd: 8:0: delay next check 20s
multipathd: path prio refresh
multipathd: ===== path sda =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
kernel: scsi0 (0:1): rejecting I/O to dead device
multipathd: tick
last message repeated 2 times
multipathd: map garbage collection
multipathd: tick
multipathd: Got request [dump pathvec]
multipathd: *word = dump, len = 4
multipathd: *word = pathvec, len = 7
multipathd: tick
last message repeated 4 times
multipathd: map garbage collection
multipathd: tick
last message repeated 5 times
multipathd: map garbage collection
multipathd: tick
last message repeated 3 times
multipathd: 8:16: tur checker reports path is up
multipathd: 8:16: delay next check 40s
multipathd: path prio refresh
multipathd: ===== path sdb =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: tick
multipathd: tick
multipathd: 8:0: tur checker reports path is up
multipathd: 8:0: delay next check 40s
multipathd: path prio refresh
multipathd: ===== path sda =====
multipathd: prio = 0
multipathd: uid = 3600508b40010079d0001900000460000 (cache)
multipathd: map garbage collection
kernel: scsi0 (0:1): rejecting I/O to dead device
multipathd: tick
...


===> First multipathd says "8:0: tur checker reports
path is down" and multipath prints sda "failed" (ok).
After a few seconds sda is "ready" and multipathd says
"8:0: tur checker reports path is up"?! I have changed
nothing during this time.




*** Enabling san-switch port from HBA-1 ***


testhalde2 ~ # multipath -ll
testhalde2 ~ # dmsetup table
150gb1: 0 64197 linear 254:0 63
150gb2: 0 314504505 linear 254:0 64260


testhalde2 ~ # less /var/log/messages
...
multipathd: tick
kernel: qla2300 0000:03:01.0: LIP reset occured (f7f7).
kernel: qla2300 0000:03:01.0: LOOP UP detected (2 Gbps).
...
kernel: SCSI device sdc: drive cache: write through
kernel:  sdc: sdc1 sdc2
kernel: Attached scsi disk sdc at scsi0, channel 0, id 0, lun 1
kernel: Attached scsi generic sg1 at scsi0, channel 0, id 0, lun 1,  type 0
scsi.agent[11856]: disk at /devices/pci0000:03/0000:03:01.0/host0/rport-0:0-3/target0:0:0/0:0:0:1
/etc/dev.d/multipath.dev (11909): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sdc, $ACTION=add, $@=block
/etc/dev.d/multipath.dev (11909): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11909): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11909): Checking/Creating multipath device-mapper table with multipath-tool
/etc/dev.d/multipath.dev (11909): multipath -v0 /dev/sdc
multipathd: Got request [dump pathvec]
multipathd: *word = dump, len = 4
multipathd: *word = pathvec, len = 7
multipathd: tick
multipathd: tick
multipathd: Got request [dump pathvec]
multipathd: *word = dump, len = 4
multipathd: *word = pathvec, len = 7
multipathd: tick
last message repeated 2 times
multipathd: map garbage collection
kernel: device-mapper: dm-multipath: error getting device
kernel: device-mapper: error adding target to table
/etc/dev.d/multipath.dev (11944): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sdc/sdc2, $ACTION=add, $@=block
/etc/dev.d/multipath.dev (11944): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11944): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11959): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sdc/sdc1, $ACTION=add, $@=block
/etc/dev.d/multipath.dev (11959): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11959): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11959): Checking/Creating multipath device-mapper table with multipath-tool
/etc/dev.d/multipath.dev (11959): multipath -v0 /dev/sdc1
multipathd: Got request [dump pathvec]
multipathd: *word = dump, len = 4
multipathd: *word = pathvec, len = 7
logger: /etc/dev.d/multipath.dev (11944): Checking/Creating multipath device-mapper table with multipath-tool
logger: /etc/dev.d/multipath.dev (11944): multipath -v0 /dev/sdc2
multipathd: Got request [dump pathvec]
multipathd: *word = dump, len = 4
multipathd: *word = pathvec, len = 7
multipathd: tick
last message repeated 2 times
multipathd: Got request [dump pathvec]
multipathd: *word = dump, len = 4
multipathd: *word = pathvec, len = 7
multipathd: tick
multipathd: tick
kernel: device-mapper: dm-multipath: error getting device
kernel: device-mapper: error adding target to table
kernel: device-mapper: device doesn't appear to be in the dev hash table.
multipathd: tick
multipathd: map garbage collection
multipathd: 150gb: remove dead map
multipathd: 150gb: reap event checker
multipathd: 8:0 is orphaned
multipathd: 8:16 is orphaned
multipathd: SIGHUP received
multipathd: tick
multipathd: tick
/etc/dev.d/multipath.dev (12002): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/dm-3, $ACTION=remove, $@=block
/etc/dev.d/multipath.dev (12002): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (12002): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (12002): Exiting: $ACTION != "add"
/etc/dev.d/multipath.dev (12018): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/dm-4, $ACTION=remove, $@=block
/etc/dev.d/multipath.dev (12018): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (12018): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (12018): Exiting: $ACTION != "add"
multipathd: tick
...


===> An error occurs while device-mapper tries to update
the dm-table and deletes the "150gb" entry.



III.) --- Using multipath-tools without multipath ---



Now, I try the same _without_ starting multipathd...


testhalde2 ~ # ps ax | fgrep multipathd
testhalde2 ~ #

testhalde2 ~ # multipath /dev/sda
create: 150gb (3600508b40010079d0001900000460000)
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0
  \_ 0:0:0:1 sda 8:0  [ready]
  \_ 1:0:0:1 sdb 8:16 [ready]

testhalde2 ~ # multipath -ll
150gb ()
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [active]
  \_ 0:0:0:1 sda 8:0  [active][ready]
  \_ 1:0:0:1 sdb 8:16 [active][ready]

testhalde2 ~ # dmsetup table
150gb1: 0 64197 linear 254:0 63
150gb: 0 314572800 multipath 0 0 1 1 round-robin 0 2 1 8:0 1000 8:16 1000
150gb2: 0 314504505 linear 254:0 64260

testhalde2 ~ # ls /dev/mapper/
150gb  150gb1  150gb2  control


*** Disabling san-switch port from HBA-1 ***


testhalde2 ~ # multipath -ll
[ sleeping 35 seconds ]
150gb ()
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [active]
  \_ 0:0:0:1 sda 8:0  [active][faulty]
  \_ 1:0:0:1 sdb 8:16 [active][ready]

testhalde2 ~ # multipath -ll
[ sleeping 10 seconds ]
150gb ()
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [active]
  \_ #:#:#:#      8:0 [active]
  \_ 1:0:0:1 sdb 8:16 [active][ready]

testhalde2 ~ # ls /sys/block/
dm-0  fd0    loop1  loop4  loop7  ram10  ram13  ram2  ram5  ram8
dm-1  hda    loop2  loop5  ram0   ram11  ram14  ram3  ram6  ram9
dm-2  loop0  loop3  loop6  ram1   ram12  ram15  ram4  ram7  sdb

testhalde2 ~ # dmsetup table
150gb1: 0 64197 linear 254:0 63
150gb: 0 314572800 multipath 0 0 1 1 round-robin 0 2 1 8:0 1000 8:16 1000
150gb2: 0 314504505 linear 254:0 64260


testhalde2 ~ # less /var/log/messages
...
kernel: qla2300 0000:03:01.0: LOOP DOWN detected.
kernel:  rport-0:0-3: blocked FC remote port time out: removing target
/etc/dev.d/multipath.dev (11186): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sda/sda1, $ACTION=remove, $@=block
/etc/dev.d/multipath.dev (11186): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11186): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11186): Exiting: $ACTION != "add"
/etc/dev.d/multipath.dev (11200): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sda/sda2, $ACTION=remove, $@=block
/etc/dev.d/multipath.dev (11200): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11200): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11200): Exiting: $ACTION != "add"
/etc/dev.d/multipath.dev (11217): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sda, $ACTION=remove, $@=block
/etc/dev.d/multipath.dev (11217): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11217): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11217): Exiting: $ACTION != "add"
...



*** Enabling san-switch port from HBA-1 ***


testhalde2 ~ # multipath -ll
[ sleeping 5 seconds ]
150gb ()
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [active]
  \_ #:#:#:#      8:0  [active]
  \_ 1:0:0:1 sdb 8:16 [active][ready]

testhalde2 ~ # multipath -ll
150gb ()
[size=150 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [enabled]
  \_ 1:0:0:1 sdb 8:16 [active][ready]
  \_ 0:0:0:1 sdc 8:32 [active][ready]

testhalde2 ~ # dmsetup table
150gb1: 0 64197 linear 254:0 63
150gb: 0 314572800 multipath 0 0 1 1 round-robin 0 2 1 8:16 1000 8:32 1000
150gb2: 0 314504505 linear 254:0 64260

testhalde2 ~ # ls /dev/mapper/
150gb  150gb1  150gb2  control


testhalde2 ~ # less /var/log/messages
...
kernel:  sdc: sdc1 sdc2
kernel: Attached scsi disk sdc at scsi0, channel 0, id 0, lun 1
kernel: Attached scsi generic sg1 at scsi0, channel 0, id 0, lun 1,  type 0
scsi.agent[11271]: disk at /devices/pci0000:03/0000:03:01.0/host0/rport-0:0-3/target0:0:0/0:0:0:1
/etc/dev.d/multipath.dev (11325): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sdc, $ACTION=add, $@=block
/etc/dev.d/multipath.dev (11325): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11325): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11325): Checking/Creating multipath device-mapper table with multipath-tool
/etc/dev.d/multipath.dev (11325): multipath -v0 /dev/sdc
/etc/dev.d/multipath.dev (11356): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sdc/sdc2, $ACTION=add, $@=block
/etc/dev.d/multipath.dev (11356): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11356): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11356): Checking/Creating multipath device-mapper table with multipath-tool
/etc/dev.d/multipath.dev (11356): multipath -v0 /dev/sdc2
/etc/dev.d/multipath.dev (11377): Parameters: $0=/etc/dev.d/block/multipath.dev, $DEVPATH=/block/sdc/sdc1, $ACTION=add, $@=block
/etc/dev.d/multipath.dev (11377): Logging to local file is enabled: log file is /root/multipath.dev.log
/etc/dev.d/multipath.dev (11377): Logging to syslog ist enabled: facility.priority is daemon.info
/etc/dev.d/multipath.dev (11377): Checking/Creating multipath device-mapper table with multipath-tool
/etc/dev.d/multipath.dev (11377): multipath -v0 /dev/sdc1
...


VI.) --- Summary ---


===> Multipathing seems to work without but not with multipathd.
It's very slow, but Christophe Varoqui wrote that I have to lower
the HBA timeouts (unfortunately, I don't know how to do this,
see above). Does I really need multipathd? I suppose so :-)



 > And consider updating the wiki FAQ with the response you found to be
 > enlightening :/

As soon as I have running multipath I will write a step-by-step
documentation.


Thanks again for your help,
Simon



#--- My /etc/dev.d/block/multipath.dev - Begin ---

#!/bin/sh

# log to local file? (0 or 1)
# (print log file with "sort $logFile [| less]")
logToFile=1

# log to syslog? (0 or 1)
logToSyslog=1

# path to log file
# (only used if $logToFile==1)
logFile="/root/multipath.dev.log"

# syslog facility.priority (man syslog.conf)
# (only used if $logToSyslog==1)
syslogFacPrio="daemon.info"

# timeout for getting ${DEVPATH} alias in seconds
timeout=10

# be verbose in log file and/or syslog?
# (only used if $logToFile==1 and/or $logToSyslog==1)
verbose=1

# Don't touch
pid=$$
logCount=1;

log()
{
   if [ ${logToFile} -eq 1 ]
   then
     msg="PID ${pid} - $(date +%Y%m%d-%H%M%S) -"
     msg="${msg} Log entry ${logCount}: ${1}"
     echo "${msg}" >> $logFile
     logCount=$(($logCount + 1))
   fi

   if [ ${logToSyslog} -eq 1 ]
   then
     logger -p ${syslogFacPrio} "/etc/dev.d/multipath.dev (${pid}): ${1}"
   fi
}

  die()
{
   log "DIED WITH ERROR: ${1}"
   exit 1
}

exe()
{
   log "${1}"
   if ! ${1}
   then
     die "\"${1}\" failed (device blacklisted?)"
   fi
}

end()
{
   if [ ! -z ${1} ]
   then
     log "${1}"
   fi
   exit 0
}

if [ ${verbose} -eq 1 ]
then
   msg="Parameters: \$0=${0}, \$DEVPATH=${DEVPATH},"
   msg="${msg} \$ACTION=${ACTION}, \$@=${@}"
   log "${msg}"

   if [ ${logToFile} -eq 1 ]
   then
     log "Logging to local file is enabled: log file is ${logFile}"
   fi

   if [ ${logToSyslog} -eq 1 ]
   then
     msg="Logging to syslog is enabled:"
     msg="${msg} facility.priority is ${syslogFacPrio}"
     log "${msg}"
   fi
fi

if [ ! "${ACTION}" = add ]
then
   if [ ${verbose} -eq 1 ]
   then
     log "Exiting: \$ACTION != \"add\""
   fi
   end
fi

if [ "${DEVPATH:7:3}" = "dm-" ]
then
   log "Getting ${DEVPATH} major and minor number"
   devMajorMinor=$(</sys${DEVPATH}/dev)
   if [ -z ${devMajorMinor} ]
   then
     die "Getting ${DEVPATH} major and minor number failed"
   else
     log "${DEVPATH} major:minor = ${devMajorMinor}"
   fi

   log "Getting ${DEVPATH} alias"
   count=0
   devAlias="none"
   while [ ! -b ${devAlias} ] && [ ${count} -le ${timeout} ]
   do
     devAlias="/dev/mapper/$(devmap_name ${devMajorMinor})"
     if [ ${count} -ne 0 ]
     then
       sleep 1
     fi
     count=$(($count + 1))
   done

   if [ ${count} -gt ${timeout} ]
   then
     msg="Getting ${DEVPATH} alias failed (Found ${devAlias}, but"
     msg="${msg} this isn't a block device)"
     die "${msg}"
   else
     log "${DEVPATH} alias = ${devAlias}"
   fi

   exe "/sbin/kpartx -v -a ${devAlias}"

else
   log "Checking/Creating multipath device-mapper table with multipath-tool"
   exe "multipath -v0 ${DEVNAME}"
fi

#--- /etc/dev.d/block/multipath.dev - End ---

-- 

Simon
gistolero at gmx.de




More information about the dm-devel mailing list