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.