17 апр. 2017 г.

Как я реанимировал CISCO-2950

Установленный "на территории" коммутатор cisco catalyst 2950, в один прекрасный день, перестал подавать признаков жизни. По-этому бы оперативно доставлен для последующего ремонта.

При попытке загрузки я получил следующий вывод:
C2950 Boot Loader (C2950-HBOOT-M) Version 12.1(14)AZ, RELEASE SOFTWARE (fc2)
Compiled Tue 14-Oct-03 17:14 by antonino
WS-C2950T-48-SI starting...
Base ethernet MAC Address: 00:##:##:##:##:c0
Xmodem file system is available.
Initializing Flash...
flashfs[0]: 357 files, 6 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 7741440
flashfs[0]: Bytes used: 5703680
flashfs[0]: Bytes available: 2037760
flashfs[0]: flashfs fsck took 7 seconds.
...done initializing flash.
Boot Sector Filesystem (bs:) installed, fsid: 3
Parameter Block Filesystem (pb:) installed, fsid: 4
Loading "flash:/c2950-i6k2l2q4-mz.121-22.EA14.bin"...#####...######

File "flash:/c2950-i6k2l2q4-mz.121-22.EA14.bin" uncompressed and installed, entry point: 0x80010000
executing...

              Restricted Rights Legend

Use, duplication, or disclosure by the Government is
subject to restrictions as set forth in subparagraph
(c) of the Commercial Computer Software - Restricted
Rights clause at FAR sec. 52.227-19 and subparagraph
(c) (1) (ii) of the Rights in Technical Data and Computer
Software clause at DFARS sec. 252.227-7013.

           cisco Systems, Inc.
           170 West Tasman Drive
           San Jose, California 95134-1706



Cisco Internetwork Operating System Software 
IOS (tm) C2950 Software (C2950-I6K2L2Q4-M), Version 12.1(22)EA14, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2010 by cisco Systems, Inc.
Compiled Tue 26-Oct-10 10:35 by nburra
Image text-base: 0x80010000, data-base: 0x80680000


Initializing flashfs...
flashfs[1]: 357 files, 6 directories
flashfs[1]: 0 orphaned files, 0 orphaned directories
flashfs[1]: Total bytes: 7741440
flashfs[1]: Bytes used: 5703680
flashfs[1]: Bytes available: 2037760
flashfs[1]: flashfs fsck took 7 seconds.
flashfs[1]: Initialization complete.
Done initializing flashfs.
POST: System Board Test : Passed


=== Flushing messages (00:00:12 UTC Mon Mar 1 1993) ===

Buffered messages:
Queued messages:

 Signal 10, Exception code (0x001C)!

Frame 00: SP = 0x80CB7DB8    PC = 0x8067C654
Frame 01: SP = 0x80CB7DB8    PC = 0x802A9DFC
Frame 02: SP = 0x80CB7DD0    PC = 0x802A9B20
Frame 03: SP = 0x80CB7E10    PC = 0x802A9CF0
Frame 04: SP = 0x80CB7E88    PC = 0x802A9490
Frame 05: SP = 0x80CB7EB8    PC = 0x802AE990
Frame 06: SP = 0x80CB7EE8    PC = 0x802AEC48
Frame 07: SP = 0x80CB7F28    PC = 0x802AF118
Frame 08: SP = 0x80CB7F48    PC = 0x802AD5B8
Frame 09: SP = 0x80CB7F68    PC = 0x802AD938
Frame 10: SP = 0x80CB7FA0    PC = 0x802D86E4
Frame 11: SP = 0x80CB7FC8    PC = 0x801DB1EC
Frame 12: SP = 0x80CB7FE0    PC = 0x801DB290
Frame 13: SP = 0x80CB8008    PC = 0x801212BC
Frame 14: SP = 0x80CB8040    PC = 0x801214FC
Frame 15: SP = 0x80CB8150    PC = 0x801BF8D8


=== Crash Fault History ===

C2950 Software (C2950-I6K2L2Q4-M), Version 12.1(22)EA14, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Compiled Tue 26-Oct-10 10:35 by nburra
Signal = 10, Code = 0x1C, Uptime 00:00:12
r0: 00000000, AT: 00000000, v0: 80CB7DE0, v1: 00000001
a0: 00000001, a1: 40000050, a2: 00000000, a3: 40000050
t0: 80CB7DE0, t1: 80CB7DE0, t2: 802D6C80, t3: FFFF00FF
t4: 802D6C68, t5: FC7FFFFF, t6: E3FFFFFF, t7: 1FFFFFFF
s0: 80CB7DE0, s1: 80CB7EC8, s2: 80CB7EC8, s3: 808FCE44
s4: 00000000, s5: 00000002, s6: FFFFFFEF, s7: 80CB7E20
t8: 80CB7F10, t9: 00000000, k0: 00000000, k1: 00000000
gp: 80943600, sp: 80CB7DB8, s8: 00000001, ra: 802A9DFC
EPC: 8067C654, ErrEPC: 80C0411C, BadVA: 0x06800001, SREG: 1000E103
Cause: 0x0000201C (code 7): Data Bus Error exception

-Traceback= 8067C654 802A9DFC 802A9B20 802A9CF0 802A9490 802AE990 802AEC48 802AF118 802AD5B8 802AD938 802D86E4 801DB1EC 801DB290 801212BC 801214FC 801BF8D8

Как видно, оно падает на загрузке по какому-то крэшу.
Первое, что пришло на ум - проблема с flashfs. Как вариант - выполнить проверку.

Переходим в режим проверки:
0. Подключаемся через COM-порт.
1. Выключаем устройство.
2. Зажимаем клавишу MODE.
3. Включаем устройство, при этом MODE должна быть зажатой. Через секунд 5-10 на экране монитора появится приветствие switch:

Из доступных действий только:
    flash_init
    load_helper
    boot

flash_init - запустит инициализацию flash-памяти;
load_helper - не внёс ясности что именно делает, да и особо я не разбирался с ним;
boot - продолжит загрузку, но только если flashfs будет инициализирована.

Справку можно запросить командой ?, лично для меня странно, что этот пункт не отражен в меню:
           ? -- Present list of available commands
        boot -- Load and boot an executable image
         cat -- Concatenate (type) file(s)
        copy -- Copy a file
      delete -- Delete file(s)
         dir -- List files in directories
  flash_init -- Initialize flash filesystem(s)
      format -- Format a filesystem
        fsck -- Check filesystem consistency
        help -- Present list of available commands
 load_helper -- Load and initialize a helper image
      memory -- Present memory heap utilization information
       mkdir -- Create dir(s)
        more -- Concatenate (display) file(s)
      rename -- Rename a file
       reset -- Reset the system
       rmdir -- Delete empty dir(s)
         set -- Set or display environment variables
   set_param -- Set system parameters in flash
        trap -- Cause a software breakpoint to occur
        type -- Concatenate (type) file(s)
       unset -- Unset one or more environment variables
     version -- Display boot loader version

Как видим, функционал намного шире.
Инициализируем flash командой flash_init, только после этого мы сможем начать работать с flash памятью. Как и говорил, попробуем сделать проверку памяти с тестированием:
switch: fsck -test flash:/
Результат проверки:
Are you sure you want to fsck "flash:" (could take some time) (y/n)?y
flashfs[0]: testing block 0...erased 1 times
flashfs[0]: testing block 1...erased 1 times
...
flashfs[0]: testing block 60...erased 3 times
flashfs[0]: 357 files, 6 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 7741440
flashfs[0]: Bytes used: 5703680
flashfs[0]: Bytes available: 2037760

flashfs[0]: flashfs fsck took 494 seconds.


Для надежности, сделаем проверку без тестирования:
switch: fsck flash:/

Проверка длилась 7 секунд, после чего я дал команду reset и снова поймал crash.

Снова загрузился через кнопку MODE, инициировал flash память.
Из всех возможных причин сбоя остается только корявость файла-образа. Смотрим что там на flash:
switch: dir flash:/
Directory of flash://

2    -rwx  112       <date>               info
3    -rwx  3722814   <date>               c2950-i6k2l2q4-mz.121-22.EA14.bin
4    drwx  4416      <date>               html
331  -rwx  112       <date>               info.ver
332  -rwx  421       <date>               env_vars
333  -rwx  3495      <date>               config.text.renamed
334  -rwx  24        <date>               private-config.text.renamed
335  drwx  1536      <date>               crashinfo
336  -rwx  556       <date>               vlan.dat.renamed
337  -rwx  24        <date>               private-config.text
338  -rwx  856       <date>               vlan.dat
350  -rwx  7919      <date>               config.text

2037760 bytes available (5703680 bytes used)
Попытка копировать файл c2950-i6k2l2q4-mz.121-22.EA14.bin бесполезна, т.к. не хватит места для записи. Пришлось слить аналогичный файл с живой системы по tftp. Только получив 100% работающий файл, можно думать об удалении bin-файла из памяти (впрочем, если железка сдохла, то её уже ничто не убьет):
delete flash:/c2950-i6k2l2q4-mz.121-22.EA14.bin
Как обычно, система задаст глупый вопрос, удалять или нет - если нужно - отвечаем Y.

Теперь нужно залить ранее слитый с другого девайса файл. Т.к. нам доступен только xmodem, то так и поступим.
Работаю я в Ubuntu, мне нужен был minicom (есть в apt), для других систем нужно искать (для windows режим есть в гипертерминале).
В minicom после настройки портов, сохранения параметров и выбора конечного файла для отправки, только сразу не отправляем, переходим на cisco и даем команду:
copy xmodem: flash:c2950-i6k2l2q4-mz.121-22.EA14.bin
По сути сделаем подмену файла. По окончании операции делаем reset. Система запросит разрешения на перезагрузку.
В моем случае это решило проблему.

На что обратим внимание. Скорость для COM-порта я не изменял, она была 9600 (по дефолту), передача образа в 3 мегабайта заняла чуть больше часа. 

Необходима помощь - пишите.