Бюджетные и среднеценовые 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
- Запускаем утилиту:
cfdisk /dev/mmcblk0
- Выбираем пункт Free space — он обычно гигантский: у меня 57 ГБ.
- Нажимаем New, соглашаемся с размером по умолчанию (берёт всю свободу) или вводим свой.
- Жмём Write, печатаем магическое
yes
, подтверждая изменения. - Выходим через 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
, ведь даже самый стойкий флеш-чип когда-нибудь устанет.