Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Как разместить корневую файловую систему OpenWRT на флеш-накопителе с интерфейсом USB

Оригинал: How to setup OpenWrt extroot, rootfs on USB storage
Автор: Arnab Satapathi
Дата публикации: 29 марта 2017 г.
Перевод: А.Панин
Дата перевода: 20 апреля 2017 г.

В данной статье я поделюсь своим опытом по размещению корневой файловой системы OpenWrt маршрутизатора TP-Link MR-3220 v2.4 на внешнем накопителе с интерфейсом USB.

Хотя я и использовал маршрутизатор TP-Link MR-3220, описанная последовательность действий будет актуальная и для других маршрутизаторов, например, TP-Link WR703N, TP-Link MR3020, D-Link DIR-505 и так далее. Вам придется лишь убедиться в том, что вы загрузили прошивку, подходящую для вашего маршрутизатора.

Вы наверняка знакомы с аппаратными спецификациями моего маршрутизатора, но я на всякий случай продублирую их в статье:

  • Процессор: AR9331-AL3A 400MHz SoC
  • Оперативная память: 32 MB DDR
  • Флэш-память: 4 MB SPI NOR
  • Порты WAN: 10/100М, 1 шт.
  • Порты LAN: 10/100М, 4 шт.
  • Wi-Fi: 150Mbps b/g/n
  • Порты USB: USB 2.0, 1 шт.

Кратко остановлюсь на качестве аппаратной части маршрутизатора: я разобрал его через час после покупки и после тщательного осмотра пришел к выводу о приемлемом качестве сборки и электронных компонентов.

Ну что же, думаю, уже достаточно сказано об аппаратном обеспечении, поэтому давайте приступим к решению описанной в заголовке статьи задачи, а именно, установке OpenWRT и переносу корневой файловой системы на флеш-накопитель с интерфейсом USB. Процесс прошивки маршрутизатора достаточно прост и связан с использованием веб-интерфейса, а процесс создания внешней файловой системы OpenWRT практически не зависит от используемой модели маршрутизатора.

Какую версию прошивки OpenWRT следует выбрать?

Это один из самых сложных вопросов, так как выбор корректной версии прошивки OpenWRT является залогом успешного создания внешней корневой файловой системы. Мой маршрутизатор отличной работает с разрабатываемой версией прошивки OpenWRT (trunk, кодовое имя Designated Driver), а также со стабильными версиями 15.05, 14.07 и 12.09.

При этом, в отличие от объема установленной в маршрутизаторе флэш-памяти, размер прошивки OpenWRT растет день ото дня, а стабильная версия прошивки имеет еще больший размер из-за включения в ее состав компонентов веб-интерфейса LuCI. По этой причине после прошивки маршрутизатора для создания файловой системы JFFS2 остается все меньше и меньше свободного места. Из-за этого ограничения пространства не всегда удается установить несколько дополнительных пакетов, которые необходимы для ввода в строй внешней корневой файловой системы.

По прошествии примерно 12-14 часов экспериментов с различными версиями OpenWRT я выяснил, что лишь при использовании версии OpenWRT 14.07 (кодовое имя Barrier Breaker) или более ранних версий для файловой системы JFFS2 остается пространство, достаточное для установки необходимого для внешней файловой системы минимума пакетов.

Примечание: существует и более сложный путь, связанный с самостоятельной сборкой новейшей версии OpenWRT для вашего маршрутизатора.

Какую файловую систему следует использовать в качестве внешней файловой системы?

Еще одним важным вопросом является вопрос об используемой файловой системе; в официальном руководстве OpenWRT говорится о том, что вы можете использовать любую файловую систему, используемую в UNIX-подобных операционных системах, поэтому сразу же можете забыть об FAT32 и NTFS. Но в реальности в качестве внешних файловых систем возможно использование лишь ext4/ext3 или ext2. Я протестировал практически все доступные файловые системы (использование которых на флеш-накопителях малого объема является хоть как-то обоснованным):

  • minix - не поддерживается
  • HFS - не поддерживается
  • HFS+ - не поддерживается
  • JFS - не поддерживается
  • XFS - не поддерживается
  • reiserfs - не поддерживается

Да, в UNIX-подобных операционных системах используются и другие файловые системы, такие, как BTRFS, UFS и так далее, но мне не удалось создать ни одну из них рамках в 288КБ свободного пространства, предназначающихся для файловой системы JFFS2, поэтому я не тестировал их на совместимость.

Итак, для маршрутизатора с 4 МБ флэш-памяти была выбрана версия OpenWRT 14.07 или более ранняя и внешняя корневая файловая система ext4.

Обращаюсь к опытным пользователям OpenWRT: если вам удавалось создать внешнюю корневую файловую систему, отличную от ext4/ext3/ext2, пожалуйста, дайте знать об этом.

Установка OpenWRT на TP-Link MR3220

Вы наверняка используете один из дистрибутивов Linux на вашем компьютере, поэтому вам придется воспользоваться следующей командой для загрузки файла прошивки:

Предупреждение: вы осуществляете прошивку маршрутизатора на свой страх и риск, ведь даже в случае корректного выполнения всех процедур он может потерять работоспособность. Если есть возможность, следует подключить маршрутизатор к источнику бесперебойного питания перед прошивкой.

  1. Включите маршрутизатор и соедините один из его четырех LAN-портов (желтого цвета на маршрутизаторах TP-Link) с Ethernet-портом компьютера с помощью специального кабеля (патч-корда).
  2. Откройте веб-браузер и перейдите по адресу 192.168.0.1 для доступа к веб-интерфейсу маршрутизатора. Для входа в веб-интерфейс придется ввести имя пользователя (Username:) admin и пароль (Password:) admin.
  3. Теперь нужно перейти в раздел System Tools > Firmware Upgrade, выбрать загруженный файл прошивки с помощью кнопки Browse и нажать на кнопку Upgrade.
  4. Осталось подождать в течение нескольких минут завершения процесса прошивки маршрутизатора и его автоматической перезагрузки.

На этом процесс прошивки маршрутизатора можно считать оконченным; ваш компьютер должен получить новый IP-адрес по протоколу DHCP.

Начальная настройка OpenWRT

Сначала вы должны использовать telnet для входа в OpenWRT:

telnet 192.168.1.1

Если в вашей системе нет telnet, вы можете попробовать выполнить данную команду:

busybox telnet 192.168.1.1

После входа в систему нужно изменить пароль для активации доступа к системе маршрутизатора по протоколу SSH:

passwd root

Теперь вы можете завершить сессию telnet с помощью команды exit и повторно войти в систему по протоколу SSH:

ssh root@192.168.1.1

Установка необходимых пакетов

На этом шаге маршрутизатор должен быть соединен с Интернет, причем вы можете использовать как существующее кабельное или DSL-соединение, так и воспользоваться существующим соединением, установленным на уровне компьютера. Я использовал 3G-соединение, установленное на уровне ноутбука с помощью NetworkManager.

Для начала убедитесь в том, что ваш маршрутизатор может устанавливать соединение с ресурсами в сети Интернет:

ping -c 4 8.8.8.8

Обновите метаданные репозитория пакетов opkg:

opkg update

Установите все необходимые пакеты для поддержки накопителей с интерфейсом USB:

opkg install kmod-usb-storage kmod-scsi-core block-mount

Установите модуль ядра для поддержки файловой системы ext4:

opkg install kmod-fs-ext4

Это все, теперь вы должны проверить наличие свободного места на флеш-накопитле с помощью команды df -h и не устанавливать каких-либо других пакетов! Если вы установите любой пакет размером более 10 КБ, вы получите сообщение об отсутствии свободного места на устройстве.

Теперь нужно загрузить все необходимые модули ядра с помощью команды modprobe:

modprobe sd_mod
modprobe usb-storage
modprobe ext4

Или просто перезагрузить устройство с помощью команды reboot.

Создание разделов на флеш-накопителе с интерфейсом USB

Теперь давайте создадим разделы на флеш-накопителе с интерфейсом USB, но перед этим стоит ответить на вопрос: "Как много места нужно выделить для внешней файловой системы?" Всего лишь 100-200 МБ будет более, чем достаточно, поэтому в качестве внешней файловой системы я создал файловую систему ext4 в рамках раздела размером в 200 МБ, а вы можете выделить для нее столько места, сколько посчитаете нужным. Я использовал утилиту GParted для изменения таблицы разделов флеш-накопителя объемом в 4 ГБ.

Теперь безопасно извлеките флеш-накопитель и подключите его к порту USB маршрутизатора.

Настройка внешней файловой системы OpenWRT

После подключения накопителя с интерфейсом USB к маршрутизатору в директории /dev файловой системы последнего должны появиться файлы устройств /dev/sda1, /dev/sda2 и так далее. Просто выполните команды приведенные ниже.

Смонтируйте раздел накопителя, изменив /dev/sda2 на путь к файлу устройства для раздела на вашем накопителе:

mount /dev/sda2 /mnt

Скопируйте данные с раздела, смонтированного в директорию /overlay, на раздел флеш-накопителя с интерфейсом USB:

tar -C /overlay/ -c . -f - | tar -C /mnt/ -xf -

Отмонтируйте накопитель:

sync && umount /dev/sda2

Модифицируйте файл конфигурации /etc/config/fstab для монтирования раздела флеш-накопителя с интерфейсом USB в директорию /overlay:

block detect > /etc/config/fstab

Теперь отредактируйте файл конфигурации /etc/config/fstab с помощью текстового редактора vi для монтирования раздела с файловой системой ext4, представленного файлом устройства /dev/sda2, в директорию /overlay на этапе загрузки системы:

vi /etc/config/fstab

Обратите внимание на следующий пример файла конфигурации fstab:

config 'global'
       option  anon_swap       '0'
       option  anon_mount      '0'
       option  auto_swap       '1'
       option  auto_mount      '1'
       option  delay_root      '5'
       option  check_fs        '0'

config 'mount'
       option  target  '/overlay'
       option  uuid    '7669178c-3f77-4fb1-b421-6ec6f61be672'
       option  enabled '1'

Установите /overlay в качестве значения параметра target и измените значение параметра enabled с 0 на 1. Теперь активируйте механизм запуска службы fstab при загрузке системы:

/etc/init.d/fstab enable

Проверьте корректность активации механизма запуска службы:

readlink -f /etc/rc.d/*fstab

И наконец перезагрузите маршрутизатор с помощью команды reboot:

reboot

Проверка работоспособности внешней корневой файловой системы

После перезагрузки маршрутизатора следует снова войти в его систему по протоколу SSH и проверить объем свободного места на накопителе с помощью команд df и mount:

df -h
mount

Команда df должна вывести информацию о большом количестве свободного места на корневой файловой системе, что означает, что внешняя корневая файловая система работает корректно.

Теперь вы можете провести дополнительную проверку корректности работы внешней корневой файловой системы, установив пакет большого размера, например:

opkg install e2fsprogs

Надеюсь, данная простая и понятная статья побудила вас поэкспериментировать с OpenWRT. Если у вас остались вопросы или предложения, вы можете оставить комментарий и не забудьте поделиться ссылкой на статью с друзьями.