OpenWRT — подключение USB-диска
Если у Вас маршрутизатор с 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'
config 'mount'
option target '/mnt/sda1'
option uuid '7f41e7d8-3b3a-4725-a295-cbc58bb89493'
option enabled '0'
Теперь нам надо определиться как монтировать будем. Тут два варианта:
Монтируем как отдельный раздел — тут вообще никаких комментариев. Обычное монтирование.
Монтируем как overlay-раздел — подменяем область, которую прошивка использует для перезаписи данных, так как файлы в самой прошивке находятся в read-only файловой системе. В общем если хотите устанавливать пакеты или поберечь флеш устройства от перезаписей, который как USB-флешку поменять не получится, а только паяльником, то советую хотя бы раздел 128-256 мб выделить под overlay-раздел.
Монтируем как отдельный раздел
Итак, чтобы примонтировать USB раздел как отдельный каталог, например, в будущем для хранения данных файлового сервера, приводим второй блок файла fstab к следующему виду
config 'mount'
option target '/mnt/sda1'
option uuid '7f41e7d8-3b3a-4725-a295-cbc58bb89493'
option enabled '1'
Да, просто меняем одну цифру, с нуля на единицу.
В общем и сами догадались бы.
Монтируем как overlay-раздел
Вот это уже интереснее.
Сначала приводим fstab к виду
config 'mount'
option target '/overlay'
option uuid '7f41e7d8-3b3a-4725-a295-cbc58bb89493'
option enabled '1'
А теперь нам необходимо еще файлы из встроенной памяти роутера перенести в этот раздел.
Сделаю небольшое отступление — в интернете бытует мнение, которое я до недавнего времени так же разделял, мол необходимо на внешний носитель переносить все данные с устройства.
Если Вы так сделаете и у Вас не флешка, а 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 -
Проверяем, что скопировали:
~# ls /mnt/sda1 -lah
drwxr-xr-x 5 root root 4.0K Sep 25 09:44 .
drwxr-xr-x 1 root root 0 Sep 25 09:20 ..
drwxr-xr-x 5 root root 4.0K Sep 25 09:44 etc
drwx------ 2 root root 16.0K Sep 25 09:16 lost+found
drwxr-xr-x 3 root root 4.0K Sep 25 09:44 mnt
Замечательно, вот только каталог /overlay/mnt на флешку перемещать смысла не было, удалим его на всякий случай:
rm -Rf /mnt/sda1/mnt
Ну и перезагружаемся:
reboot
После перезагрузки промеряем, как у нас всё смонтировалось и куда
~# df -h|grep sd
/dev/sda1 3.7G 7.6M 3.5G 0% /overlay
ну всё, флешка подключена как overlay-раздел и теперь у вас куча места для установки пакетов, а не жалкие несколько мегабайт.