Многие пользователи роутеров с OpenWrt или ImmortalWrt сталкиваются с одной и той же проблемой: встроенной памяти катастрофически мало. Стандартные домашние роутеры часто имеют всего 256 МБ постоянной памяти, а пакетов под OpenWrt очень много. Особенно если вы ставите PassWall, набор для обхода блокировок и другие полезные модули, свободное место заканчивается мгновенно.
Но есть решение. Если в вашем роутере есть свободный USB-разъём (лучше USB 3.0, но подойдёт и USB 2.0), вы можете подключить флешку и перенести на неё систему. В этой инструкции мы используем флешку на 32 ГБ. Она стоит недорого, а такого объёма для обычного роутера хватит с запасом.
Инструкция тестировалась на OpenWrt 23.05.04, но полностью подходит и для ImmortalWrt.
Что нам понадобится
Вставьте флешку в USB-порт роутера. Подключитесь по SSH к вашему роутеру. По умолчанию адрес такой:
Если вы меняли IP-адрес роутера, используйте свой.
Обновите список доступных пакетов:
Шаг 2. Устанавливаем необходимые пакеты для работы с USB
Эти пакеты позволят монтировать USB-устройства, форматировать их в файловую систему ext4 и управлять разделами.
Шаг 3. Определяем имя флешки в системе
Выполните команду:
Вы увидите список блочных устройств. С вероятностью 99% ваша флешка будет называться sda. Если у вас в роутере уже подключены другие накопители, имя может быть другим (sdb, sdc и т.д.). Запомните его.
В дальнейшем в командах мы будем использовать DISK="/dev/sda". Если ваша флешка называется иначе, замените sda на нужное имя.
Шаг 4. Форматируем флешку в ext4
Выполните последовательно команды:
Разберём, что здесь происходит. Мы задаём переменную DISK, указывающую на флешку. Создаём на ней таблицу разделов GPT и один раздел extroot, занимающий почти всё свободное место. Затем форматируем этот раздел в файловую систему ext4 и даём ему метку extroot.
Шаг 5. Настраиваем монтирование раздела как основного хранилища
Теперь нужно сказать системе, чтобы при загрузке она использовала этот раздел как основное место для установки пакетов и хранения настроек (overlay). Выполните команды:
Эти команды делают следующее: получают UUID созданного раздела, определяют точку монтирования текущего overlay, настраивают fstab для автоматического монтирования раздела флешки в качестве extroot, а также сохраняют оригинальный overlay в /rwm на случай, если флешка отключится.
Шаг 6. Копируем текущие настройки на флешку
Теперь нужно перенести уже существующие файлы системы на новую флешку.
Первая команда монтирует раздел флешки в папку /mnt. Вторая копирует все файлы из текущего overlay на флешку, сохраняя права доступа и структуру каталогов.
Шаг 7. Перезагружаем роутер
Выполните команду:
После перезагрузки роутер должен автоматически смонтировать флешку как основной overlay. Чтобы проверить, зайдите в веб-интерфейс LuCI в раздел System -> Software. Вы увидите, что свободного места стало значительно больше. Вместо 10-20 МБ теперь доступны гигабайты.
Дополнительно. Сохраняем репозитории пакетов
По умолчанию OpenWrt хранит списки пакетов в оперативной памяти (в папке /var/opkg-lists). После перезагрузки они удаляются, и при каждом входе в раздел Software системе приходится загружать их заново. Это неудобно, особенно на медленных соединениях.
Исправляется одной командой:
Теперь списки пакетов будут сохраняться на флешке и не исчезать при перезагрузке.
Дополнительно. Создаём файл подкачки (swap)
Если в вашем роутере мало оперативной памяти (например, 128 МБ или меньше), имеет смысл создать файл подкачки на флешке. Это не заменит полноценную оперативную память, но поможет избежать зависаний при нехватке ОЗУ.
Выполните команды:
В этом примере создаётся файл подкачки размером 100 МБ. Вы можете увеличить или уменьшить count по своему усмотрению.
Теперь включим этот файл подкачки:
Проверить, что swap работает, можно командой:
Вы должны увидеть созданный файл и его размер.
Почему это особенно актуально для ImmortalWrt
Прошивки ImmortalWrt часто используются для обхода блокировок с помощью PassWall, Shadowsocks, Xray и других инструментов. Полный набор такого ПО может требовать около 100 МБ свободного места. На стандартном роутере с 256 МБ памяти после установки базовой системы остаётся 30-50 МБ. PassWall туда уже не влезает.
С нашей флешкой на 32 ГБ этой проблемы нет. Вы можете ставить любые пакеты, не думая о месте.
Что делать, если флешка отвалится или вы захотите её заменить
OpenWrt сохраняет резервную копию оригинального overlay в папке /rwm. Если флешка выйдет из строя или вы её вытащите, система автоматически переключится на встроенную память. Вы не потеряете доступ к роутеру.
Если вы хотите заменить флешку на другую, просто повторите все шаги начиная с форматирования, предварительно отключив старую флешку.
Итог
Теперь ваш роутер с OpenWrt или ImmortalWrt имеет практически неограниченное (в рамках флешки) место для установки пакетов. Вы можете ставить PassWall, AdGuard Home, Tor, VPN-серверы и любые другие модули без оглядки на встроенную память. Файл подкачки поможет справиться с нехваткой оперативной памяти. А сохранение репозиториев избавит от задержек при открытии раздела Software.
Простая USB-флешка за пару долларов превращает бюджетный роутер в мощное устройство, способное решать любые сетевые задачи. Пользуйтесь.
Но есть решение. Если в вашем роутере есть свободный USB-разъём (лучше USB 3.0, но подойдёт и USB 2.0), вы можете подключить флешку и перенести на неё систему. В этой инструкции мы используем флешку на 32 ГБ. Она стоит недорого, а такого объёма для обычного роутера хватит с запасом.
Инструкция тестировалась на OpenWrt 23.05.04, но полностью подходит и для ImmortalWrt.
Что нам понадобится
- Роутер с OpenWrt или ImmortalWrt.
- USB-флешка (от 4 ГБ, но лучше 16-32 ГБ).
- Доступ к роутеру по SSH.
- Базовые навыки работы с командной строкой.
Вставьте флешку в USB-порт роутера. Подключитесь по SSH к вашему роутеру. По умолчанию адрес такой:
Код:
ssh root@192.168.1.1
Обновите список доступных пакетов:
Код:
opkg update
Код:
opkg install block-mount kmod-fs-ext4 e2fsprogs parted kmod-usb-storage
Шаг 3. Определяем имя флешки в системе
Выполните команду:
Код:
ls -l /sys/block
В дальнейшем в командах мы будем использовать 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}
Шаг 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
Шаг 6. Копируем текущие настройки на флешку
Теперь нужно перенести уже существующие файлы системы на новую флешку.
Код:
mount ${DEVICE} /mnt
Код:
tar -C ${MOUNT} -cvf - . | tar -C /mnt -xf -
Шаг 7. Перезагружаем роутер
Выполните команду:
Код:
reboot
Дополнительно. Сохраняем репозитории пакетов
По умолчанию 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
Теперь включим этот файл подкачки:
Код:
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
Прошивки ImmortalWrt часто используются для обхода блокировок с помощью PassWall, Shadowsocks, Xray и других инструментов. Полный набор такого ПО может требовать около 100 МБ свободного места. На стандартном роутере с 256 МБ памяти после установки базовой системы остаётся 30-50 МБ. PassWall туда уже не влезает.
С нашей флешкой на 32 ГБ этой проблемы нет. Вы можете ставить любые пакеты, не думая о месте.
Что делать, если флешка отвалится или вы захотите её заменить
OpenWrt сохраняет резервную копию оригинального overlay в папке /rwm. Если флешка выйдет из строя или вы её вытащите, система автоматически переключится на встроенную память. Вы не потеряете доступ к роутеру.
Если вы хотите заменить флешку на другую, просто повторите все шаги начиная с форматирования, предварительно отключив старую флешку.
Итог
Теперь ваш роутер с OpenWrt или ImmortalWrt имеет практически неограниченное (в рамках флешки) место для установки пакетов. Вы можете ставить PassWall, AdGuard Home, Tor, VPN-серверы и любые другие модули без оглядки на встроенную память. Файл подкачки поможет справиться с нехваткой оперативной памяти. А сохранение репозиториев избавит от задержек при открытии раздела Software.
Простая USB-флешка за пару долларов превращает бюджетный роутер в мощное устройство, способное решать любые сетевые задачи. Пользуйтесь.