Введение
В некоторых случаях в результате некорректных действий при обновлении ПО на сервисных маршрутизаторах ESR может возникнуть проблемы с загрузкой ПО (firmware), вторичного загрузчика (u-boot) или даже первичного загрузчика (x-loader). Именно для таких случаев будет необходимо подготовить и использовать загрузочную SD-карту по инструкции описанной в данной статье.
Ограничения
Данная инструкция актуальна для следующих моделей ESR:
- ESR-100
- ESR-200
- ESR-1000
- ESR-1200
- ESR-1500
- ESR-1511
Необходимые файлы
Для подготовки загрузочной SD-карты потребуются следующие файлы в зависимости от модели маршрутизатора:
Модель | HW-версия | Имя директории <DIR> | Первичный загрузчик <xload-file> | Вторичный загрузчик <uboot-file> | Основное ПО <firmware-file> |
---|---|---|---|---|---|
ESR-100 | все | esr200 | esr200-1.X.Y-buildZZZ.xload | esr200-1.X.Y-buildZZZ.uboot | esr200-1.X.Y-buildZZZ.firmware |
ESR-200 | все | esr200 | esr200-1.X.Y-buildZZZ.xload | esr200-1.X.Y-buildZZZ.uboot | esr200-1.X.Y-buildZZZ.firmware |
ESR-1000 | 1v0 - 1v6 | esr1000 | esr1000-1.X.Y-buildZZZ.xload | esr1000-1.X.Y-buildZZZ.uboot | esr1000-1.X.Y-buildZZZ.firmware |
1v7 - 2vX | esr1000 | esr1000-1.X.Y-buildZZZ.1v7.xload | esr1000-1.X.Y-buildZZZ.uboot | esr1000-1.X.Y-buildZZZ.firmware | |
ESR-1200 | все | esr1200 | esr1200-1.X.Y-buildZZZ.xload | esr1200-1.X.Y-buildZZZ.uboot | esr1200-1.X.Y-buildZZZ.firmware |
ESR-1500 | все | esr15xx | esr15xx-1.X.Y-buildZZZ.xload | esr15xx-1.X.Y-buildZZZ.uboot | esr15xx-1.X.Y-buildZZZ.firmware |
ESR-1511 | все | esr15xx | esr15xx-1.X.Y-buildZZZ.xload | esr15xx-1.X.Y-buildZZZ.uboot | esr15xx-1.X.Y-buildZZZ.firmware |
В таблице Выше приведены шаблоны имён файлов, которые далее по тексту будут упоминаться как <xload-file>, <uboot-file> и <firmware-file>.
Архив с актуальными файлами ПО и загрузчиков можно скачать на официальном сайте компании https://eltex-co.ru/ выбрав:
"Продукты" ---> "Сервисные маршрутизаторы" ---> <Выбрать необходимую модель> ---> Вкладка "Документы и файлы" ---> Столбец "Программное обеспечение"
Необходимое программное обеспечение на персональном компьютере (ПК)
Для подготовки загрузочной SD-карты по данной инструкции потребуется:
- Операционная система Linux любой сборки
- Терминальная программа (встроенный терминал, terminator или любая аналогичная)
- Утилита для разметки диска в терминале: fdisk
- Утилита для форматирования разделов: mkfs.vfat из пакета dosfstools
- Утилита для побитного копирования файлов: dd
Алгоритм создания образа
1. Подключить SD-карту к ПК
Для этого можно использовать либо штатный разём для SD-карт либо Card-reader подключаемый к USB-разъёму ПК.
2. Определить идентификатор подключенной SD-карты
Для выполнения данного шага необходимо в терминальной программе запустить утилиту fdisk с ключём "-l"
user@PC:~$ sudo fdisk -l [sudo] пароль для user: password ...... Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип /dev/sdc1 62 7563 7502 3,7M 83 Linux /dev/sdc2 7564 1006011 998448 487,5M b W95 FAT32
В примере выше, подключенная SD-карта определена как /dev/sdc
3. Создать необходимые разделы на SD-карте
3.1. В терминальной программе запустить утилиту fdisk в качестве ключа используя идентификатор подключенной SD-карты. Проверить текущие разметку и разделы на SD-карте.
user@PC:~$ sudo fdisk /dev/sdc
[sudo] пароль для user:
Добро пожаловать в fdisk (util-linux 2.31.1).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.Будьте внимательны, используя команду write.
Команда (m для справки): p
Диск /dev/sdc: 14,4 GiB, 15485370368 байт, 30244864 секторовЕдиницы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байтРазмер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos Идентификатор диска: 0x00000000Устр-во
Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sdc1 62 7563 7502 3,7M 83 Linux/dev/sdc2 7564 1006011 998448 487,5M b W95 FAT32
Команда (m для справки):
Вместо /dev/sdc необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
3.2. Создать новую разметку диска типа DOS. Проверить текущую разметку на SD-карте.
Команда (m для справки): o
Создана новая метка DOS с идентификатором 0x2868c887.Команда (m для справки): p
Диск /dev/sdc: 14,4 GiB, 15485370368 байт, 30244864 секторовЕдиницы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos Идентификатор диска: 0x2868c887
3.3. Создать первый раздел размеров в 1МБ без указания типа файловой системы. Проверить текущие разметку и разделы на SD-карте.
Команда (m для справки): n
Тип раздела p основной (0 первичный, 0 расширеный, 4 свободно)
e расширенный (контейнер для логических разделов)Выберите (по умолчанию - p): p
Номер раздела (1-4, по умолчанию 1): 1Первый сектор (2048-30244863, по умолчанию 2048): 2048
Последний сектор + число секторов или + размер{K,M,G,T,P} (2048-30244863, по умолчанию 30244863): +1MСоздан новый раздел 1 с типом 'Linux' и размером 1 MiB.
Команда (m для справки): p
Диск /dev/sdc: 14,4 GiB, 15485370368 байт, 30244864 секторовЕдиницы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байтРазмер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dosИдентификатор диска: 0x2868c887
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип/dev/sdc1 2048 4095 2048 1M 83 Linux
Вводимые в данном разделе числовые значения ("Первый сектор" и "Последний сектор") должны чётко соответствовать значениям указанным в примере выше.
3.4. Создать второй раздел, размер 100 МБ, тип файловой системы - FAT32. Проверить текущие разметку и разделы на SD-карте.
Команда (m для справки): n
Тип раздела
p основной (1 первичный, 0 расширеный, 3 свободно)
e расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p): p
Номер раздела (2-4, по умолчанию 2): 2
Первый сектор (4096-30244863, по умолчанию 4096): 4096
Последний сектор + число секторов или + размер{K,M,G,T,P} (4096-30244863, по умолчанию 30244863): +100M
Создан новый раздел 2 с типом 'Linux' и размером 100 MiB.
Команда (m для справки): t
Номер раздела (1,2, по умолчанию 2): 2
Шестнадцатеричный код (введите L для получения списка кодов): b
Тип раздела 'Linux' изменен на 'W95 FAT32'.
Команда (m для справки): p
Диск /dev/sdc: 14,4 GiB, 15485370368 байт, 30244864 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x2868c887
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sdc1 2048 4095 2048 1M 83 Linux
/dev/sdc2 4096 208895 204800 100M b W95 FAT32
Вводимые в данном разделе числовые значение "Первый сектор" должно чётко соответствовать значению указанному выше.
Размер раздела может отличаться от 100МБ. Но меньше его делать не рекомендуется т.к. может не хватить места для записи необходимых файлов, а больше - также бессмысленно т.к. кроме ПО для одной модели ESR туда копировать не нужно.
3.5. Сохранить изменения разметки SD-карты.
Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.
user@PC:~$
4. Отформатировать второй раздел носителя в FAT32
user@PC:~$ sudo mkfs.vfat -F 32 /dev/sdc2
[sudo] пароль для user: password
mkfs.fat 4.1 (2017-01-24)
user@PC:~$
Вместо /dev/sdc необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
5. Записать первичный загрузчик в первый раздел SD-карты
user@PC:~$ sudo dd if=<xload-file> of=/dev/sdc bs=512 seek=2 && sync
[sudo] пароль для user: password
244+1 записей получено244+1 записей отправлено
124976 bytes (125 kB, 122 KiB) copied, 0,0753591 s, 1,7 MB/s
user@PC:~$
Вместо /dev/sdc необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <xload-file> необходимо использовать путь и имя файла актуального первичного загрузчика для той модели ESR, для которой создается данная загрузочная SD-карта. Имена файлов соответствующие переменным указаны в таблице в разделе Необходимые файлы.
6. Создать во втором разделе директорию с названием модели ESR и скопировать в неё загрузчики и образ основного ПО
user@PC:~$ mkdir temp
user@PC:~$ sudo mount /dev/sdc2 temp
user@PC:~$ sudo mkdir temp/<DIR>
user@PC:~$ sudo cp <xload-file> temp/<DIR>/xload.bin
user@PC:~$ sudo cp <uboot-file> temp/<DIR>/u-boot.bin
user@PC:~$ sudo cp <firmware-file> temp/<DIR>/firmware
user@PC:~$ sudo ls -lh temp/<DIR>
итого 57M
-rwxr-xr-x 1 root root 56M мая 28 11:36 firmware
-rwxr-xr-x 1 root root 824K мая 28 11:36 u-boot.bin
-rwxr-xr-x 1 root root 123K мая 28 11:36 xload.bin
Вместо /dev/sdc необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <DIR> необходимо использовать имя папки указанное в таблице Необходимые файлы в соответствии с моделью ESR, для которой создается данная загрузочная SD-карта.
Вместо переменной <xload-file> необходимо использовать путь и имя файла актуального первичного загрузчика для той модели ESR, для которой создается данная загрузочная SD-карта.
Вместо переменной <uboot-file> необходимо использовать путь и имя файла актуального вторичного загрузчика для той модели ESR, для которой создается данная загрузочная SD-карта.
Вместо переменной <firmware-file> необходимо использовать путь и имя файла актуального ПО для той модели ESR, для которой создается данная загрузочная SD-карта.
Имена файлов соответствующие переменным указаны в таблице в разделе Необходимые файлы.
7. Отмонтировать второй раздел и удалим временную директорию
user@PC:~$ sudo umount temp
user@PC:~$ sudo rm -r temp
Получившуюся SD-карту можно использовать для загрузки сервисного маршрутизатора ESR и обновления/восстановления загрузчиков и основного ПО.
Инструкция по восстановлению загрузчиков описана в статье: Восстановление программного обеспечения на сервисных маршрутизаторах ESR-100/200/1000/1200/1500/1511 с загрузкой с SD-карты
Алгоритм копирования загрузочной SD-карты в файл
После создания загрузочной SD-карты есть возможность сохранить её образ в файл на ПК. Это может потребоваться для передачи образа другим сотрудникам или для быстрого разворачивания образа на SD-карту в случае повторения проблемы с загрузкой маршрутизатора.
1. Подключить SD-карту к ПК
Для этого можно использовать либо штатный разём для SD-карт либо Card-reader подключаемый к USB-разъёму ПК.
2. Определить идентификатор подключенной SD-карты
Для выполнения данного шага необходимо в терминальной программе запустить утилиту fdisk с ключём "-l"
user@PC:~$ sudo fdisk -l [sudo] пароль для user: password ...... Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип /dev/sdc1 62 7563 7502 3,7M 83 Linux /dev/sdc2 7564 1006011 998448 487,5M b W95 FAT32
В примере выше, подключенная SD-карта определена как /dev/sdc
3. Произвести побитное копирование содержимого всей SD-карты в файл на ПК
user@PC:~$ sudo dd if=/dev/sdc of=<file-name>.iso bs=1M count=102 status=progress; sync
81788928 bytes (82 MB, 78 MiB) copied, 2 s, 40,5 MB/s
102+0 записей получено
102+0 записей отправлено
106954752 bytes (107 MB, 102 MiB) copied, 2,66469 s, 40,1 MB/s
user@PC:~$
Вместо /dev/sdc необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <file-name> необходимо использовать путь и имя файла сохраняемого образа. В имени файла желательно отобразить всю ключевую информацию относящуюся к данному образу, такую как модель ESR'а и версия ПО. Например "recovery_esr200_1_20_4"
Необходимо учитывать, что в примере выше использованы параметры для сохранения образа SD-карты размер второго раздела которой не превышает 100МБ.
Если второй раздел созданной SD-карты более 100МБ, необходимо в качестве аргумента ключа "count" указывать количество мегабайт во втором разделе и приплюсовать еще 2 блока по 1МБ (указано в качестве аргумента ключа "bs").
Алгоритм загрузки образа загрузочной SD-карты на носитель
1. Подключить SD-карту к ПК
Для этого можно использовать либо штатный разъём для SD-карт либо Card-reader подключаемый к USB-разъему ПК.
2. Определить идентификатор подключенной SD-карты
Для выполнения данного шага необходимо в терминальной программе запустить утилиту fdisk с ключём "-l"
user@PC:~$ sudo fdisk -l [sudo] пароль для user: password ...... Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип /dev/sdc1 62 7563 7502 3,7M 83 Linux /dev/sdc2 7564 1006011 998448 487,5M b W95 FAT32
В примере выше, подключенная SD-карта определена как /dev/sdc
3. Распаковать образ на подключенную SD-карту
user@PC:~$ sudo dd if=<file-name>.img of=/dev/sdc status=progress; sync 103690752 bytes (104 MB, 99 MiB) copied, 18 s, 5,8 MB/s 208896+0 записей получено 208896+0 записей отправлено 106954752 bytes (107 MB, 102 MiB) copied, 22,4274 s, 4,8 MB/s user@PC:~$
Вместо /dev/sdc необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <file-name> необходимо использовать путь и имя файла образа (сохраненного ранее Вами или другим человеком).