Openwrt не видит флешку

Обновлено: 17.05.2024

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

Необходимые пакеты для подключения USB-диска

Для подключения внешнего USB-накопителя нам понадобятся первым делом необходимые модули ядра.
В случае, если Вы сами собираете прошивку OpenWRT, то тогда включаем в настройках сборки следующие пункты

make menuconfig
Kernel modules --->
USB Support --->
<*> kmod-usb-core
<*> kmod-usb-ohci
<*> kmod-usb-storage
<*> kmod-usb-usb2
Filesystems --->
<*> kmod-fs-ext4
Ну и, конечно, следует позаботиться об пакете block-mount, который выполняет роль аналога сервиса fstab — монтирует разделы при загрузке устройства.

Base system --->
<*> block-mount
Ну теперь дело за малым — собираем прошивку

make clean
make V=-1
и прошиваем наше устройство.

Подключение и монтирование USB-накопителя

Настоятельно рекомендую использовать для подключения накопители с файловыми системами Ext2/Ext3/Ext4. Хоть и существует возможность монтирования FAT32/NTFS, но все попытки обычно обрастают кучей проблем, которые решать желания никакого не имею.

В этой статье априори рассматриваю лишь Ext-семейство.

Если подключаете Флешку или SSD-диск, то рекомендую использовать Ext2, чтобы особо не волноваться о циклах перезаписи.
Если USB-HDD, то рекомендую переходить на Ext4.

Итак, будем считать, что носитель Вы подготовили и подключили.

Если же вы впервые сталкиваетесь с вопросом о форматировании USB-флешки, то для Linux-систем можете почитать эту статью:Форматирование USB-диска

Теперь надо примонтировать всё это дело.

Отложим интерфейс, он несколько кривовато работает для этих целей в настоящее время, проще ручками через консоль.

Для начала удалим старый файл /etc/config/fstab

rm /etc/config/fstab
А теперь создадим новый с помощью полезной команды

block detect >> /etc/config/fstab
И приступим к редактированию

vi /etc/config/fstab
Перед нами во всей красе и величии предстали настройки автоматического монтирования, созданные автоматически командой block detect.

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'

Итак, чтобы примонтировать USB раздел как отдельный каталог, например, в будущем для хранения данных файлового сервера, приводим второй блок файла fstab к следующему виду

Монтируем как overlay-раздел

Вот это уже интереснее.
Сначала приводим fstab к виду

Сделаю небольшое отступление — в интернете бытует мнение, которое я до недавнего времени так же разделял, мол необходимо на внешний носитель переносить все данные с устройства.
Если Вы так сделаете и у Вас не флешка, а USB-HDD, то ваш жесткий диск парковаться будет чуть реже, чем никогда.
В overlay необходимо перенести лишь то, что сейчас находится в overlay’е.

Итак, монтируем будущий overlay раздел ручками в /mnt/sda1

mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
И переносим всё содержимое с сохранением прав доступа и символьными ссылками хитрым способом с помощью архиватора tar:

tar -C /overlay -cf - . | tar -C /mnt/sda1 -xf -
Проверяем, что скопировали:

rm -Rf /mnt/sda1/mnt
Ну и перезагружаемся:

reboot
После перезагрузки промеряем, как у нас всё смонтировалось и куда

opkg update
opkg install kmod-usb2
insmod ehci-hcd
opkg install kmod-usb-core kmod-usb-storage kmod-fs-ext4 kmod-scsi-core block-mount e2fsprogs fdisk

Смотрим как флешка определась системой:
fdisk -l
USB Flash-диск должен определится как sda

Сначала создаем на USB Flash разделы:
fdisk /dev/sda

Выполняем следующие команды:
Command (m for help): d
Partition number (1-4): 1

Command (m for help): d
Partition number (1-4): 2

Command (m for help): d
Partition number (1-4): 3

Command (m for help): d
No partition is defined yet!

Создаем сначала второй раздел для Swap:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p

[B] Partition number (1-4): 2
First cylinder (xx-xxx, default xx): жмем Enter
Using default value xx
Last cylinder or +size or +sizeM or +sizeK (xx-xxx, default xxx): +64M

Создаем основной раздел, используем для него все оставшееся пространство на флешке:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p

Partition number (1-4): 1
First cylinder (xx-xxx, default xx): жмем Enter
Using default value xx
Last cylinder or +size or +sizeM or +sizeK (xx-xxx, default xxx): жмем Enter

Второй раздел у нас должен быть Swap, меняем тип для него:
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap / Solaris)

Command (m for help): a
Partition number (1-4): 1

Смотрим, что получилось:
Command (m for help): p

Выходим:
Command (m for help): w

Разделы созданы, форматируем их:
mkswap /dev/sda2
mkfs.ext4 /dev/sda1

Долго ждем пока не появится консоль

При форматировании можно (нужно) сразу добавить еще и метки разделам для удобства дальнейшего монтирования для чего см. здесь

-L присвоение label
"CyberSwap" - это метка для /dev/sda2
"CyberWrt" - это метка назначается разделу /dev/sda1


Монтируем новый диск и копируем на него все необходимое:
mkdir -p /mnt
mount -t ext4 /dev/sda1 /mnt -o rw,sync
tar -C /overlay -cvf - . | tar -C /mnt -xvf -

Правим фаил /etc/config/fstab:
vi /etc/config/fstab

config global autoswap
option from_fstab 1
option anon_swap 0

config mount
option target /overlay
option device /dev/sda1
option fstype ext4
option options rw,sync
option enabled 1
option enabled_fsck 0

Сохраняем
:wq

Перегружаемся
reboot

Проверяем смонтировался ли диск?
df -h

Проверяем раздел подкачки Swap
free

Устанавливаем поддержку кодировок
opkg update
opkg install kmod-nls-cp1251 kmod-nls-koi8r kmod-nls-utf8 kmod-nls-cp866 kmod-nls-cp437

Последний раз редактировалось andr128; 30.03.2013 в 10:50 . Причина: присвоение меток разделам

После того, как подключили usb-хаб, можно использовать его возможности. Подключим Flash-диск в OpenWrt и перенесем на него файловую систему, чтобы быть независимым от размера Flash-памяти, которая стоит в роутере.

На этапе конфигурации OpenWrt нужно установить следующие модули:
Kernel modules:
USB Support:
kmod-usb-storage (Flash-диск в OpenWrt)
Filesystems:
kmod-fs-ext3
Base system:
block-extroot
Utilities:
Filesystem:
e2fsprogs
disc:
fdisk

Подключаем Flash-диск к роутеру. Заходим через телнет на роутер:

Ищем, как Flash-диск определся в системе:

Command (m for help): d
Partition number (1-4): 2

Command (m for help): d
Partition number (1-4): 3

Разбиваем Flash-диск на следующие части — Swap (64Мбт), Root File System (128Мбт), Home (оставшееся место на флэш-диске):

Partition number (1-4): 1
First cylinder (1-122, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-122, default 122): +64M
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p

Partition number (1-4): 2
First cylinder (10-122, default 10):
Using default value 10
Last cylinder or +size or +sizeM or +sizeK (10-122, default 122): +128M
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p

Смотрим, что получилось:

Первый раздел у нас должен иметь тип Swap, меняем тип для него:

Применяем и выходим:

Flash-диск готов. Перенесем на него корневую файловую систему:
Для этого подключим его к компьютеру и скопируем содержимое
openwrt/build_dir/target-mipsel_uClibc-0.9.31/root-brcm47xx/ на второй раздел( RootFS) Flash-диск.

Для загрузки с Flash-диск в OpenWrt необходимо изменить файл /etc/config/fstab следующим образом:

Перезагружаемся с подключенным Flash-диском и проверяем результат:

Теперь мы не ограничены размером внутренней Flash на роутере и можем ставить на его любые приложения.

Настроим возможность установки модулей из локального репозитария OpenWrt. Для этого используются команды:

Расширяем дисковую память Chaos Calmer 15.05.1 OpenWRT на USB флешку


После установки скомпилированной разработчиками OpenWRT прошивки Chaos Calmer 15.05.1 на ваш роутер с 4мб дисковой памяти вы обнаружите, что у вас осталось всего навсего 300кб для прочих нужд. Для решения одной задачи этого может и хватит, как например, для организации принт-сервера посредством OpenWRT, но никак не более. Поэтому логично первым делом заняться увеличением дискового пространства для маневров. И все это без компиляции собственной прошивки и прочих танцев с бубном. Когда нужно решать задачу быстро из того что имеем.

Имея доступ в интернет с нашего роутера, авторизуемся на нем через SHH соединение при помощи программы PuTTY и последовательно начнем:

Сначала обновляем список пакетов

Далее устанавливаем поддержку USB устройств на нашем роутере

opkg install kmod-usb-storage

Далее нам нужна флешка, где вы заранее cоздали бы хотя бы 2 раздела, основной (пока не важно какой файловой системы) и так называемый раздел подкачки (стандартный linux swap). На моей 16Gb флешке я создал 3 раздела: первый на 1gb без файловой системы для расширения встроенной памяти устройства - собственно под overlay, второй самый большой раздел на 13gb тоже пока без файловой системы буду монтировать как отдельный том, и третий раздел на сотню с лишним мегабайт как файл подкачки linux. Разбить флешку на разделы через fdisk роутера не получится - не хватит памяти для установки нужных пакетов пока, поэтому сделать это придется на другой Linux машине или из под Windows, например, при помощи программы Minitool Partition Wizard.

После чего готовую к форматированию вставляем в usb разъем и вводим команду:

[ 2598.210000] usb 1-1.4: new high-speed USB device number 4 using ehci-platform
[ 2598.330000] usb-storage 1-1.4:1.0: USB Mass Storage device detected
[ 2598.340000] scsi host1: usb-storage 1-1.4:1.0
[ 2599.340000] scsi 1:0:0:0: Direct-Access SanDisk Ultra Fit 1.00 PQ: 0 ANSI: 6
[ 2599.350000] sd 1:0:0:0: [sda] 30031250 512-byte logical blocks: (15.3 GB/14.3 GiB)
[ 2599.350000] sd 1:0:0:0: [sda] Write Protect is off
[ 2599.360000] sd 1:0:0:0: [sda] Mode Sense: 43 00 00 00
[ 2599.360000] sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 2599.380000] sda: sda1 sda2 sda3
[ 2599.390000] sd 1:0:0:0: [sda] Attached SCSI removable disk

Флешка у меня определилась как sda1, sda2 и sda3. Все верно, 3 раздела.

Ну есть одно НО, которое я еще решил стандартными средствами OpenWRT. Мы не можем создать разделы и отформатировать флешку в файловой системе f2fs при помощи утилит f2fs-tool – mkfs.f2fs потому , что в прошивке не рабочая версия 1.4.0 данной программы. Некий бонус от сборщика прошивки так сказать. Поэтому создать разделы, отформатировать ее придется на другой Linux машине или приложении Windows.

Далее устанавливаем собранный мной пакет f2fs-tools версии 1.4.1 для ветки 15.05.1, который поможет нам отформатировать флешку прямо с нашего роутера, вдруг даже виртуальной Linux машины нет под рукой. Cначала ставим утилиту форматирования в файловой системе F2FS:

Затем обновленную библиотеку поддержки файловой системы F2FS.

Далее форматируем первый раздел нашей флешки в F2FS.

mkfs.f2fs -l overlay /dev/sda1

И в моем случае еще и второй раздел

mkfs.f2fs -l data /dev/sda2

Далее удаляем не нужные нам теперь libf2fs f2fs-tools

opkg remove f2fs-tools libf2fs

Устанавливаем поддержку файловой системы F2FS ядра. Не то, чтобы я ее ярый фанат, но она единственная - установочный модуль которой весит всего ничего и не тянет за собой кучу зависимостей. И разработана была специально для флеш носителей информации.

opkg install kmod-fs-f2fs

Уже можем проверить как она монтируемся

mount /dev/sda1 /mnt

Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 512 408 104 80% /
/dev/root 2304 2304 0 100% /rom
tmpfs 14288 640 13648 4% /tmp
/dev/mtdblock3 512 408 104 80% /overlay
overlayfs:/overlay 512 408 104 80% /
tmpfs 512 0 512 0% /dev
/dev/sda1 1021952 143368 860152 14% /mnt

После того, как флешка смонтировалась, копируем на нее исходные данные для его последующего монтирования как доп память:

tar -C /overlay -cvf - . | tar -C /mnt -xf -

дабы не записалось ничего лишнего отмонтируемся

Далее нам нужно установить пакет block-mount, который занимается монтированием дисков туда, куда ему укажут на этапе загрузки устройства. Но и тут подкралась вторая засада – пакет block-mount который предлагает репозитарий OpenWrt для ветки Chaos Calmer 15.05.1 – не поддерживает указание дисков в файловой системе f2fs как overlay устройств. Просто забыли прописать в данном пакете ее поддержку. Поэтому придется поставить усовершенствованную версию пакета block-mount, предоставленную мной, которая кстати сгодится для всех у кого ветка Chaos Calmer 15.05.1 и устройство на архитектуре ar71xx.

block detect > /etc/config/fstab

У меня после команды block detect файл fstab выглядит так

Открываем файл fstab в текстовом редакторе vi

Жмем букву i переходим в режим редактирования и приводим его к виду

То есть мы включили монтирование разделов на этапе загрузки системы, а также подмену внутренней памяти ( /overlay) на 1 раздел на флеш накопителе по его уникальному uuid номеру. Дальше жмем ESC, вводим символы

Что в Vi означают выйти записав изменения и жмем enter. Файл fstab перезаписался. Перезагружаем конфиги fstab:

Наконец-то перегружаем наш роутер

После перезагрузки смотрим команду

и если все прошло как надо вы увидите что-то наподобие

Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 1021952 144408 859112 14% /
/dev/root 2304 2304 0 100% /rom
tmpfs 14288 76 14212 1% /tmp
/dev/sda1 1021952 144408 859112 14% /overlay
overlayfs:/overlay 1021952 144408 859112 14% /
tmpfs 512 0 512 0% /dev

Где вы видим, что раздел /dev/sda1 теперь и есть наша дисковая память. То же самое можно проверить зайдя в Luci на вкладку Software и увидеть, что для дальнейших извращений мы теперь готовы:


Таким образом мы расширили дисковую память нашего 4 мб OpenWRT роутера без каких-либо компиляций собственной прошивки и без внешней Linux машины под рукой.

Читайте также: