Зробіть доступним для запису / тощо


11

Я маю справу з вбудованим пристроєм під управлінням Linux. Виробники цього пристрою налаштували його так, щоб він завантажував кореневу файлову систему як тільки начито.

Від / etc / mtab:

rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0

Це означає, що я не в змозі змінювати жодні файли в / etc, наприклад додати нового користувача.

Я спробував перекомпонувати кореневий каталог:

mount -o remount,rw -t squashfs /dev/root /

але я просто отримую помилку

mount: cannot remount block device /dev/root read-write, is write-protected

Я подивився на цю помилку, і люди казали використовувати blockdev. У системі не встановлено blockdev, тому я перехрестив її і скопіював. Потім я побіг

blockdev --setrw rootfs

але я знову отримав помилку:

blockdev: cannot open rootfs: No such file or directory

Чи можна зробити / etc для запису, якщо цього ще немає? У мене є кореневий доступ до системи, але я не в змозі отримати доступ до файлової системи "офлайн", всі зміни потрібно зробити за допомогою команд Bash.

Відповіді:


19

squashfs- стисла файлова система лише для читання. Він не передбачає внесення змін до нього після його створення. Таким чином, ви не можете записати на нього, навіть якщо базовий блок пристрою можна зробити доступним для запису. Вам потрібно буде створити нове зображення squashfs всієї файлової системи зі своїми модифікаціями та записати їх на пристрій зберігання даних, де зберігається ця файлова система, що було б проблематично зробити з живої системи.

Інший варіант - встановити іншу файлову систему /etc. Це може бути через з'єднання кріплення, якщо воно підтримується ядром, яке об'єднує дві файлові системи разом, як правило, з однією файловою системою, що записує лише зміни до базової файлової системи лише для читання.

Перевірте підтримку AUFS_FS або OVERLAY_FS у конфігурації ядра.

Наприклад, для з'єднання-монтажу каталогу у /tmp(сподіваємось, що він може бути записаний, хоча можливо, tmpfsу пам’яті (тому не є стійким при перезавантаженні) у вашому випадку, якщо система не має постійного місця для запису)

mkdir -p /tmp/etc/work /tmp/etc/upper
mount -t overlay \
      -o lowerdir=/etc,upperdir=/tmp/etc/upper,workdir=/tmp/etc/work \
       overlay /etc

Тоді /etcбуде доступним для запису, і внесені вами зміни фактично будуть зберігатися в /tmp/etc/upper.

Крім того, якщо ви бажаєте змінити лише декілька файлів, ви можете зв'язати-змонтувати їх (так, ви можете встановити будь-який файл, а не лише каталоги) з версії, що зберігається у файлових системах, що записуються:

cp /etc/passwd /tmp
mount --bind /tmp/passwd /etc/passwd

Тоді /etc/passwdбуло б написано. Звичайно, ви можете зробити це також /etcзамість цього. ( cp -a /etc /tmp && mount --bind /tmp/etc /etc).


Деякі вбудовані системи можуть змінювати файли /etcпід час завантаження на основі певних параметрів у nvram. Таким чином, щоб змінити файл, /etcви встановили б "магічну" системну змінну, прив'яжіть її до nvram, а потім перезавантажте конфігурацію або перезавантажте. Переважна більшість домашніх маршрутизаторів працює так. Але точні механізми та команди характерні для системи.
Satō Katsura

Ідеально! Пристрій не підтримує кріплення накладених файлів, але прив'язка користувацьких файлів до файлів у / etc працювала дуже добре! Спасибі за вашу допомогу.
Джошуа Уолш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.