Results 1 to 2 of 2

Thread: Solaris 10, x86, amrestore: Error reading Amanda header.

  1. #1

    Unhappy Solaris 10, x86, amrestore: Error reading Amanda header.

    I have a set of LTO4 tapes, created with Amanda 2.6.1 on a RHEL 5.2 server, using a 2048K (2MB) block size. The tapes could successfully be restored on that server.

    Now the tape library has been moved to a Solaris 10, x86 server with Amanda 2.6.1. I need to restore the data from those tapes. However, no matter what blocksize I try to use, I get:

    Code:
    # amrestore -b 2097152 -p /dev/rmt/0bn no-such-host
    amrestore: Error reading volume label: Error reading Amanda header.
    I used 'truss' to verify amrestore was using the specified blocksize:
    Code:
    7958:   open64("/dev/rmt/0bn", O_RDWR)                  = 4
    7958:   fcntl(4, F_SETFD, 0x00000001)                   = 0
    7958:   ioctl(4, (('m'<<8)|1), 0x08046948)              = 0
    7958:   ioctl(4, (('m'<<8)|2), 0x08046930)              = 0
    7958:   time()                                          = 1242312225
    7958:   time()                                          = 1242312225
    7958:   ioctl(4, (('m'<<8)|1), 0x08046960)              = 0
    7958:   brk(0x08076370)                                 = 0
    7958:   brk(0x08276370)                                 = 0
    7958:   read(4, 0x08075298, 2097152)                    Err#12 ENOMEM
    7958:   time()                                          = 1242312295
    7958:   time()                                          = 1242312295
    7958:   ioctl(4, (('m'<<8)|1), 0x08046960)              = 0
    7958:   write(10, " 1 2 4 2 3 1 2 2 9 5 . 0".., 88)     = 88
    7958:   write(10, " 1 2 4 2 3 1 2 2 9 5 . 0".., 165)    = 165
    7958:   write(10, " 1 2 4 2 3 1 2 2 9 5 . 0".., 106)    = 106
    7958:   fstat64(2, 0x08045790)                          = 0
    7958:   write(2, " a m r e s t o r e", 9)               = 9
    7958:   write(2, " :  ", 2)                             = 2
    7958:   write(2, " E r r o r   r e a d i n".., 57)      = 57
    7958:   write(2, "\n", 1)                               = 1
    7958:   _exit(2)
    I also tried reading from the tape with 'dd' and got the similar results:

    Code:
    $ sudo truss -f -o ./truss.out dd bs=2097152 if=/dev/rmt/0bn of=/dev/null
    read: Not enough space
    0+0 records in
    0+0 records out
    It looks like anything that tries to read from a tape device gets ENOMEM returned from read() at any blocksize.

    Code:
    7987:   open64("/dev/rmt/0bn", O_RDONLY)                = 3
    7987:   creat64("/dev/null", 0666)                      = 4
    7987:   sysconfig(_CONFIG_PAGESIZE)                     = 4096
    7987:   brk(0x08065EA8)                                 = 0
    7987:   brk(0x08265EA8)                                 = 0
    7987:   schedctl()                                      = 0xFEFF4000
    7987:   sigaction(SIGINT, 0x08047BC0, 0x08047C40)       = 0
    7987:   sigaction(SIGINT, 0x08047BC0, 0x08047C40)       = 0
    7987:   read(3, 0x08065000, 2097152)                    Err#12 ENOMEM
    7987:   open("/usr/lib/locale/en_US.UTF-8/LC_MESSAGES/SUNW_OST_OSLIB.mo", O_RDONLY) Err#2 ENOENT
    7987:   write(2, " r e a d", 4)                         = 4
    7987:   write(2, " :  ", 2)                             = 2
    7987:   write(2, " N o t   e n o u g h   s".., 16)      = 16
    7987:   write(2, "\n", 1)                               = 1
    7987:   open("/usr/lib/locale/en_US.UTF-8/LC_MESSAGES/SUNW_OST_OSCMD.mo", O_RDONLY) Err#2 ENOENT
    7987:   fstat64(2, 0x08046F10)                          = 0
    7987:   write(2, " 0 + 0", 3)                           = 3
    7987:   write(2, "   r e c o r d s   i n\n", 12)        = 12
    7987:   write(2, " 0 + 0", 3)                           = 3
    7987:   write(2, "   r e c o r d s   o u t".., 13)      = 13
    7987:   _exit(2)
    This server has 32GB of RAM and it's almost entirely free. The server is essentially idle except for my attempts to get Amanda working. Amrestore does other large reads from files as it is loading without ENOMEM errors, it only errors when performing reads on the tape device.

    There is a tape loaded, it is one of the previously tested good tapes. I have tried several known good tapes to be sure.

    Code:
    $ mt status
    IBM Ultrium Gen 4 LTO tape drive:
       sense key(0x0)= No Additional Sense   residual= 0   retries= 0
       file no= 0   block no= 0
    $ sudo truss -f -o ./truss.out dd bs=32k if=/dev/rmt/0bn of=/dev/null
    read: Not enough space
    0+0 records in
    0+0 records out
    $ mt status
    IBM Ultrium Gen 4 LTO tape drive:
       sense key(0x0)= No Additional Sense   residual= 0   retries= 0
       file no= 0   block no= 1
    So my question is, has anyone seen this ENOMEM problem when trying to read tapes on Solaris before?
    Last edited by bschneiders; May 14th, 2009 at 07:05 AM. Reason: Accidently hit submit before I was done typing.

  2. #2
    Join Date
    Mar 2007
    Location
    Chicago, IL
    Posts
    688

    Default

    This sounds like a Solaris kernel parameter that should be adjusted. I'm no Solaris admin, so I have no idea what that might be.

    You may want to try asking on the amanda-users list -- there are a number of sharp Solaris folks there who may be able to help out.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •