Openwrt read only file system

Openwrt read only file system

User Tools

Site Tools

Table of Contents

This article is about file systems in the OpenWrt installation on built-in flash. For general external support for installing file systems on other devices, including partitioning and mounting see this page about general storage.

Please read about the → flash.layout as well. Also, note that there are two types of flash memory: NOR flash and NAND flash. Also, you should read up on mtd .

Common File System


Used to merge two filesystems, one read-only and the other writable. flash.layout explains how this is used in OpenWrt.



SquashFS is a read only compressed filesystem. While gzip is available, at OpenWrt it uses LZMA for the compression. Since SquashFS is a read only filesystem, it doesn’t need to align the data, allowing it to pack the files tighter thus taking up significantly less space than JFFS2 (20-30% savings over a JFFS2 filesystem)!

There is a generic problem when running SquashFS on NAND: The issue is that SquashFS has no bad block management at all and requires all blocks on order; but for proper NAND bad block management you also need to be able to skip bad blocks and occasionally relocate blocks (see squashfs and NAND flash). That’s why raw SquashFS is a bad idea on NAND (it works if you use a FTL like UBIFS).


JFFS2 is a writable compressed filesystem with journaling and wear leveling using LZMA for the compression.


Other filesystems

OpenWrt does not use other filesystems as rootfs. It supports several filesystem attached to via various mechanisms like USB, SATA or network. For a list see storage.


Implementation in OpenWrt

The flash.layout article documents how OpenWrt uses both SquashFS and JFFS2 filesystems combined into one filesystem by overlayfs. The kernel is also stored separately from these partitions in raw flash. When the kernel is built, it is also compressed with LZMA and gzip, as documented in imagebuilder.

Boot process

System bootup is as follows: →process.boot

/overlay was previously named /jffs2


: Please feel free to merge Explanation 1 with Explanation 2

Explanations 1

Both SquashFS and JFFS2 are compressed filesystems using LZMA for the compression. SquashFS is a read only filesystem while JFFS2 is a writable filesystem with journaling and wear leveling.
Our job when writing the firmware is to put as much common functionality on SquashFS while not wasting space with unwanted features. Additional features can always be installed onto JFFS2 by the user. The use of mini_fo / overlayfs means that the filesystem is presented as one large writable filesystem to the user with no visible boundary between SquashFS and JFFS2 – files are simply copied to JFFS2 when they’re written.
It’s not all without side effects however.
The fact that we pack things so tightly in flash means that if the firmware ever changes, the size and location of the JFFS2 partition also changes, potentially wiping out a large chunk of JFFS2 data and corrupting the filesystem. To deal with this, we’ve implemented a policy that after each reflash the JFFS2 data is reformatted. The trick to doing that is a special value, 0xdeadc0de ; when this value appears in a JFFS2 partition, everything from that point to the end of the partition is wiped. So, hidden at the end of the firmware images, is the value 0xdeadcode, positioned such that it becomes the start of the JFFS2 partition.
The fact that we use a combination of compressed and partially read only filesystems also has an interesting effect on package management:
In particular, you need to be careful what packages you update. While opkg is more than happy to install an updated package on JFFS2, it’s unable to remove the original package from SquashFS; the end result is that you slowly start using more and more space until the JFFS2 partition is filled. The opkg util really has no idea how much space is available on the JFFS2 partition since it’s compressed, and so it will blindly keep going until the opkg system crashes – at that point you have so little space you probably can’t even use opkg to remove anything.

Explanation 2

On many embedded targets that use NOR flash for the root filesystem, OpenWrt implements a clever trick to get the most out of the limited flash memory capacity while retaining flexibility for the end-user:
Basically, during the image creation, all of the rootfs contents is packed up in a SquashFS filesystem – a highly efficient filesystem with compression support. There’s one important detail about it though: it is a read-only filesystem. To overcome this limitation OpenWrt uses the remaining portion of the NOR rootfs partition to store an additional read/write jffs2 filesystem which is “overlayed” on top of the rootfs (that is, allowing to read unchanged files from the SquashFS but storing all the modifications made to the jffs2 part).
This design has another important advantage for the end-user: even when the read/write partition is in total mess, he can always boot to the failsafe mode (which mounts only the squashfs part) and proceed from there.

Читайте также:  Pathfinder kingmaker воин билд

Technical Details

The kernel boot process involves discovering of partitions within the NOR flash and it can be done by various target-dependent means:

Either way, if there is a partition named rootfs and MTD_ROOTFS_ROOT_DEV kernel config option is set to yes , this partition is automatically used for the root filesystem.

After that, if MTD_ROOTFS_SPLIT is enabled, the kernel adjusts the rootfs partition size to the minimum required by the particular SquashFS image and automatically adds rootfs_data to the list of the available mtd partitions setting its beginning to the first appropriate address after the SquashFS end and size to the remainder of the original rootfs partition. The resulting list is stored in RAM only, so no partition table of any kind gets actually modified.

For overlaying a special mini_fo filesystem is used, the README is available from the sources at

Can we switch the filesystem to be entirely JFFS2?

Note: : It is possible to contain the entire root filesystem on a JFFS2-Partition only, instead of a combination of both. The advantage is that changes to included files no longer leaves behind an old copy on the read only filesystem. So you could end up saving space. The disadvantage of this would be, that you have no failsafe any longer and also, JFFS2 takes significantly more space then SquashFS.

Yes, it’s technically possible, but a bit of a mess to actually pull off. The firmware has to be loaded as a trx file, which means that you have to put the JFFS2 data inside of the trx. But, as I said above, the trx has a checksum, meaning that if you ever change that data, you invalidate the checksum. The solution is that you install with the JFFS2 data contained within the trx, and then change the trx-boundaries at runtime. The end result is a single JFFS2 partition for the root filesystem. Why someone would want to do it is beyond me; it takes more space, and while it would allow you to upgrade the contents of the filesystem you would still be unable to replace the kernel (outside of the filesystem), meaning that a seamless upgrade between releases is still not possible! Having SquashFS gives you a failsafe mechanism where you can always ignore the JFFS2 partition and boot directly off SquashFS, or restore files to their original SquashFS versions.

I used to have a trick where I could convert a SquashFS install to a JFFS2 install at runtime by copying all the data onto the SquashFS partition and changing the partition boundaries. I never really had much use for the util – not to mention it required a rather large flash to store both SquashFS and JFFS2 copies of the root during transition – so support for it was dropped.


Example pictures: on formated partition / how data is stored (and addressed on ext3)

Оригинал: How to setup OpenWrt extroot, rootfs on USB storage
Автор: Arnab Satapathi
Дата публикации: 29 марта 2017 г.
Перевод: А.Панин
Дата перевода: 20 апреля 2017 г.

В данной статье я поделюсь своим опытом по размещению корневой файловой системы OpenWrt маршрутизатора TP-Link MR-3220 v2.4 на внешнем накопителе с интерфейсом USB.

Хотя я и использовал маршрутизатор TP-Link MR-3220, описанная последовательность действий будет актуальная и для других маршрутизаторов, например, TP-Link WR703N, TP-Link MR3020, D-Link DIR-505 и так далее. Вам придется лишь убедиться в том, что вы загрузили прошивку, подходящую для вашего маршрутизатора.

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

  • Процессор: AR9331-AL3A 400MHz SoC
  • Оперативная память: 32 MB DDR
  • Флэш-память: 4 MB SPI NOR
  • Порты WAN: 10/100М, 1 шт.
  • Порты LAN: 10/100М, 4 шт.
  • Wi-Fi: 150Mbps b/g/n
  • Порты USB: USB 2.0, 1 шт.
Читайте также:  Generic mass storage usb device восстановление

Кратко остановлюсь на качестве аппаратной части маршрутизатора: я разобрал его через час после покупки и после тщательного осмотра пришел к выводу о приемлемом качестве сборки и электронных компонентов.

Ну что же, думаю, уже достаточно сказано об аппаратном обеспечении, поэтому давайте приступим к решению описанной в заголовке статьи задачи, а именно, установке OpenWRT и переносу корневой файловой системы на флеш-накопитель с интерфейсом USB. Процесс прошивки маршрутизатора достаточно прост и связан с использованием веб-интерфейса, а процесс создания внешней файловой системы OpenWRT практически не зависит от используемой модели маршрутизатора.

Какую версию прошивки OpenWRT следует выбрать?

Это один из самых сложных вопросов, так как выбор корректной версии прошивки OpenWRT является залогом успешного создания внешней корневой файловой системы. Мой маршрутизатор отличной работает с разрабатываемой версией прошивки OpenWRT ( trunk , кодовое имя Designated Driver), а также со стабильными версиями 15.05 , 14.07 и 12.09 .

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

По прошествии примерно 12-14 часов экспериментов с различными версиями OpenWRT я выяснил, что лишь при использовании версии OpenWRT 14.07 (кодовое имя Barrier Breaker) или более ранних версий для файловой системы JFFS2 остается пространство, достаточное для установки необходимого для внешней файловой системы минимума пакетов.

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

Какую файловую систему следует использовать в качестве внешней файловой системы?

Еще одним важным вопросом является вопрос об используемой файловой системе; в официальном руководстве OpenWRT говорится о том, что вы можете использовать любую файловую систему, используемую в UNIX-подобных операционных системах, поэтому сразу же можете забыть об FAT32 и NTFS. Но в реальности в качестве внешних файловых систем возможно использование лишь ext4 / ext3 или ext2 . Я протестировал практически все доступные файловые системы (использование которых на флеш-накопителях малого объема является хоть как-то обоснованным):

  • minix — не поддерживается
  • HFS — не поддерживается
  • HFS+ — не поддерживается
  • JFS — не поддерживается
  • XFS — не поддерживается
  • reiserfs — не поддерживается

Да, в UNIX-подобных операционных системах используются и другие файловые системы, такие, как BTRFS, UFS и так далее, но мне не удалось создать ни одну из них рамках в 288КБ свободного пространства, предназначающихся для файловой системы JFFS2, поэтому я не тестировал их на совместимость.

Итак, для маршрутизатора с 4 МБ флэш-памяти была выбрана версия OpenWRT 14.07 или более ранняя и внешняя корневая файловая система ext4 .

Обращаюсь к опытным пользователям OpenWRT: если вам удавалось создать внешнюю корневую файловую систему, отличную от ext4/ext3/ext2, пожалуйста, дайте знать об этом.

Установка OpenWRT на TP-Link MR3220

Вы наверняка используете один из дистрибутивов Linux на вашем компьютере, поэтому вам придется воспользоваться следующей командой для загрузки файла прошивки :

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

  1. Включите маршрутизатор и соедините один из его четырех LAN-портов (желтого цвета на маршрутизаторах TP-Link) с Ethernet-портом компьютера с помощью специального кабеля (патч-корда).
  2. Откройте веб-браузер и перейдите по адресу для доступа к веб-интерфейсу маршрутизатора. Для входа в веб-интерфейс придется ввести имя пользователя (Username:) admin и пароль (Password:) admin .
  3. Теперь нужно перейти в раздел System Tools > Firmware Upgrade , выбрать загруженный файл прошивки с помощью кнопки Browse и нажать на кнопку Upgrade .
  4. Осталось подождать в течение нескольких минут завершения процесса прошивки маршрутизатора и его автоматической перезагрузки.

На этом процесс прошивки маршрутизатора можно считать оконченным; ваш компьютер должен получить новый IP-адрес по протоколу DHCP.

Начальная настройка OpenWRT

Сначала вы должны использовать telnet для входа в OpenWRT:

Если в вашей системе нет telnet, вы можете попробовать выполнить данную команду:

После входа в систему нужно изменить пароль для активации доступа к системе маршрутизатора по протоколу SSH:

Теперь вы можете завершить сессию telnet с помощью команды exit и повторно войти в систему по протоколу SSH:

Установка необходимых пакетов

На этом шаге маршрутизатор должен быть соединен с Интернет, причем вы можете использовать как существующее кабельное или DSL-соединение, так и воспользоваться существующим соединением, установленным на уровне компьютера. Я использовал 3G-соединение, установленное на уровне ноутбука с помощью NetworkManager .

Читайте также:  Tp link tl wn727n чипсет

Для начала убедитесь в том, что ваш маршрутизатор может устанавливать соединение с ресурсами в сети Интернет:

Обновите метаданные репозитория пакетов opkg :

Установите все необходимые пакеты для поддержки накопителей с интерфейсом USB:

Установите модуль ядра для поддержки файловой системы ext4:

Это все, теперь вы должны проверить наличие свободного места на флеш-накопитле с помощью команды df -h и не устанавливать каких-либо других пакетов! Если вы установите любой пакет размером более 10 КБ, вы получите сообщение об отсутствии свободного места на устройстве.

Теперь нужно загрузить все необходимые модули ядра с помощью команды modprobe:

Или просто перезагрузить устройство с помощью команды reboot .

Создание разделов на флеш-накопителе с интерфейсом USB

Теперь давайте создадим разделы на флеш-накопителе с интерфейсом USB, но перед этим стоит ответить на вопрос: "Как много места нужно выделить для внешней файловой системы?" Всего лишь 100-200 МБ будет более, чем достаточно, поэтому в качестве внешней файловой системы я создал файловую систему ext4 в рамках раздела размером в 200 МБ, а вы можете выделить для нее столько места, сколько посчитаете нужным. Я использовал утилиту GParted для изменения таблицы разделов флеш-накопителя объемом в 4 ГБ.

Теперь безопасно извлеките флеш-накопитель и подключите его к порту USB маршрутизатора.

Настройка внешней файловой системы OpenWRT

После подключения накопителя с интерфейсом USB к маршрутизатору в директории /dev файловой системы последнего должны появиться файлы устройств /dev/sda1, /dev/sda2 и так далее. Просто выполните команды приведенные ниже.

Смонтируйте раздел накопителя, изменив /dev/sda2 на путь к файлу устройства для раздела на вашем накопителе:

Скопируйте данные с раздела, смонтированного в директорию /overlay , на раздел флеш-накопителя с интерфейсом USB:

Модифицируйте файл конфигурации /etc/config/fstab для монтирования раздела флеш-накопителя с интерфейсом USB в директорию /overlay :

Теперь отредактируйте файл конфигурации /etc/config/fstab с помощью текстового редактора vi для монтирования раздела с файловой системой ext4 , представленного файлом устройства /dev/sda2 , в директорию /overlay на этапе загрузки системы:

Обратите внимание на следующий пример файла конфигурации fstab:

Установите /overlay в качестве значения параметра target и измените значение параметра enabled с 0 на 1 . Теперь активируйте механизм запуска службы fstab при загрузке системы:

Проверьте корректность активации механизма запуска службы:

И наконец перезагрузите маршрутизатор с помощью команды reboot:

Проверка работоспособности внешней корневой файловой системы

После перезагрузки маршрутизатора следует снова войти в его систему по протоколу SSH и проверить объем свободного места на накопителе с помощью команд df и mount :

Команда df должна вывести информацию о большом количестве свободного места на корневой файловой системе, что означает, что внешняя корневая файловая система работает корректно.

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

Надеюсь, данная простая и понятная статья побудила вас поэкспериментировать с OpenWRT. Если у вас остались вопросы или предложения, вы можете оставить комментарий и не забудьте поделиться ссылкой на статью с друзьями.

Problem: OpenWRT Rooter LeMaker is running on a Banana Pi. Now the modem monitoring system is rebooting the router every 5 minutes without a reason.

Reason: The SD is corrupt – Files System has a problem. We can read this also in the System Log and in the Kernel Log. If we try to install new software in the OpenWRT we get this error:

Collected errors:

* wfopen: //usr/lib/opkg/info/libext2fs.control: Read-only file system.

* wfopen: //usr/lib/opkg/info/libext2fs.postinst: Read-only file system.

* wfopen: //usr/lib/opkg/info/libext2fs.prerm: Read-only file system.

Also in the top of the web interface we can see, there are many “Unsaved changes”.

OpenWRT Unsaved Changes

The system can’t write to the disk . Also we can’t install any tools to check the file system.

Solution OpenWRT Read-only file system:

Create a backup from you System ( System – Backup / Flash Firmware). Then remove the SD card from your Banana PI and flash the OpenWRT again! There is now way to fix the problem.

OpenWRT backup

When you’re a finished then you can Restore backup. So you get all settings back to your router. Only additional software you have to install again.

If on your router has installed the e2fsck pack, you can run

You can put this in the Local Startup!

You must confirm all questions with Y. Then reboot the router.

Then you should enable the “Check Files System” on your router to prevent errors.

You will find this option on System – Mount Points


Ссылка на основную публикацию
Mysql вывести последнюю запись
Это пример кода для выбора всех записей из таблицы. Может ли кто-нибудь показать мне, как выбрать последнюю запись этой таблицы?...
M3u8 чем открыть на андроид
вкл. 13 Август 2018 . Опубликовано в Менеджеры закачек M3U8 Loader - Программа скачает видео в несколько потоков. Для того...
M2040dn печатает белые листы
Сделаем качество печати Kyocera как по заводу В блоге я уже неоднократно говорил о своей любви к печатным аппаратам японской...
Mysql query error select distinct
I keep running into the same error, using MySQL. The totaal value is marked as wrong, but i have no...
Adblock detector