Openwrt как освободить память

Обновлено: 01.07.2024

И отключаем следующие пункты в этом же порядке, иначе из-за зависимостей отключение может быть заблокировано.

OpenWRT — отказываемся от средств отладки

Еще одна небольшая заметка про уменьшение размера собираемой вручную прошивки OpenWRT В этот раз мы отключим информацию для отладки. Это позволит сэкономить еще 64 kb

Отключение Debug-инфо и DebugFS

Данные инструменты абсолютно бесполезны большинству пользователей, а существует для разработчиков ПО.
Итак, запускаем конфигуратор OpenWRT

Теперь после сборки освободится еще 64 kb места для установки своих пакетов прямо в прошивку.

+ Полезное от DCBEELINEKZ

Разблокирование 12, 13 и 14-го каналов wifi в openwrt

Kernel modules-->Wireless Drivers-->kmod-ath-->configuration <*> Force Atheros drivers to respect the user's regdomain settings

Как без программатора и usb-uart прошить u-boot:

Закидываем в папку наш загрузчик, через программу WinSCP в /tmp для роутера например 740n это u-boot-ar9331.bin
Переписываем загрузчик на наш: mtd -r write /tmp/u-boot-ar9331.bin u-boot

В обычной прошивке запись u-boot заблокированы.
Если надо поменять одну из частей, надо собирать самому, меняя как показано
В openwrt /target/linux/ar71xx/files/drivers/mtd/tplinkpart.c
и поменять "MTD_WRITEABLE" на "0"

Выбираем оптимизацию — скорость или размер

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

Здесь первый параметр -Os — и есть флаг оптимизации размера. Поменяем его на -O2. Таким образом размер занимаемой прошивки вырастет процентов на 5-10, как и скорость работы. В принципе не очень и вырост в производительности, но в случае с такими медленными по современным меркам процессорами — уже приятно.

Включение дефолтного конфига в прошивку

* Просто кладём все файлы в openwrt/files (нужно сохранить структуру). Т.е. если вы хотите зашить в прошивку файл /etc/wireless, то надо создать файл files/etc/wireless
* после чего пере собираем прошивку: make

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

В OpenWrt существует встроенная система управлением пакетами Package management system. OpenWrt предлагает репозиторий Software repository, который на момент февраля 2011 содержал порядка 2000 пакетов. Это не опечатка. Существуют и другие проекты, предоставляющие свои репозитории в дополнение к существующим Программа, которая осуществляет их установку, учет и удаление, называется opkg-manager.

Официальные пакеты

Официальные пакеты OpenWrt могут быть найдены в отдельной папке с пакетами на сервере репозитория. Пакеты, содержащие только исполняемые скрипты (shell-scripts-only), конечно-же, архитектурно-независимы. Пакеты, содержащие бинарные файлы, зависят от архитектуры, а некоторые, например, kmods - зависят от специфической версии ядра.

У каждого нового релиза есть своя дирректтория, в которую входят суб-дирректории для различных поддерживаемых платформ, а каждая платформная дирректория содержит собранные файлы (pre-build images), а дирректория packages содержит установочные файлы *.ipk.

Создание собственных пакетов

→ Как создать пакет - статья рассказывает о том как создать пакет для OpenWrt используя набор инструментов (Buildroot)
→ crosscompile. Как скомпилировать свою программу для OpenWRT.

Сторонние пакеты

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

Примеры источников сторонних пакетов:

NSLU2 "optware" - пакет ориентированный на использование устройства с внешними носителями информации

Использование пакетного менеджера OPKG

→ opkg – Полное описание всех команд. Ниже приведен короткий список самых часто используемых команд:

Расширяем дисковую память Chaos Calmer 15.05.1 OpenWRT на USB флешку


После установки скомпилированной разработчиками OpenWRT прошивки Chaos Calmer 15.05.1 на ваш роутер с 4мб дисковой памяти вы обнаружите, что у вас осталось всего навсего 300кб для прочих нужд. Для решения одной задачи этого может и хватит, как например, для организации принт-сервера посредством OpenWRT, но никак не более. Поэтому логично первым делом заняться увеличением дискового пространства для маневров. И все это без компиляции собственной прошивки и прочих танцев с бубном. Когда нужно решать задачу быстро из того что имеем.

Имея доступ в интернет с нашего роутера, авторизуемся на нем через SHH соединение при помощи программы PuTTY и последовательно начнем:

Сначала обновляем список пакетов

Далее устанавливаем поддержку USB устройств на нашем роутере

opkg install kmod-usb-storage

Далее нам нужна флешка, где вы заранее cоздали бы хотя бы 2 раздела, основной (пока не важно какой файловой системы) и так называемый раздел подкачки (стандартный linux swap). На моей 16Gb флешке я создал 3 раздела: первый на 1gb без файловой системы для расширения встроенной памяти устройства - собственно под overlay, второй самый большой раздел на 13gb тоже пока без файловой системы буду монтировать как отдельный том, и третий раздел на сотню с лишним мегабайт как файл подкачки linux. Разбить флешку на разделы через fdisk роутера не получится - не хватит памяти для установки нужных пакетов пока, поэтому сделать это придется на другой Linux машине или из под Windows, например, при помощи программы Minitool Partition Wizard.

После чего готовую к форматированию вставляем в usb разъем и вводим команду:

[ 2598.210000] usb 1-1.4: new high-speed USB device number 4 using ehci-platform
[ 2598.330000] usb-storage 1-1.4:1.0: USB Mass Storage device detected
[ 2598.340000] scsi host1: usb-storage 1-1.4:1.0
[ 2599.340000] scsi 1:0:0:0: Direct-Access SanDisk Ultra Fit 1.00 PQ: 0 ANSI: 6
[ 2599.350000] sd 1:0:0:0: [sda] 30031250 512-byte logical blocks: (15.3 GB/14.3 GiB)
[ 2599.350000] sd 1:0:0:0: [sda] Write Protect is off
[ 2599.360000] sd 1:0:0:0: [sda] Mode Sense: 43 00 00 00
[ 2599.360000] sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 2599.380000] sda: sda1 sda2 sda3
[ 2599.390000] sd 1:0:0:0: [sda] Attached SCSI removable disk

Флешка у меня определилась как sda1, sda2 и sda3. Все верно, 3 раздела.

Ну есть одно НО, которое я еще решил стандартными средствами OpenWRT. Мы не можем создать разделы и отформатировать флешку в файловой системе f2fs при помощи утилит f2fs-tool – mkfs.f2fs потому , что в прошивке не рабочая версия 1.4.0 данной программы. Некий бонус от сборщика прошивки так сказать. Поэтому создать разделы, отформатировать ее придется на другой Linux машине или приложении Windows.

Далее устанавливаем собранный мной пакет f2fs-tools версии 1.4.1 для ветки 15.05.1, который поможет нам отформатировать флешку прямо с нашего роутера, вдруг даже виртуальной Linux машины нет под рукой. Cначала ставим утилиту форматирования в файловой системе F2FS:

Затем обновленную библиотеку поддержки файловой системы F2FS.

Далее форматируем первый раздел нашей флешки в F2FS.

mkfs.f2fs -l overlay /dev/sda1

И в моем случае еще и второй раздел

mkfs.f2fs -l data /dev/sda2

Далее удаляем не нужные нам теперь libf2fs f2fs-tools

opkg remove f2fs-tools libf2fs

Устанавливаем поддержку файловой системы F2FS ядра. Не то, чтобы я ее ярый фанат, но она единственная - установочный модуль которой весит всего ничего и не тянет за собой кучу зависимостей. И разработана была специально для флеш носителей информации.

opkg install kmod-fs-f2fs

Уже можем проверить как она монтируемся

mount /dev/sda1 /mnt

Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 512 408 104 80% /
/dev/root 2304 2304 0 100% /rom
tmpfs 14288 640 13648 4% /tmp
/dev/mtdblock3 512 408 104 80% /overlay
overlayfs:/overlay 512 408 104 80% /
tmpfs 512 0 512 0% /dev
/dev/sda1 1021952 143368 860152 14% /mnt

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

tar -C /overlay -cvf - . | tar -C /mnt -xf -

дабы не записалось ничего лишнего отмонтируемся

Далее нам нужно установить пакет block-mount, который занимается монтированием дисков туда, куда ему укажут на этапе загрузки устройства. Но и тут подкралась вторая засада – пакет block-mount который предлагает репозитарий OpenWrt для ветки Chaos Calmer 15.05.1 – не поддерживает указание дисков в файловой системе f2fs как overlay устройств. Просто забыли прописать в данном пакете ее поддержку. Поэтому придется поставить усовершенствованную версию пакета block-mount, предоставленную мной, которая кстати сгодится для всех у кого ветка Chaos Calmer 15.05.1 и устройство на архитектуре ar71xx.

block detect > /etc/config/fstab

У меня после команды block detect файл fstab выглядит так

Открываем файл fstab в текстовом редакторе vi

Жмем букву i переходим в режим редактирования и приводим его к виду

То есть мы включили монтирование разделов на этапе загрузки системы, а также подмену внутренней памяти ( /overlay) на 1 раздел на флеш накопителе по его уникальному uuid номеру. Дальше жмем ESC, вводим символы

Что в Vi означают выйти записав изменения и жмем enter. Файл fstab перезаписался. Перезагружаем конфиги fstab:

Наконец-то перегружаем наш роутер

После перезагрузки смотрим команду

и если все прошло как надо вы увидите что-то наподобие

Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 1021952 144408 859112 14% /
/dev/root 2304 2304 0 100% /rom
tmpfs 14288 76 14212 1% /tmp
/dev/sda1 1021952 144408 859112 14% /overlay
overlayfs:/overlay 1021952 144408 859112 14% /
tmpfs 512 0 512 0% /dev

Где вы видим, что раздел /dev/sda1 теперь и есть наша дисковая память. То же самое можно проверить зайдя в Luci на вкладку Software и увидеть, что для дальнейших извращений мы теперь готовы:


Таким образом мы расширили дисковую память нашего 4 мб OpenWRT роутера без каких-либо компиляций собственной прошивки и без внешней Linux машины под рукой.

Я пытаюсь настроить OpenWrt на моем устройстве и не хватает места. Я загружал несколько пакетов инструментов. Теперь, как я могу определить их вес, чтобы решить, что удалить?

Можно ли отобразить размер установленных пакетов с помощью OPKG?

Не все среды OpenWrt настроены одинаково, поэтому мой ответ - выстрел в темноте .

Пример вывода взят из OpenWrt-12.09 на TP-Link TL-WDR4300.

ssh в ваш роутер.

Проверьте свои файловые системы.

/dev/sda1 это карта micro SD моей флешки UMTS . просто проигнорируйте это.

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

Загляни внутрь /overlay .

Этот каталог содержит информацию о дополнительно установленных пакетах. Файлы, заканчивающиеся на, .list являются списками файлов, установленных пакетом с похожим именем (без .list ):

Пакет zlib имеет 3 установленных файла.

Пакет zlib содержит 73 Кбайт установленных файлов.

Сырой 1-вкладыш, чтобы склеить все это вместе, и это сокращает выход:

Следующий вывод взят из OpenWrt-12.09 на TP-Link TL-WR703N и показывает, как добавить сортировку вывода по размеру пакета.

Посмотрите, где и как переменная S входит в игру .

Вышеуказанный способ был протестирован на OpenWrt-AA.

Теперь , глядя на Lede-17.01 путь изменился: Замена /overlay с /overlay/upper исправлениями этого.

Статус-кво ( opkg-list-user-installed-sorted-by-size не как 1-лайнер):

Открытый вопрос: когда произошло это изменение в /overlay российской структуре? LEDE-17 является преемником OpenWrt-CC, и у меня нет систем под управлением OpenWrt. Так что если вам это нужно на OpenWrt-BB или -CC, сначала загляните внутрь /overlay .

Основываясь на решении Йети , есть еще одна возможность, которая может быть быстрее. Вместо того, чтобы вычислять размер du для файлов в list файле, мы можем использовать объявленный размер в control файле.

Что-то вроде моего маленького opkg_sizes сценария

Если вы хотите, чтобы вывод был отсортирован, вы можете запустить его через sort :

Сравнивая результаты моего сценария к йети «S Выявленные различия. Это потому, что он ссылался, /overlay/usr/lib/opkg/info пока я думал, что /overlay префикс не нужен. Ну, я не совсем понимаю, почему, но /usr/lib/opkg/info дает также системные пакеты, в то время как /overlay/usr/lib/opkg/info дает только пакеты пользователя.

Итак, если пользователь также заинтересован в системных пакетах, используйте первую версию. Но чтобы получить только пакеты пользователя, просто замените первую строку на:

После этого оба сценария ссылаются на одни и те же пакеты, но с разными номерами . (кроме очевидной разницы между байтами и килобайтами :-))

ls показывает размер в байтах, du показывает размер всех блоков, выделенных файлом.

Читайте также: