Обновим список пакетов и произведем установку нужных модулей для поддержки USB-накопителей и файловой системы ext4:
root@OpenWrt:~# opkg update root@OpenWrt:~# opkg install block-mount kmod-usb-core kmod-usb2 kmod-usb-ohci kmod-usb-storage kmod-fs-ext4
Не стоит обращать внимание на сообщение об ошибке, которое возникает в процессе установки пакета kmod-usb-storage (Barrier Breaker 14.07). На самом деле — модуль успешно устанавливается.
kmod: failed to insert /lib/modules/3.10.49/sd_mod.ko
Перезагружаем роутер:
root@OpenWrt:~# reboot
Подключаем USB-накопитель и смотрим как на это отреагировала система (она должна его обнаружить). В моем случае, команда dmesg показала следующее:
root@OpenWrt:~# dmesg ... [ 18.800000] usb-storage 1-1.4:1.0: USB Mass Storage device detected [ 18.810000] scsi0 : usb-storage 1-1.4:1.0 [ 18.810000] usbcore: registered new interface driver usb-storage [ 19.810000] scsi 0:0:0:0: Direct-Access SanDisk Cruzer Fit 1.27 PQ: 0 ANSI: 6 [ 19.820000] sd 0:0:0:0: [sda] 62530624 512-byte logical blocks: (32.0 GB/29.8 GiB) [ 19.830000] sd 0:0:0:0: [sda] Write Protect is off [ 19.830000] sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00 [ 19.830000] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 19.850000] sda: sda1 sda2 sda3 [ 19.860000] sd 0:0:0:0: [sda] Attached SCSI removable disk ...
Если система увидела накопитель и все его разделы — отредактируем файл /etc/config/fstab с указанием точек монтирования.
Вместо имен разделов «sdxx» в файле fstab — используйте идентификаторы «uuid», так как они уникальны. Если вы подключите еще один (а то и несколько носителей), нет гарантии, что роутер назначит системному USB-накопителю нужное имя. Поэтому, вместо имени раздела «device» указывайте уникальный идентификатор раздела «uuid».
Узнать идентификаторы разделов можно, выполнив команду block detect, после чего, внести соответствующие изменения в fstab. Если система устанавливается с нуля, лучше сформировать fstab автоматически:
root@OpenWrt:~# block detect >> /etc/config/fstab
Проверяем, что получилось:
root@OpenWrt:~# cat /etc/config/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 'swap' option uuid 'b91e3bff-9e15-4fd0-82e7-25d75d889ce6' option enabled '0' config 'mount' option target '/mnt/sda2' option uuid '7ee9d192-239f-4401-b749-3fb60b4f8eaa' option enabled '0' config 'mount' option target '/mnt/sda3' option uuid 'ad0381c6-31b8-4eda-ac21-a87bbd09eef2' option enabled '0
Вносим изменения в файл /etc/config/fstab. Параметры раздела sda3, который был создан для NAS, пока закомментируем или удалим (настройкой NAS займемся позже):
root@OpenWrt:~# vi /etc/config/fstab config 'global' option anon_swap '0' option anon_mount '1' option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '0' option from_fstab '1' config 'swap' option uuid 'b91e3bff-9e15-4fd0-82e7-25d75d889ce6' option enabled '1' config 'mount' option target '/overlay' option uuid '7ee9d192-239f-4401-b749-3fb60b4f8eaa' option fstype 'ext4' option options 'rw,sync' option enabled '1'
Если параметры точек монтирования очевидны, то на параметрах секции global хотелось бы остановиться подробней:
option anon_swap '0' # монтировать своп-раздел, даже если он не описан в fstab option anon_mount '1' # монтировать раздел с данными, даже если он не описан в fstab option auto_swap '1' # автоматически монтировать своп-раздел при его обнаружении option auto_mount '1' # автоматически монтировать раздел с данными при его обнаружении option delay_root '5' # задержка X секунд до попытки монтирования корневого раздела option check_fs '0' # проверять файловую систему при монтировании option from_fstab '1' # читать данные fstab в случае "горячего" подключения устройства
Создаем временную директорию /mnt/sda2 (для переноса системы, которая расположена во внутренней памяти роутера), и монтируем в нее раздел USB-накопителя.
root@OpenWrt:~# mkdir /mnt/sda2 root@OpenWrt:~# mount /dev/sda2 /mnt/sda2
Копируем раздел /overlay с внутренней памяти роутера на раздел, который расположен на USB-накопителе. Операция копирования производится с сохранением всех прав.
root@OpenWrt:~# tar -C /overlay -cf - . | tar -C /mnt/sda2 -xf -
Теперь можно отмонтировать раздел и удалить временную директорию:
root@OpenWrt:~# umount /mnt/sda2 root@OpenWrt:~# rm -rf /mnt/sda2
Перезагружаем роутер:
root@OpenWrt:~# reboot
Если все сделано правильно, роутер должен загрузиться с USB-накопителя. Если роутер не загружается: отключите USB-накопитель, загрузитесь с внутренним /overlay, подключите USB-накопитель, смонтируйте разделы и проверьте fstab (иногда, даже — несколько раз … это помогает :)) Проверено на себе!
