Deutsch
Germany.ruФорумы → Архив Досок→ Linux & Co

aufs - read only linux

320  
  anatoli888 свой человек11.02.09 11:26
11.02.09 11:26 
Последний раз изменено 23.02.09 10:55 (anatoli888)
напишу тут как можно сделать read only linux.
зачем и кому это нужно/может пригодиться
- у кого система работает на флэш ностителе и кто задумывается о его продолжительности работы (вбилось слово lebensdauer и немогу от него отцепиться )
- кто хочет посмотреть где и какие произойдут изменения в системе если сделать тот или иной шаг.
- так же можно сделать фиктивные изменения на носителях на которых нет доступа записи. для этого читаем тут
все это я проделал на debian lenny
1. нам нужен кернель с модулем aufs. его можно собрать самому (http://aufs.sourceforge.net/) или использовать к примеру apt. в случае с апт вам нужен пакет aufs-modules-`uname -r`
2. нам нужен скрипт который нужно будет поместить в /etc/initramfs-tools/scripts/local-bottom . не забываем применить к скрупту chmod +x
В ответ на:

#!/bin/sh
PREREQS=""
prereqs() { echo "$PREREQS"; }
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
export unionfs
modprobe aufs
for x in $(cat /proc/cmdline); do
case $x in
root=*)
rootname=${x#root=}
;;
aufs=*)
aufs=${x#aufs=}
;;
esac
done
if [ ! -z "${aufs}" ]; then
echo -n "Erstelle /aufsroot ... "
mkdir -p /aufs /rw /ro
if ( test $? -eq 0 ); then
echo "ok"
else
echo "fail"
fi

echo -n "Erstelle RAMFS ... "
mount -w -t ramfs -o maxsize=${aufs} ramfs /rw
if ( test $? -eq 0 ); then
echo "ok"
else
echo "fail"
fi
echo -n "Bewege /root nach /ro ... "
mount --move ${rootmnt} /ro
if ( test $? -eq 0 ); then
echo "ok"
else
echo "fail"
fi
echo -n "Mounte aufs ... "
mount aufs /aufs -t aufs -o noatime,dirs=/rw=rw:/ro=ro
if ( test $? -eq 0 ); then
echo "ok"
else
echo "fail"
fi
echo "Erstelle verzeichnisse ... "
[ -d /aufs/ro ] || mkdir /aufs/ro
if ( test $? -eq 0 ); then
echo "/ro ... ok"
else
echo "/ro ... fail"
fi
[ -d /aufs/rw ] || mkdir /aufs/rw
if ( test $? -eq 0 ); then
echo "/rw ... ok"
else
echo "/rw ... fail"
fi
echo "Bewege verzeichnisse ... "
mount --move /ro /aufs/ro
if ( test $? -eq 0 ); then
echo "/ro ... ok"
else
echo "/ro ... fail"
fi
mount --move /rw /aufs/rw
if ( test $? -eq 0 ); then
echo "/rw ... ok"
else
echo "/rw ... fail"
fi
echo -n "/etc/fstab ... "
grep $rootname /aufs/ro/etc/fstab > /aufs/etc/fstab
if ( test $? -eq 0 ); then
echo "ok"
else
echo "fail"
fi
echo -n "Bewege /aufs ... "
mount --move /aufs /root
if ( test $? -eq 0 ); then
echo "ok"
else
echo "fail"
fi

echo "Setze schreibrechte ... "
mount -o remount,rw /
if ( test $? -eq 0 ); then
echo "/ ... ok"
else
echo "/ ... fail"
fi
mount -o remount,rw /root
if ( test $? -eq 0 ); then
echo "/root ... ok"
else
echo "/root ... fail"
fi
# echo "FSTYPE=\"aufs\"" >> /conf/param.conf
# echo "ROOTFLAGS=\"-o br:/aufsroot/aufstmp=rw:/aufsroot=ro\"" >> /conf/param.conf
# echo "ROOT=\"none\"" >> /conf/param.conf
echo "readonly=n" >> /conf/param.conf
fi
exit 0

3. теперь делаем: echo aufs >> /etc/initramfs-tools/modules
4. апдейтим initramfs: update-initramfs -u -k `uname -r`
5. перегружаемся
6. добавляем параметр в груб: aufs=32000 . где 32000 это размер создаваемой ramfs
7. наслаждаемся
я хочу создать еще пару функций типа commit и clean. commit - изменения по возможности записываются на в /ro и clean - /rw стирается
буду рад комментариям, поправкам, критике и надеюсь вам это как-нибудь пригодится.
23.02.2008: есть поправки. скрипт рабочий, тестировал. если все лежит на одном разделе то проблем нет. если к примеру var или usr находятся на другом разделе, то необходимо добавить в скрипте монтирование разделов до монтирования aufs. я заметил так же что tmpfs не монтируется и добавил после монтирования aufs строчку для монтирования tmpfs. у меня такое ощущение, что шаг монтирования всего необходимого при выполнении моего скрипта работает не корректно. надо будет поглядеть...
если есть желание внести изменения в системе на лету в лайв режиме то можно сделать ремоунт: mount -o remount,rw /ro и скопировать из /rw в /ro то что должно стать частью системы.
#1 
  anatoli888 свой человек23.02.09 10:41
NEW 23.02.09 10:41 
в ответ anatoli888 11.02.09 11:26
кому интересно:
1. на базе SLAX: www.linux-live.org - сделать из своего линукса бутовую болванку. кернель + скрипты + хауту на странице -
2. на базе Debian: http://wiki.debian.org/DebianLive/
я пробовал первый вариант. работает.
#2