Crmgo Блог

OpenWRT на флешку

OpenWRT на флешку

Обновим список пакетов и произведем установку нужных модулей для поддержки USB-накопителей и файловой системы ext4: Не стоит обращать внимание на сообщение об ошибке, которое возникает в процессе установки пакета kmod-usb-storage (Barrier Breaker 14.07). На самом деле — модуль успешно устанавливается.…

OpenWRT на флешку

Обновим список пакетов и произведем установку нужных модулей для поддержки 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 (иногда, даже — несколько раз … это помогает :)) Проверено на себе!

Примечание: материал мог быть создан с помощью ИИ и затем отредактирован человеком. Ответственный: Dmytro Lomaka, Kaltenkirchen.