• Atos

    lvl 656
  • Изменено

OpenWRT. Корневая файловая система на внешнем устройстве (extroot).

При установке пакетов приходится сталкиваться с ситуацией ограниченности памяти роутера и невозможности установить необходимые для работы пакеты.

root@OpenWrt:~# opkg install golang
Installing golang (1.21.13-1) to root...
Collected errors:
 * verify_pkg_installable: Only have 7120kb available on filesystem /overlay, pkg golang needs 36586
 * opkg_install_cmd: Cannot install package golang.

Если у вашего роутера есть свободный USB порт ситуацию можно решить путём подключение к нему USB накопитея и переноса корневой файловой системы на этот накопитель.

Подключаем USB накопитель к порту роутера, перезагружаем роутер, подключаемся к роутеру по SSH.
ssh root@192.168.135.1 -o port=5863
Устанавливаем необходимые пакеты

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install block-mount kmod-fs-ext4 kmod-usb-storage e2fsprogs kmod-usb-ohci kmod-usb-uhci fdisk

На тот случай если вам будет необходимо получить доступ к исходному разделу для изменения настроек extroot настраиваем его монтирование к каталог /rwm

root@OpenWrt:~# DEVICE="$(awk -e '/\s\/overlay\s/{print $1}' /etc/mtab)"
root@OpenWrt:~# uci -q delete fstab.rwm
root@OpenWrt:~# uci set fstab.rwm="mount"
root@OpenWrt:~# uci set fstab.rwm.device="${DEVICE}"
root@OpenWrt:~# uci set fstab.rwm.target="/rwm"
root@OpenWrt:~# uci commit fstab

Каталог /rwm будет содержать исходный корневой раздел, который используется в качестве основного до тех пор, пока extroot не будет смонтирован.

Настраиваем extroot.
Создаём на подключенном USB накопителье /dev/sda1 раздел ext4
root@OpenWrt:~# mkfs.ext4 /dev/sda1

Конфигурируем /dev/sda1 как новый корневой радел:

root@OpenWrt:~# DEVICE="/dev/sda1"
root@OpenWrt:~# eval $(block info "${DEVICE}" | grep -o -e "UUID=\S*")
root@OpenWrt:~# uci -q delete fstab.overlay
root@OpenWrt:~# uci set fstab.overlay="mount"
root@OpenWrt:~# uci set fstab.overlay.uuid="${UUID}"
root@OpenWrt:~# uci set fstab.overlay.target="/overlay"
root@OpenWrt:~# uci commit fstab

Переносим содержимое текущего корневого раздела на раздел на подключенном USB накопителе:

root@OpenWrt:~# mount /dev/sda1 /mnt
root@OpenWrt:~# cp -a -f /overlay/. /mnt
root@OpenWrt:~# umount /mnt

Перезагружаем роутер:
root@OpenWrt:~# reboot

Контролируем произошедшие изменения.
Web-интерфейс ⇒ Система ⇒ Монтирование разделов должен быть показан раздел на внешнем USB устройстве подмонтированный как overlay.


Web-интерфейс ⇒ Система ⇒ Менеджер пакетов должно быть показано большее свободное пространство на overlay разделе.

Из терминала:

root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 3.8M      3.8M         0 100% /rom
tmpfs                    59.6M    100.0K     59.5M   0% /tmp
/dev/sda1                13.4G     14.0M     12.7G   0% /overlay
overlayfs:/overlay       13.4G     14.0M     12.7G   0% /
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock5            9.7M      4.3M      5.4M  44% /rwm
7 месяцев спустя