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