LINUX.ORG.RU
ФорумAdmin

Работа с read-only root filesystem


0

0

Пытаюсь водрузить в качестве раутера на ITX с тремя сетевыми ( ага :) ) оптимизированную генту.

Поскольку sys-apps/baselayout-2.0.1 с openrc работали некорректно, приходится работать с baselayout-1. Из-за того, что в качестве диска на этой системе используется CF, волей-неволей приходится использовать ro root.

Система разделена на два раздела, используется ext2 на каждом. Ядро собрано таким образом, что можно грузить эту машинку как по сети, так и с диска, т.о. вся отладка может делаться на сборочном хосте, проверяться по сети, а потом, простым копированием, всё необходимое переносится на CF.

На данный момент система загружается без проблем, при необходимости подхватывает динамический адрес по dhcp или из собственного файла конфигурации /etc/net.xxx. Сделано это было вот как:

1. ядро пропатчено и собрано с поддержкой unionfs; 2. отредактирован скрипт /sbin/rc:

# Setup initial $PATH just in case
        PATH="/bin:/sbin:/usr/bin:/usr/sbin:${PATH}"
        # добавлено 4 строки
        /bin/mount -n -t tmpfs tmpfs /unionfs/etc -o size=1M
        /bin/mount -n -t unionfs unionfs /etc -o dirs=/unionfs/etc=rw:/etc=ro
        echo "tmpfs /unionfs/etc tmpfs rw,size=1M 0 0" >> /etc/mtab
        echo "unionfs /etc unionfs rw,dirs=/unionfs/etc=rw:/etc=ro 0 0" >> /etc/mtab
3. создан каталог /unionfs/ с нужными подкаталогами, например, /unionfs/etc/ и т.д.; 4. В /etc/fstab прописано:
tmpfs                   /unionfs/var/lock       tmpfs           size=20K,nodev,nosuid,noexec    0 0
tmpfs                   /unionfs/var/log        tmpfs           size=3M,nodev,nosuid,noexec     0 0
tmpfs                   /unionfs/var/run        tmpfs           size=200K,nodev,nosuid,noexec   0 0
tmpfs                   /unionfs/var/spool      tmpfs           size=10M,nodev,nosuid,noexec    0 0
tmpfs                   /unionfs/var/lib        tmpfs           size=1M,nodev,nosuid,noexec     0 0
tmpfs                   /unionfs/tmp            tmpfs           size=1M,nodev,nosuid,noexec     0 0
unionfs                 /var/lock               unionfs         dirs=/unionfs/var/lock=rw:/var/lock=ro          0 0
unionfs                 /var/log                unionfs         dirs=/unionfs/var/log=rw:/var/log=ro            0 0
unionfs                 /var/run                unionfs         dirs=/unionfs/var/run=rw:/var/run=ro            0 0
unionfs                 /var/spool              unionfs         dirs=/unionfs/var/spool=rw:/var/spool=ro        0 0
unionfs                 /var/lib                unionfs         dirs=/unionfs/var/lib=rw:/var/lib=ro            0 0
unionfs                 /tmp                    unionfs         dirs=/unionfs/tmp=rw:/tmp=ro                    0 0
5. ну и, наконец, в том же fstab корневой раздел переключен на ro (для варианта загрузки по nfs, nfs-сервер раздаёт корень в режиме ro):
/dev/sda2             /      ext2            noatime,ro       0 1

Итак, загрузка проходит прекрасно, нужные сервисы стартуют и вроде бы всё ок. Но при перезагрузке/выключении компьютера, после выдачи сообщения

Unmounting filesystem
процесс завершения работы прекращается, появляется сообщение, что переключен уровень init и что
Could not kill process <номер>: No such process
. Поначалу я подумал, что этот процесс можно отловить с помощью
ps -ef > file
и последущим сравнением номера бажащего процесса с теми, что были запущены, но нет, таковых в списке не оказалось. Видимо, это процесс порождается при завершении работы. Конкретнее сказать нельзя. Ну а поскольку процесс завершения работы останавливается, то это несколько напрягает: получается, что удалённо этот компьютер не перезагрузить, только с кнопки или с помощью Magic keys.

Кто-нибудь боролся с такой задачей? Есть ли возможность где-нибудь посмотреть уже изобретённые велосипеды? Поиск, к сожалению, не показал ничего на эту тему, народ, наоборот, в основном не понимает, отчего у него система в ro (обычно из-за ошибок). А мне нужно именно вот так.


Поковырать коакой-нибудь LiveCD... Может, там чего интересное найдется?

Marmirus ★★
()

Если вы ковыряли /sbin/rc, то поковыряйте скрипт завершения работы. Насуйте в него отладочной печати (echo через каждые несколько строк). Думаю, что сообщение «Could not kill process » вобще не причем, а проблемма в том что какой-нибудь процесс хочет что-то сделать с /etc, а оно у вас отмонтируется раньше времени.

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