Скрытое золото eMMC: превращаем внутреннюю память роутера RAX3000M в полноценное хранилище OpenWrt

Скрытое золото eMMC: превращаем внутреннюю память роутера RAX3000M в полноценное хранилище OpenWrt

Бюджетные и среднеценовые Wi-Fi-устройства давно ставят быстрые eMMC-чипы. Производители закладывают крошечный системный раздел, а остальное пространство лениво пылится. Можно смириться и продолжать сбрасывать логи на удалённый syslog-сервер , но куда интереснее превратить «лишние» гигабайты в надёжный локальный диск под медиатеку, резервные копии или контейнеры. Тем более что штатная флэш-память часто быстрее дешёвых USB-накопителей, а главный риск — неправильно использовать GPT и превратить роутер в кирпич — сводится к нулю, если действовать аккуратно.

Кратко о железе: eMMC, NAND, NOR — кто есть кто

eMMC-модуль сочетает контроллер и флеш-ячейки в одном корпусе, выдаваяся системой как обычный блоковый девайс /dev/mmcblk0. Его главное отличие от сырой NAND — встроенный wear-levelling: контроллер сам равномерно распределяет записи и скрывает дефекты, поэтому файловые системы вроде ext4 чувствуют себя почти как на SSD. NOR-память тем временем сохранилась лишь для загрузчика U-Boot, которому важна мгновенная адресация отдельных байтов. Пользователю NOR редко достаётся хотя бы мегабайт свободного места.

Разметка RAX3000M: зачем GPT и почему системе хватает 500 МБ

Ассемблер загрузчика прописывает в прошивке GPT-схему: около полугигабайта под squashfs + overlay, а дальше чистый лист. Для штатного образа OpenWrt этого резервуара достаточно — в системный раздел помещаются ядро, базовые пакеты и несколько килобайт конфигурации. Всё остальное свободно. Именно здесь мы создадим пользовательский том. GPT хорош тем, что разделы можно пересоздавать без жонглирования первичными/расширенными, а таблица автоматически дублируется в хвосте диска — шанс потерять её целиком минимален.

Подготовка окружения: ставим инструменты одним опкг-залпом

Под рутом выполняем:

opkg update
 opkg install block-mount kmod-fs-ext4 e2fsprogs lsblk cfdisk
 

Пакет block-mount добавляет LuCI-раздел «Точки монтирования», kmod-fs-ext4 приносит драйвер файловой системы, e2fsprogs даёт mkfs.ext4, lsblk показывает блочные устройства, а cfdisk простым интерфейсом обходит опасность случайного ввода цифр в fdisk. Если LuCI упрямо не отражает новое меню, помогает жёсткое обновление кэша, повторный вход или крайняя мера — команда reboot.

Создаём новый раздел: танец стрелками в cfdisk

  1. Запускаем утилиту:
    cfdisk /dev/mmcblk0
  2. Выбираем пункт Free space — он обычно гигантский: у меня 57 ГБ.
  3. Нажимаем New, соглашаемся с размером по умолчанию (берёт всю свободу) или вводим свой.
  4. Жмём Write, печатаем магическое yes, подтверждая изменения.
  5. Выходим через Quit или клавишу q.

Проверяем результат:

lsblk

Должно появиться что-то вроде mmcblk0p6 57.1G. Если вместо шестого раздела видите другой индекс — не паникуйте, скрипты OpenWrt не привязаны к номерам.

Файловая система: выбираем ext4 и форматируем без клинков

На eMMC можно смело использовать ext4 — журналирование чуть съедает ресурс, но wear-levelling сглаживает износ. Если хотите squeeze максимальное число перезаписей, рассмотрите f2fs, однако драйвер иногда «сыплет» предупреждения на нестандартных контроллерах. Команда форматирования проста:

mkfs.ext4 /dev/mmcblk0p6

Добавляем «фирменный» метадрайвер для удобства:

tune2fs -L userstore /dev/mmcblk0p6

Теперь том легко распознать по метке userstore.

Монтируем через LuCI: щелчками мыши вместо шнурка консоли

  • Идём в System → Mount Points.
  • Жмём Add. В поле UUID выбираем наш раздел (LuCI отображает и метку, и размер, ошибиться сложно).
  • В строке Mount point выбираем custom и пишем, например, /mnt/media. После ввода нажмите Enter; на мобильных браузерах иногда нужен второй тап вне поля.
  • Нажимаем Save & Apply. Через секунду в списке появляется новый пункт со статусом «Mounted».

Готово: каждый рестарт роутера подключит папку автоматически. Для проверки создайте файл:

dd if=/dev/zero of=/mnt/media/test.bin bs=1M count=100
 rm /mnt/media/test.bin

Тест скорости: встроенный накопитель даёт фору USB 2.0

Средний eMMC в RAX3000M читает 160 МБ/с и пишет около 90 МБ/с. Для хранения torrent-раздач и бэкапов этого достаточно, а фильмы в 4K без проблем стримятся по Gigabit Ethernet. Проверка hdparm -tT /dev/mmcblk0p6 выдаёт похожие цифры, что подтверждает практику. При желании поднимите NFS-сервер или Samba и делитесь контентом с телевизором.

Как пережить firstboot и sysupgrade и не расплакаться

Прошивка OpenWrt при сбросе настроек заново генерирует /etc/config/fstab, но не трогает сам пользовательский раздел. После firstboot достаточно повторно зайти в Mount Points, выбрать UUID, указать прежний путь и сохранить. Та же процедура после sysupgrade: данные останутся нетронутыми, LuCI-пункт исчезнет, но быстро восстанавливается вручную. Чтобы забыть об этом рутине, добавьте скрипт-конфигуратор в /etc/uci-defaults/99-restore-gpt.sh, который при запуске проверит наличие нужной метки и допишет FSTab автоматически.

Резервные копии: почему стоит держать копию таблички GPT

Хотя GPT дублируется, человеко-машинный фактор никто не отменял. Одной командой сохраняем бинарный дамп:

dd if=/dev/mmcblk0 of=/root/gpt-backup.bin bs=1M count=8

Файл весит всего восемь мегабайт, но в критической ситуации его восстановление сбережёт нервы. Копию можно залить в облако командой scp или рантайм — зашифровать с помощью age и слить на GitHub Gist.

Бонус: перенос /overlay или Docker-контейнеров на eMMC

Тем, кому постоянно не хватает места под пакеты, пригодится перенос overlay на новый раздел. Суть проста: создаём каталог /mnt/media/upper, правим /etc/config/fstab, добавляя:

config overlay
     option device '/dev/mmcblk0p6'
     option enabled '1'

После перезагрузки корневая точка чтения-записи перескакивает на eMMC, а 500-мегабайтная системная партиция превращается в резерв. Фирменный контейнерный менеджер docker-ce также устанавливается в пару кликов — достаточно переключить /var/lib/docker на свободный том и запустить сервис.

Итоги: когда встроенный флеш-диск выигрывает у внешнего USB

Использовать eMMC логично, если:

  • нужна приличная скорость без переходников;
  • хочется занять свободный порт под принтер или 4G-модем;
  • планируется компактный медиасервер без свисающих флешек.

USB-SSD всё ещё полезен, когда требуется миграция данных между устройствами или запись огромных бэкапов. В остальных сценариях встроенный накопитель — почти бесплатный апгрейд, особенно учитывая, что он уже запитан, охлаждён и скрыт внутри корпуса. Главное — не забывать о бэкапах GPT и регулярной проверке smartctl, ведь даже самый стойкий флеш-чип когда-нибудь устанет.

eMMC RAX3000M OpenWrt память роутер
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

Культура отмены: новая инквизиция или эволюция справедливости

От цифрового остракизма до алгоритмов ненависти: как виртуальная толпа с факелами превратилась в бизнес-модель.

Комнатный Блогер

Объясняю новую цифровую реальность