Введение
В некоторых случаях в результате некорректных действий при обновлении ПО на сервисных маршрутизаторах ESR может возникнуть проблемы с загрузкой ПО (firmware), вторичного загрузчика (u-boot) или даже первичного загрузчика (bdk). Именно для таких случаев будет необходимо подготовить и использовать загрузочную SD-карту по инструкции описанной в данной статье.
Ограничения
Данная инструкция актуальна для следующих моделей ESR:
- ESR-3100
- ESR-3200
- ESR-3200L
- ESR-3300
Необходимые файлы
Для подготовки загрузочной SD-карты потребуются следующие файлы в зависимости от модели маршрутизатора:
| Модель | HW-версия | Имя директории <DIR> | Первичный загрузчик <bdk-file> | Вторичный загрузчик <uboot-file> | Основное ПО <firmware-file> |
|---|---|---|---|---|---|
| ESR-3100 | все | esr3100 | esr3100-1.X.Y-buildZZZ.bdk | esr3100-1.X.Y-buildZZZ.uboot | esr3100-1.X.Y-buildZZZ.firmware |
| ESR-3200 | все | esr3200 | esr3200-1.X.Y-buildZZZ.bdk | esr3200-1.X.Y-buildZZZ.uboot | esr3200-1.X.Y-buildZZZ.firmware |
| ESR-3200L | все | esr3200l | esr3200-1.X.Y-buildZZZ.bdk | esr3200-1.X.Y-buildZZZ.uboot | esr3200-1.X.Y-buildZZZ.firmware |
| ESR-3300 | все | esr3300 | esr3300-1.X.Y-buildZZZ.bdk | esr3300-1.X.Y-buildZZZ.uboot | esr3300-1.X.Y-buildZZZ.firmware |
В таблице Выше приведены шаблоны имён файлов, которые далее по тексту будут упоминаться как <bdk-file>, <uboot-file> и <firmware-file>.
Архив с актуальными файлами ПО и загрузчиков можно скачать на официальном сайте компании https://eltex.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/sda1 3072 8191 5120 2,5M 1 FAT12 /dev/sda2 32768 339967 307200 150M b W95 FAT32
В примере выше, подключенная SD-карта определена как /dev/sda
3. Создать первый раздел на SD-карте
3.1. В терминальной программе запустить утилиту fdisk в качестве ключа используя идентификатор подключенной SD-карты. Проверить текущие разметку и разделы на SD-карте.
user@PC:~$ sudo fdisk /dev/sda
Добро пожаловать в fdisk (util-linux 2.39.3).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.
Команда (m для справки): p
Диск /dev/sda: 14,84 GiB, 15931539456 байт, 31116288 секторов
Disk model: MassStorageClass
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xb4460960
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1 2048 4095 2048 1M 83 Linux
/dev/sda2 4096 516095 512000 250M b W95 FAT32
Команда (m для справки):
Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
3.2. Создать новую разметку диска типа DOS. Проверить текущую разметку на SD-карте.
Команда (m для справки): o
Created a new DOS (MBR) disklabel with disk identifier 0xb5b9ec41.
Команда (m для справки): p
Диск /dev/sda: 14,84 GiB, 15931539456 байт, 31116288 секторов
Disk model: MassStorageClass
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xb5b9ec41
3.3. Создать первый раздел размеров в 8МБ без указания типа файловой системы. Проверить текущие разметку и разделы на SD-карте.
Команда (m для справки): n
Тип раздела
p основной (0 primary, 0 extended, 4 free)
e расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p): p
Номер раздела (1-4, по умолчанию 1): 1
Первый сектор (2048-31116287, по умолчанию 2048): 3072
Last sector, +/-sectors or +/-size{K,M,G,T,P} (3072-31116287, по умолчанию 31116287): 8191
Создан новый раздел 1 с типом 'Linux' и размером 2,5 MiB.
Команда (m для справки): t
Выбранный раздел 1
Hex code or alias (type L to list all): 1
Тип раздела 'Linux' изменен на 'FAT12'.
Вводимые в данном разделе числовые значения ("Первый сектор" и "Последний сектор") должны чётко соответствовать значениям указанным в примере выше.
3.5. Сохранить изменения разметки SD-карты.
Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.
4. Отформатировать первый раздел носителя в FAT12
user@PC:~$ sudo mkfs.vfat -F12 /dev/sda1
mkfs.fat 4.2 (2021-01-31)
Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
5. Записать первичный и вторичный загрузчик в первый раздел SD-карты
Для ESR-3100:
user@PC:~$ sudo dd if=<bdk-file> of=/dev/sda && sync
8192+0 записей получено
8192+0 записей отправлено
4194304 байтов (4,2 MB, 4,0 MiB) скопировано, 1,01818 s, 4,1 MB/s
user@PC:~$sudo dd if=<uboot-file> of=/dev/sda bs=1K seek=4352 && sync
657+1 записей получено
657+1 записей отправлено
673105 байтов (673 kB, 657 KiB) скопировано, 0,000755073 s, 891 MB/s
Для ESR-3200/3200L/3300:
sudo dd if=<bdk-file> of=/dev/sda && sync
8192+0 записей получено
8192+0 записей отправлено
4194304 байтов (4,2 MB, 4,0 MiB) скопировано, 0,00523253 s, 802 MB/s
sudo dd if=<uboot-file> of=/dev/sda bs=1K seek=4096 && sync
2508+1 записей получено
2508+1 записей отправлено
1284478 байтов (1,3 MB, 1,2 MiB) скопировано, 0,001658 s, 775 MB/s
Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <bdk-file> и <uboot-file> необходимо использовать путь и имя файла актуального первичного загрузчика для той модели ESR, для которой создается данная загрузочная SD-карта. Имена файлов соответствующие переменным указаны в таблице в разделе Необходимые файлы.
6. Создать второй раздел на SD-карте
6.1. Создать второй раздел, размер 150 МБ, тип файловой системы - FAT32.
user@PC:~$ sudo fdisk /dev/sda
Добро пожаловать в fdisk (util-linux 2.39.3).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.
Команда (m для справки): n
Тип раздела
p основной (1 primary, 0 extended, 3 free)
e расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p): p
Номер раздела (2-4, по умолчанию 2): 2
Первый сектор (2048-31116287, по умолчанию 2048): 32768
Last sector, +/-sectors or +/-size{K,M,G,T,P} (32768-31116287, по умолчанию 31116287): +150M
Создан новый раздел 2 с типом 'Linux' и размером 150 MiB.
Команда (m для справки): t
Номер раздела (1,2, по умолчанию 2): 2
Hex code or alias (type L to list all): b
Тип раздела 'Linux' изменен на 'W95 FAT32'.
6.2. Проверить текущие разметку и разделы на SD-карте.
Команда (m для справки): p
Диск /dev/sda: 14,84 GiB, 15931539456 байт, 31116288 секторов
Disk model: MassStorageClass
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xd4cfeee6
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1 3072 8191 5120 2,5M 1 FAT12
/dev/sda2 32768 339967 307200 150M b W95 FAT32
Второй раздел обязательно должен начинаться по смещению 32768. Первая область памяти 16MB на SD-карте не должна быть затронута при записи нового раздела.
Размер раздела может отличаться от 150МБ. Но меньше его делать не рекомендуется т.к. может не хватить места для записи необходимых файлов, а больше - также бессмысленно т.к. кроме ПО для одной модели ESR туда копировать не нужно.
6.3. Сохранить изменения разметки SD-карты.
Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.
7. Отформатировать первый раздел носителя в FAT32
user@PC:~$ sudo mkfs.fat /dev/sda2
mkfs.fat 4.2 (2021-01-31)
Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
8. Создать во втором разделе директорию с названием модели ESR и скопировать в неё загрузчики и образ основного ПО
user@PC:~$ mkdir tempuser@PC:~$ sudo mount /dev/sda2 tempuser@PC:~$ sudo mkdir temp/<DIR>user@PC:~$ sudo cp <bdk-file> temp/<DIR>/bdk.binuser@PC:~$ sudo cp <uboot-file> temp/<DIR>/u-boot.binuser@PC:~$ sudo cp <firmware-file> temp/<DIR>/firmwareuser@PC:~$ sudo ls -lh temp/<DIR>
итого 112M
-rw-r--r-- 1 root root 4,0M дек 3 15:33 bdk.bin
-rw-r--r-- 1 root root 107M дек 3 15:33 firmware
-rw-r--r-- 1 root root 658K дек 3 15:33 uboot.bin
Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <DIR> необходимо использовать имя папки указанное в таблице Необходимые файлы в соответствии с моделью ESR, для которой создается данная загрузочная SD-карта.
Вместо переменной <bdk-file> необходимо использовать путь и имя файла актуального первичного загрузчика для той модели ESR, для которой создается данная загрузочная SD-карта.
Вместо переменной <uboot-file> необходимо использовать путь и имя файла актуального вторичного загрузчика для той модели ESR, для которой создается данная загрузочная SD-карта.
Вместо переменной <firmware-file> необходимо использовать путь и имя файла актуального ПО для той модели ESR, для которой создается данная загрузочная SD-карта.
Имена файлов соответствующие переменным указаны в таблице в разделе Необходимые файлы.
9. Отмонтировать второй раздел и удалим временную директорию
user@PC:~$ sudo umount tempuser@PC:~$ sudo rm -r temp
Получившуюся SD-карту можно использовать для загрузки сервисного маршрутизатора ESR и обновления/восстановления загрузчиков и основного ПО.
Алгоритм копирования загрузочной SD-карты в файл
После создания загрузочной SD-карты есть возможность сохранить её образ в файл на ПК. Это может потребоваться для передачи образа другим сотрудникам или для быстрого разворачивания образа на SD-карту в случае повторения проблемы с загрузкой маршрутизатора.
1. Подключить SD-карту к ПК
Для этого можно использовать либо штатный разём для SD-карт либо Card-reader подключаемый к USB-разъёму ПК.
2. Определить идентификатор подключенной SD-карты
Для выполнения данного шага необходимо в терминальной программе запустить утилиту fdisk с ключём "-l"
user@PC:~$ sudo fdisk -l [sudo] пароль для user: password ...... Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип /dev/sda1 3072 8191 5120 2,5M 1 FAT12 /dev/sda2 32768 339967 307200 150M b W95 FAT32
В примере выше, подключенная SD-карта определена как /dev/sda
3. Произвести побитное копирование содержимого всей SD-карты в файл на ПК
user@PC:~$ sudo dd if=/dev/sda of=<file-name>.iso bs=1M count=152 status=progress; sync
135266304 байтов (135 MB, 129 MiB) скопировано, 3 s, 45,0 MB/s
152+0 записей получено
152+0 записей отправлено
159383552 байтов (159 MB, 152 MiB) скопировано, 3,53561 s, 45,1 MB/suser@PC:~$
Вместо /dev/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <file-name> необходимо использовать путь и имя файла сохраняемого образа. В имени файла желательно отобразить всю ключевую информацию относящуюся к данному образу, такую как модель ESR'а и версия ПО. Например "recovery_esr200_1_20_4"
Необходимо учитывать, что в примере выше использованы параметры для сохранения образа SD-карты размер второго раздела которой не превышает 150МБ.
Если второй раздел созданной SD-карты более 150МБ, необходимо в качестве аргумента ключа "count" указывать количество мегабайт во втором разделе и приплюсовать еще 2 блока по 1МБ (указано в качестве аргумента ключа "bs").
Алгоритм загрузки образа загрузочной SD-карты на носитель
1. Подключить SD-карту к ПК
Для этого можно использовать либо штатный разъём для SD-карт либо Card-reader подключаемый к USB-разъему ПК.
2. Определить идентификатор подключенной SD-карты
Для выполнения данного шага необходимо в терминальной программе запустить утилиту fdisk с ключём "-l"
user@PC:~$ sudo fdisk -l [sudo] пароль для user: password ...... Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип /dev/sda1 3072 8191 5120 2,5M 1 FAT12 /dev/sda2 32768 339967 307200 150M b W95 FAT32
В примере выше, подключенная SD-карта определена как /dev/sda
3. Распаковать образ на подключенную SD-карту
user@PC:~$ sudo dd if=<file-name>.img of=/dev/sda 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/sda необходимо использовать идентификатора подключенной SD-карты определенный в п.2 данной инструкции.
Вместо переменной <file-name> необходимо использовать путь и имя файла образа (сохраненного ранее Вами или другим человеком).