HTML

Bagoj úr blogja

Kíváncsi Bagoj befigyel a Linux belsejébe, illetve különféle Linux terjesztéseket próbál ki. Ha jó napja van, scriptet ír Neked.

Friss topikok

Bagoj visszatér

2008.05.29. 17:50 bagoj ur

Mit mondjak? Halogattam a unionfs megvalósítást is, aztán amikor már tisztán látszott, hogy ebből nem lesz semmi, halogattam az írást is... meg is látszik a havi termésen - ez a negyedik post ebben a hónapban, pedig Joee is segített. :)

Nem vagyok az az ember, aki könnyen feladja a dolgokat, de ez a Unionfs és Ubuntu az volt. Odáig eljutottam nagyon hamar (amit anno írtam is anno), hogy egy kernel oops után bebootol, és teljesen jól működik a unioinfs része a dolognak, csakhogy

1. ne legyen kernel oops
2. amikor elértem az x-edik bootolást és ellenőrizni kellett a fájlrendszert, akkor valahogy úgy érezte, neki most az ext3 a "/" (tehát a kiinduló állapot), holott neki igenis a unionfs volt a "/". Ha futtatni akartam egy fsck-t az igazi "/"-re, azt mondta, hogy fel van mountolva; de nem volt a /proc/mounts alatt és ha umountolni akartam, akkor azt írta, hogy nincs mountolva. A boot scriptekhez meg nem akartam nyúlni, hiszen a lényeg az lett volna, hogy ne kelljen.

Lehet hogy most nem tűnök minden bagjok legjobbikának, de főleg miután egy mini-linux kísérletemen simán megoldottam a kérdést, úgy éreztem hogy nem érdemes több energiát keccsölni a dologba. Tanulságképpen, a mini-linuxon kb. így oldottam meg (ez nem csak a unionfs rész, hanem az egész boot script):
for x in $(cat /proc/cmdline); do
    case $x in
    root=*)
        ROOT=${x#root=}
        ;;
    init=*)
        init=${x#init=}
        ;;
    esac
done

[ -d /dev ] || mkdir -m 0755 /dev
[ -d /root ] || mkdir --mode=0700 /root
[ -d /sys ] || mkdir /sys
[ -d /proc ] || mkdir /proc
[ -d /tmp ] || mkdir /tmp
mkdir -p /var/lock
mount -t sysfs none /sys -onodev,noexec,nosuid
mount -t proc none /proc -onodev,noexec,nosuid

if  ! mount -t ext2 -o ro $ROOT /ro; then
     echo "Csak olvashato fajlrendszer nem talalhato!"
    /bin/busybox sh
fi

if ! mount -t ext3 -o rw /dev/sda5 /rw; then
    echo "Irhato-olvashato fajlrendszer csatolasa sikertelen! Fajlrendszer ellenorzese..."
    chroot /ro  /bin/e2fsck /dev/sda5
    exit 0
fi

mount -t unionfs -o dirs=/rw=rw:/ro=ro unionfs /unionfs
if [ $? -ne 0 ]; then
    echo "Fajlrendszer egyesites sikertelen!"
    /bin/busybox sh
fi

mount --move /ro /unionfs/ro
umount -l /rw
mount --move /unionfs /root
exec run-init ${ROOT} ${init} "$@" <${ROOT}/dev/console >${root}/dev/console 2>&1
Az Ubuntus, kissé beteges Unionfs-es rész (ha valaki rájön a megoldásra, pls írja meg!):
#!/bin/sh
case $1 in
prereqs)
    exit 0
    ;;
esac

IRHATO="sda5"

for x in $(cat /proc/cmdline); do
    case $x in
    root=*)
        ROOTNAME=${x#root=}
        ;;
    unionfs=*)
        unionfs=${x#unionfs=}
        ;;
    esac
done

if [ "$unionfs" != "yes" ]; then
    # nem kell unionfs-t hasznalni, snapshot/karbantartas miatt
    # kilepes
    exit 0
fi

modprobe -Qb unionfs
if [ $? -ne 0 ]; then
    echo    UNIONFS HIBA: Nem sikerult betolteni a unionfs modult!
    exit 0
fi
# A jelenlegi root fajlrendszeren (azaz az initramfs-en) letrehozzuk a
# szukseges konyvtarakat

mkdir /unionfs
mkdir /rw
mkdir /ro

# Felmountoljuk az irhatot, es a jelenlegi "/"-t atmozgatjuk az /ro-ba
mount /root/dev/$IRHATO /rw
if ! mount --move ${rootmnt} /ro; then
    echo "UNIONFS HIBA: A root -> /ro mozgatas sikertelen!"
    exit 0
fi
# Felmountolt fajlrendszerek, egyesuljetek!
if ! mount -t unionfs -o dirs=/rw:/ro=ro,delete=whiteout none /unionfs; then
    echo    UNIONFS HIBA: Konyvtarak egyesitese sikertelen!
    exit 0
fi

[  -d /unionfs/ro ] || mkdir /unionfs/ro
[  -d /unionfs/rw ] || mkdir /unionfs/rw

if ! mount --move /ro /unionfs/ro; then
    echo "UNIONFS HIBA: /ro -> /unionfs/ro mozgatas sikertelen"
    exit 0
fi
if ! mount --move /rw /unionfs/rw; then
    echo "UNIONFS HIBA: /rw -> /unionfs/rw mozgatas sikertelen"
    exit 0
fi
# 2. Az fstab a felcsatolando fajlrendszereket irja le. Hogy ertheto
# legyen: Most nem a rendes fajlrendszerunket latjuk, az a /root alatt
# van. A mostani "/" minden egyes bootkor ujra es ujra elolrol letrejon.
# Az init processz az fstab es mtab alapjan mountol; viszont nekunk nem
# a /dev/xxx fajlrendszer kell, ami eddig a "/" volt, hanem a unionfs-t
# kell root fajlrendszerre' varazsolnunk. Kovetkezeskeppen meg kell
# ganyolni kicsit az fstab-ot es az mtab-ot is, hogy ne akarja
# ramountolni a /dev/sda3-at a unionfs-re, de a bebootolt rendszer azert
# lassa.

# 2.1 Kikommentezzuk a tenyleges root fajlrendszert (a unionfs-en), es
# a swap-et is; kulonben az init rossz helyrol szedne ezeket
cat /unionfs/ro/etc/rc.local|sed 's/\(.*\)exit/\1\#exit/' >/unionfs/etc/rc.local
echo "cat /ro/etc/fstab | sed 's/$ROOTNAME/#$ROOTNAME/' | sed 's/$resume/#$resume/' >/etc/fstab" >>/unionfs/etc/rc.local
echo "echo $ROOTNAME /ro     ext3    relatime      0  0 >>/etc/fstab" >>/unionfs/etc/rc.local
echo "echo /dev/sda5 /rw ext3 rw,relatime,errors=remount-ro 0 0 >>/etc/fstab" >>/unionfs/etc/rc.local
echo "echo none / unionfs rw,dirs=/rw:/ro=ro,delete=whiteout 0 0 >>/etc/fstab" >>/unionfs/etc/rc.local
# 2.3. Rendbe kell vagnunk az mtab-ot is
echo mount -f /ro >>/unionfs/etc/rc.local
echo "echo none / unionfs rw,dirs=/rw:/ro=ro,delete=whiteout 0 0 >>/etc/mtab" >>/unionfs/etc/rc.local
echo "echo /dev/sda5 /rw ext3 rw,relatime,errors=remount-ro 0 0 >>/etc/mtab" >>/unionfs/etc/rc.local
echo exit 0 >>/unionfs/etc/rc.local

mount --move /unionfs /root
if [ $? -ne 0 ]; then
    echo "UNIONFS HIBA: A unionfs mozgatasa sikertelen!"
    exit 0
fi
exit 0
Ubuntu alatt így "installáltam":
root@aranyhal:~# cp unionfs-mount.sh /etc/initramfs-tools/scripts/init-bottom/unionfs
root@aranyhal:~# chmod 0755 /etc/initramfs-tools/scripts/init-bottom/unionfs
root@aranyhal:~# update-initramfs -u
Ezzel kész is lenne, csak, ahogy mondtam, nem az igazi. Újabb csalódás az Ubuntuban, mindent iszonyatosan túlbonyolítanak... :-( Lehet, hogy az alap felhasználónak jó, de semmilyen változtatást nem tolerál. Nekem, ahogy mondtam, konkrétan nem is működik, hiszen mindig fájlrendszert akarna ellenőrizni.

(Ja, persze a grub "kernel" sorána végére kell egy unionfs=yes, ha történetesen ki akarnátok próbálni, tesztelgetni.)

1 komment

Címkék: ubuntu hogyan hardy heron unionfs

A bejegyzés trackback címe:

https://bagojur.blog.hu/api/trackback/id/tr79612290

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

bagoj.ur 2008.05.29. 22:10:31

Amúgy tök vicces, találtam egy aufs-es megvalósítást, itt:

help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash

Kipróbáltam, nekem ez sem működik - semmit sem csinál. :-(