LINUX.ORG.RU

Отключение опции «read-only file system» роутера на OpenWRT

 ,


0

1

Добрый день! У меня появилась необходимость поставить примитивный вебсервер на базе роутера. В наличии имеется TP-Link WR703N на MIPS-24 проце, 32МБ памяти.

Первая проблема: не могу понять, почему файловая система монтирована с флагом read-only? Это было задано при прошивке? Т.е. мне нужно его перепрошивать и убирать этот флаг? Из-за этого я не могу настроить конфиг установленного сервера uhttpd.

Вторая проблема: сейчас доступно всего 40 КБ места, чего не хватает для скачивания хотя бы пакетов для монтирования флэшки. Что-либо еще я установить я тоже не могу. Как быть?

UPD1: Состояние памяти в вкладке Overview интерфейса LuCi. Как можно видеть, свободной памяти - мегабайты.

Состояние памяти в вкладке Software интерфейса LuCi

Вывод команды ls с информацией о памяти

Почему везде разный вывод?

Пытался использовать комаду mount -O / «remount,rw», изменять права доступа, работаю по ssh от рута. Писать получается только в /tmp

UPD2:

Подведу итог для тех, кто будет в будущем задаваться тем же вопросом:

  1. Каталоги /etc/ были read-only по неопределенной причине. Эта проблема исчезала при перекомпиляции и перепрошивке openwrt.
  2. Определенные каталоги файловой системы все же read-only в соответствии с тем, как решили разбить внутреннюю flash и ram память разработчики openwrt. Коротко говоря: каталоги openwrt состоят из read-only ФС SquashFS и read-write ФС JFFS2, которые объединены при помощи еще одной ФС OverlayFS.

    Конкретнее об этом написано в двух последних сообщениях темы и по ссылкам в этих сообщениях

  3. Если нужно устанавливать более, чем 1-2 пакета, то нужно подключать usb-flash. Для этого:
    • Отформатировать флешку под ext4 (Я использовал эту утилиту )
    • Откомплировать и прошить openwrt вместе с пакетами kmod-usb-core, kmod-usb-ohci, kmod-usb-storage, kmod-usb2, kmod-fs-ext4, block-mount (т.е. в меню команды make menuconfig выбрать эти пакеты)

      Стоит учесть, что block-mount может и не влезть в прошивку (т.е. его не будет в системе после прошивки). Тогда нужно будет установить его через opkg. Скорее всего места хватит под этот единственный пакет.

    • Следовать инструкции по подключению флешки

      Теперь проблем с дисковым пространством возникнуть не должно.



Последнее исправление: miphid (всего исправлений: 2)

Не надо систему трогать.
У него же есть USB, подключи, смонтируй флешку, и будет тебе место.
Кстати, здесь почему-то данные по железу немного другие.

athost ★★★★★
()

1) Есть разделы ридонли, а есть - не. Логично как бе.
2) Эт смотря какой памяти. Есть оперативная, а есть не.

mos ★★☆☆☆
()
Ответ на: комментарий от athost

Да, объем RAM-памяти я исправил. Находил 2 инструкции по монтированию (инструкция). Следуя им, необходимо установить доп. пакеты такие, как, например, fdisk. Через менеджер пакетов сделать это не получается - в ответ получаю сообщение, что пакет не удается найти.

Допустим, я скачаю его с Репозитория скомпилированных пакетов. Но как мне его тогда отправить на роутер? Сам роутер не хочет качать с помощью wget, т.к. не дружит с https.

miphid
() автор топика

там overlayfs используется. Пересобери выкинув ненужное и добавь нужное, благо делается в полтора движения.

Dark_SavanT ★★★★★
()

Почему везде разный вывод?

В первом скрине это ОЗУ, в втором флеш. В третьем ls который вообще ни о чём не говорит.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от miphid

Тут про USB-флешку для этого девайса.
Флешку разбить и отформатировать на компе.
И вот тут обязательно почитай.
Вся основная информация по девайсу, там много полезных советов.

athost ★★★★★
()
Последнее исправление: athost (всего исправлений: 4)
Ответ на: комментарий от Dark_SavanT

Спасибо за разъяснения по памяти. Overlayfs проверю

miphid
() автор топика
Ответ на: комментарий от athost

Подключить флешку получилось. Но после загрузки прошивки openwrt с дровами для usb, почему-то исчез режим read-only для каталогов, в частности, для /etc/config.

Решил посмотреть типы установленных файловых систем:

root@CyberWrt:~# df -T
Filesystem           Type       1K-blocks      Used Available Use% Mounted on
/dev/root            squashfs        2304      2304         0 100% /rom
tmpfs                tmpfs          13960        68     13892   0% /tmp
/dev/mtdblock3       jffs2            384       240       144  63% /overlay
overlayfs:/overlay   overlay          384       240       144  63% /
tmpfs                tmpfs            512         0       512   0% /dev
/dev/sda1            ext4         7129306      6743   6737668   0% /mnt/sda1

Можно ли как-то узнать, есть ли read-only области сейчас? Можно ли узнать, поверх чего наложена overlayfs?

miphid
() автор топика
Ответ на: комментарий от miphid

ROM — read only memory. Squashfs — сжатый формат файловой системы в виде файла, который можно монтировать только read only. Прочитайте про устройство OpenWRT и её файловое устройство в OpenWRT wiki и документации.

ValdikSS ★★★★★
()
Ответ на: комментарий от ValdikSS

Читаю и разбираюсь. Но не все понятно. Вот схема разбивки флеш-памяти. Понял, что

  • Для разбивки дискового пространства используется MTD - ПО для связи драйверов флеш с символьным и блочным устроством.
  • SquashFS - это сжатое read-only ядро open-wrt, которое используется для бэкапа;
  • JFFFS2 - журналируемая read-write система;
  • OverlayFS используется для совмещения предыдущих двух ФС

Непонял:

  1. Где лежит инфа о разбиении флешки на разделы mtd x? Внутри структур mtd?
  2. Загрузчик должен знать, что ядро нужно загружать именно из раздела mtd1? Или он знает точный адрес?
  3. В каком порядке монтируются SquashFS,JFFFS2, OverlayFS ? С одной стороны, OverlayFS по схеме стоит в более раннем слое, но она же объединяет 2 других ФС.
  4. Я так понял, что загрузчик загружает ядро в RAM и ядро оттуда начинает монтировать каталоги. Не должны ли тогда все каталоги на этом изображении быть в конечном итоге смонтированы от /dev/mtdblock?
miphid
() автор топика
Ответ на: комментарий от miphid

SquashFS - это сжатое read-only ядро open-wrt, которое используется для бэкапа;

Нет, SquashFS — сжатая файловая система, которая монтируется в корень (/). Ядро расположено в другом разделе на флеше.

JFFFS2 - журналируемая read-write система;

Верно.

OverlayFS используется для совмещения предыдущих двух ФС

Да, так и есть. JFFS2 монтируется сначала в /overlay, затем OverlayFS активируется на корне (/), нижний неперезаписываемый слой остается от SquashFS, а верхний — от JFFS2. Верхний слой может перекрывать файлы из SquashFS (в том числе «удалять»).

Где лежит инфа о разбиении флешки на разделы mtd x? Внутри структур mtd?

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

Загрузчик должен знать, что ядро нужно загружать именно из раздела mtd1? Или он знает точный адрес?

Загрузчик понимает деление на разделы, в нем прописано, с какого раздела загружать ядро. Само ядро представляет собой образ u-boot image, в котором прописан адрес загрузки и параметры командной строки ядра.

Я так понял, что загрузчик загружает ядро в RAM и ядро оттуда начинает монтировать каталоги. Не должны ли тогда все каталоги на этом изображении быть в конечном итоге смонтированы от /dev/mtdblock?

/dev/root, наверное, указывает на какой-то mtdblock в предыдущем /dev (который был до монтирования overlayfs на /), просто называется так, для удобства. Точно не знаю.

ValdikSS ★★★★★
()
Ответ на: комментарий от ValdikSS

Спасибо за пояснения. Мой вопрос полностью исчерпан.

miphid
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.