Device not ready errors with EMC Clariion storage but good LVM filters

Solution Verified - Updated

Environment

  • Red Hat Enterprise Linux 5.2 through 5.5
  • EMC Clariion storage (or presumably other active/passive storage)
  • Good LVM filters
  • ALUA not used as a path checker

Issue

  • Device not ready messages in the logs:

      Sep 20 17:42:25 hostname1 kernel: end_request: I/O error, dev sda, sector 0 
      Sep 20 17:42:25 hostname1 kernel: printk: 100 messages suppressed. 
      Sep 20 17:42:25 hostname1 kernel: Buffer I/O error on device sda, logical block 0 
      Sep 20 17:42:25 hostname1 kernel: sd 0:0:0:1: Device not ready: <6>: Current: sense key: Not Ready 
      Sep 20 17:42:25 hostname1 kernel:     Add. Sense: Logical unit not ready, manual intervention required 
    

Resolution

Diagnostic Steps

  • Make sure the LVM filter in lvm.conf is set to exlcude the underlying paths:

      filter = [ "a/dev/cciss/.*/", "a/dev/mapper/mpath.*/", "r/.*/" ]
    
  • Make sure the path checker in multipath.conf is not ALUA:

      path_checker            emc_clariion
    
  • Run systemtap script to see who/what is accessing drive(s)

    • Run: stap showio.stp -c "sleep 30" > t.log

    • File: showio.stp

        global filehandles[8192]
      
        probe ioblock.request {
            if (sector < 4) {
                printf("ioblock.bgn - device %s sector %d %s; process %s(%d)\n",
                        devname, sector, ((rw==BIO_READ)?"rd":"wr"),
                        execname(), pid() )
                print_backtrace()
            }
         }
         
         #
         # Track opened file handles...
         probe syscall.open.return {
           if ($return != -1) {
            filehandles[pid(), $return] = user_string($filename)
            printf("file opened: %s - %s(%d)\n", filehandles[pid(),$return], execname(), pid() )
           }
        }
        probe syscall.close {
          if ([pid(), $fd] in filehandles) {
            delete filehandles[pid(), $fd]
          }
        }
        probe syscall.read.return {
          if ($return <= 0) {
            if ([pid(), $fd] in filehandles) {
              printf( "syscall.read.return @%s::%d %s(%d)\n", filehandles[pid(), $fd], $return, execname(), pid() )
            }
         }
        }
      
    • Example output:

        ioblock.bgn - device sda sector 0 rd; process sysedge(10372)
        ioblock.bgn - device sdb sector 0 rd; process sysedge(10372)
        ioblock.bgn - device sdc sector 0 rd; process sysedge(10372)
        ioblock.bgn - device sdd sector 0 rd; process sysedge(10372)
        ioblock.bgn - device sde sector 0 rd; process sysedge(10372)
        ioblock.bgn - device sdk sector 0 rd; process sysedge(10372)
        ioblock.bgn - device sdl sector 0 rd; process sysedge(10372)
        ioblock.bgn - device sdm sector 0 rd; process sysedge(10372)
        ioblock.bgn - device sdn sector 0 rd; process sysedge(10372)
        ioblock.bgn - device sdo sector 0 rd; process sysedge(10372)        
      
    • Device sda is standby path device as seen in multipath output

        mpath0 (360060160b0cb1b00c8dd506ddbd0de11) dm-4 DGC,RAID 5
        size=25G][features=1 queue_if_no_path][hwhandler=1 emc][rw]
        \_ round-robin 0 [prio=2][active]
        \_ 0:0:1:0 sdf 8:80  [active][ready]
        \_ 1:0:1:0 sdp 8:240 [active][ready]
        \_ round-robin 0 [prio=0][enabled]
        \_ 0:0:0:0 sda 8:0   [active][ready]
        \_ 1:0:0:0 sdk 8:160 [active][ready]
      
SBR
Components
Category

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.