Найти тему
DarkSidè

Хранение данных на USB-накопителе в OpenWrt

Многие пользователи OpenWrt/ImmortalWrt сталкивались с проблемой нехватки постоянной памяти, потому что, в лучшем случае в домашнем роутере суммарно 256МБ постоянной памяти, а ПО в OpenWrt очень много. Эту проблему можно решить, если в роутере с OpenWrt есть свободный USB-разъем, в идеале, чтобы это был разъем USB 3.0, но USB 2.0 тоже подойдет. В этот разъем можно вставить флешку и скопировать на неё OpenWrt, таким образом, постоянная память будет увеличена на объем флешки, в примере я буду использовать флешку на 32ГБ, стоит такая флешка очень дешево, а такого количества памяти для обычного роутера хватит. Тестирование производится на OpenWrt 23.05.04, данная инструкция актуальна и для ImmortalWrt.

Первым делом надо подключиться к роутеру по SSH, флешка в роутер должна быть уже вставлена:

ssh root@192.168.1.1

Теперь надо обновить список пакетов:

opkg update

Далее установить необходимые пакеты для работы с USB-устройствами:

opkg install block-mount kmod-fs-ext4 e2fsprogs parted kmod-usb-storage

Теперь надо вывести список устройств и посмореть, как называется флешка в системе:

ls -l /sys/block

С вероятностью 99% она будет называться sda.

Теперь надо отформатировать флешку в ext4 командами:

DISK="/dev/sda"
parted -s ${DISK} -- mklabel gpt mkpart extroot 2048s -2048s
DEVICE="${DISK}1"
mkfs.ext4 -L extroot ${DEVICE}

После этого надо сконфигурировать разделы на флешке при помощи команд:

eval $(block info ${DEVICE} | grep -o -e 'UUID="\S*"')
eval $(block info | grep -o -e 'MOUNT="\S*/overlay"')
uci -q delete fstab.extroot
uci set fstab.extroot="mount"
uci set fstab.extroot.uuid="${UUID}"
uci set fstab.extroot.target="${MOUNT}"
uci commit fstab
ORIG="$(block info | sed -n -e '/MOUNT="\S*\/overlay"/s/:\s.*$//p')"
uci -q delete fstab.rwm
uci set fstab.rwm="mount"
uci set fstab.rwm.device="${ORIG}"
uci set fstab.rwm.target="/rwm"
uci commit fstabНажмите для раскрытия...

Для копирования текущих настроек на флешку, надо выполнить команды:

mount ${DEVICE} /mnt
tar -C ${MOUNT} -cvf - . | tar -C /mnt -xf -

После этих команд надо перезагрузить роуер и убедиться, что теперь для устаноки дополнительного ПО гораздо больше места, сделать это можно, зайдя в System>Software.

Помимо этого, можно сохранить репозитории OpenWrt в постоянную память, чтобы не приходилось их обновлять после каждой перезагрузки роутера. Сделать это можно при помощи команд:

sed -i -e "/^lists_dir\s/s:/var/opkg-lists$:/usr/lib/opkg/lists:" /etc/opkg.conf
opkg update

Для роутеров с малым количеством ОЗУ можно сделать файл подкачки (swap) на флешке при помощи команд:

DIR="$(uci -q get fstab.extroot.target)"
dd if=/dev/zero of=${DIR}/swap спам=1M count=100

Где 100 - размер файла подкачки в МБ

mkswap ${DIR}/swap

Включение файла подкачки:

uci -q delete fstab.swap
uci set fstab.swap="swap"
uci set fstab.swap.device="${DIR}/swap"
uci commit fstab
service fstab boot

Проверка работы файла подкачки:

cat /proc/swaps

Данный способ увеличения постоянной памяти особенно актуален для роутеров на ImmortalWrt с PassWall, где полный набор ПО для обхода блокировок требует около 100МБ свободного места