Как увеличить память в OpenWrt и ImmortalWrt с помощью USB-флешки. Полный гайд по настройке extroot и swap

AmnesicNode

⚡ Contributor
ACTIVE NODE
INITIATED
Многие пользователи роутеров с OpenWrt или ImmortalWrt сталкиваются с одной и той же проблемой: встроенной памяти катастрофически мало. Стандартные домашние роутеры часто имеют всего 256 МБ постоянной памяти, а пакетов под OpenWrt очень много. Особенно если вы ставите PassWall, набор для обхода блокировок и другие полезные модули, свободное место заканчивается мгновенно.

Но есть решение. Если в вашем роутере есть свободный USB-разъём (лучше USB 3.0, но подойдёт и USB 2.0), вы можете подключить флешку и перенести на неё систему. В этой инструкции мы используем флешку на 32 ГБ. Она стоит недорого, а такого объёма для обычного роутера хватит с запасом.

Инструкция тестировалась на OpenWrt 23.05.04, но полностью подходит и для ImmortalWrt.

Что нам понадобится

  • Роутер с OpenWrt или ImmortalWrt.
  • USB-флешка (от 4 ГБ, но лучше 16-32 ГБ).
  • Доступ к роутеру по SSH.
  • Базовые навыки работы с командной строкой.
Шаг 1. Подключаемся к роутеру и обновляем пакеты

Вставьте флешку в USB-порт роутера. Подключитесь по SSH к вашему роутеру. По умолчанию адрес такой:


Код:
ssh root@192.168.1.1
Если вы меняли IP-адрес роутера, используйте свой.

Обновите список доступных пакетов:


Код:
opkg update
Шаг 2. Устанавливаем необходимые пакеты для работы с USB


Код:
opkg install block-mount kmod-fs-ext4 e2fsprogs parted kmod-usb-storage
Эти пакеты позволят монтировать USB-устройства, форматировать их в файловую систему ext4 и управлять разделами.

Шаг 3. Определяем имя флешки в системе

Выполните команду:


Код:
ls -l /sys/block
Вы увидите список блочных устройств. С вероятностью 99% ваша флешка будет называться sda. Если у вас в роутере уже подключены другие накопители, имя может быть другим (sdb, sdc и т.д.). Запомните его.

В дальнейшем в командах мы будем использовать DISK="/dev/sda". Если ваша флешка называется иначе, замените sda на нужное имя.

Шаг 4. Форматируем флешку в ext4

Выполните последовательно команды:


Код:
DISK="/dev/sda"

parted -s ${DISK} -- mklabel gpt mkpart extroot 2048s -2048s

DEVICE="${DISK}1"

mkfs.ext4 -L extroot ${DEVICE}
Разберём, что здесь происходит. Мы задаём переменную DISK, указывающую на флешку. Создаём на ней таблицу разделов GPT и один раздел extroot, занимающий почти всё свободное место. Затем форматируем этот раздел в файловую систему ext4 и даём ему метку extroot.

Шаг 5. Настраиваем монтирование раздела как основного хранилища

Теперь нужно сказать системе, чтобы при загрузке она использовала этот раздел как основное место для установки пакетов и хранения настроек (overlay). Выполните команды:


Код:
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
Эти команды делают следующее: получают UUID созданного раздела, определяют точку монтирования текущего overlay, настраивают fstab для автоматического монтирования раздела флешки в качестве extroot, а также сохраняют оригинальный overlay в /rwm на случай, если флешка отключится.

Шаг 6. Копируем текущие настройки на флешку

Теперь нужно перенести уже существующие файлы системы на новую флешку.


Код:
mount ${DEVICE} /mnt

Код:
tar -C ${MOUNT} -cvf - . | tar -C /mnt -xf -
Первая команда монтирует раздел флешки в папку /mnt. Вторая копирует все файлы из текущего overlay на флешку, сохраняя права доступа и структуру каталогов.

Шаг 7. Перезагружаем роутер

Выполните команду:


Код:
reboot
После перезагрузки роутер должен автоматически смонтировать флешку как основной overlay. Чтобы проверить, зайдите в веб-интерфейс LuCI в раздел System -> Software. Вы увидите, что свободного места стало значительно больше. Вместо 10-20 МБ теперь доступны гигабайты.

Дополнительно. Сохраняем репозитории пакетов

По умолчанию OpenWrt хранит списки пакетов в оперативной памяти (в папке /var/opkg-lists). После перезагрузки они удаляются, и при каждом входе в раздел Software системе приходится загружать их заново. Это неудобно, особенно на медленных соединениях.

Исправляется одной командой:


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

opkg update
Теперь списки пакетов будут сохраняться на флешке и не исчезать при перезагрузке.

Дополнительно. Создаём файл подкачки (swap)

Если в вашем роутере мало оперативной памяти (например, 128 МБ или меньше), имеет смысл создать файл подкачки на флешке. Это не заменит полноценную оперативную память, но поможет избежать зависаний при нехватке ОЗУ.

Выполните команды:


Код:
DIR="$(uci -q get fstab.extroot.target)"

dd if=/dev/zero of=${DIR}/swap bs=1M count=100

mkswap ${DIR}/swap
В этом примере создаётся файл подкачки размером 100 МБ. Вы можете увеличить или уменьшить count по своему усмотрению.

Теперь включим этот файл подкачки:


Код:
uci -q delete fstab.swap

uci set fstab.swap="swap"

uci set fstab.swap.device="${DIR}/swap"

uci commit fstab

service fstab boot
Проверить, что swap работает, можно командой:


Код:
cat /proc/swaps
Вы должны увидеть созданный файл и его размер.

Почему это особенно актуально для ImmortalWrt

Прошивки ImmortalWrt часто используются для обхода блокировок с помощью PassWall, Shadowsocks, Xray и других инструментов. Полный набор такого ПО может требовать около 100 МБ свободного места. На стандартном роутере с 256 МБ памяти после установки базовой системы остаётся 30-50 МБ. PassWall туда уже не влезает.

С нашей флешкой на 32 ГБ этой проблемы нет. Вы можете ставить любые пакеты, не думая о месте.

Что делать, если флешка отвалится или вы захотите её заменить

OpenWrt сохраняет резервную копию оригинального overlay в папке /rwm. Если флешка выйдет из строя или вы её вытащите, система автоматически переключится на встроенную память. Вы не потеряете доступ к роутеру.

Если вы хотите заменить флешку на другую, просто повторите все шаги начиная с форматирования, предварительно отключив старую флешку.

Итог

Теперь ваш роутер с OpenWrt или ImmortalWrt имеет практически неограниченное (в рамках флешки) место для установки пакетов. Вы можете ставить PassWall, AdGuard Home, Tor, VPN-серверы и любые другие модули без оглядки на встроенную память. Файл подкачки поможет справиться с нехваткой оперативной памяти. А сохранение репозиториев избавит от задержек при открытии раздела Software.

Простая USB-флешка за пару долларов превращает бюджетный роутер в мощное устройство, способное решать любые сетевые задачи. Пользуйтесь.
 
Верх