Многие пользователи 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МБ свободного места