Výsledky 1 až 15 z 15

Téma: Úprava Linuxu pro read only filesystém (Trustix Linux)

  1. #1

    Standardní Úprava Linuxu pro read only filesystém (Trustix Linux)

    Ahoj, mám pár routerů na Linuxu a chtěl bych tam použít Compact Flash karty místo disků. Karty mají omezený počet zápisů, takže je třeba s nimi většinu času pracovat jako read only.
    Představuji si to teda tak, že na kartu nahraju (dd) systém. Při spuštění si ten udělá třeba 20 MB ramdisk, udělá na něm filesystém a zkopíruje tam z flashky adresáře /etc, /var a /root. Adresáře /etc, /var a /root se pak z kořenového (RO) filesystému přemountují a bude se pracovat s kopií, která je v ramdisku. Chtěl bych mít prográmek (skript), který bude umět synchronizovat ramdisk > flash. Tedy budu normálně pracovat, měnit nastavení, editovat confy a pak dám něco jako sync a ono se to uloží.

    Takže pojďme na to...

    Ramdisk potřebuje být zapnutý v kernelu, v 2.4 řadě defaultně je, používám 2.4.29, takže není problém. Používám bootloader grub, stačí do řádku v konfiguráku dát
    Kód:
    kernel /boot/vmlinuz ro root=/dev/hda1 ramdisk_size=12000
    Potom jsem si v /etc/init.d udělal soubor ramdisk, asi takhle
    Kód:
    #!/bin/sh
    # Creates filesystem and mounts ramdisk
    /sbin/mke2fs -q -m 0 /dev/ramdisk
    /bin/mount /dev/ramdisk /ramdisk
    /bin/cp /etc /ramdisk -R
    /bin/cp /var /ramdisk -R
    /bin/cp /root /ramdisk -R
    Takže mám po startu ramdisk, v něm adresáře, které chci.
    Umím je přimountovat do root filesystému místo stávajích...
    Kód:
    mount --bind /ramdisk/etc /etc
    No, ale tady je můj problém, nevím jak to vrátit. Když se snažím /etc odmountovat, tak na mě řve, že nemůže, že device je busy. A nevím, jak se vrátit k /etc na flashce, abych tam mohl nahrát změněné soubory. Nějaký nápad?
    WS: AMD Athlon 64 4000+/2.6GHz, Gigabyte GA-MA69GM-S2H, 4GB RAM, 80GB Seagate 7200.10, 160GB Samsung SP1614C, LG GSA-4163B, Int. VGA Radeon X1250, AOpen H500B 350W, EIZO S1910-K, MS Basic Keyboard, MS Laser Mouse 6000
    SRVR: Intel Celeron 2.16GHz, Intel D865PERL, 1GB RAM, 2x320GB + 1x300GB Seagate SATA, AOpen H600A 350W, Inet 16Mbps/10GHz od www.lysafree.net

  2. #2

    Standardní

    a kde je problem ?
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

  3. #3

    Standardní

    Citace Původně odeslal Fox!MURDER
    a kde je problem ?
    V tom, že nevím, jak to pak nakopírovat zpátky . Když dám
    Kód:
    cp /ramdisk/etc /etc -R
    tak tím nezapíšu na flash nýbrž se to nakopíruje samo přes sebe.

    Odmountovat to taky nemůžu, tak nevím, co s tím. Kdyby šlo něco jako
    Kód:
    cp /ramdisk/etc /dev/hda1/etc -R
    WS: AMD Athlon 64 4000+/2.6GHz, Gigabyte GA-MA69GM-S2H, 4GB RAM, 80GB Seagate 7200.10, 160GB Samsung SP1614C, LG GSA-4163B, Int. VGA Radeon X1250, AOpen H500B 350W, EIZO S1910-K, MS Basic Keyboard, MS Laser Mouse 6000
    SRVR: Intel Celeron 2.16GHz, Intel D865PERL, 1GB RAM, 2x320GB + 1x300GB Seagate SATA, AOpen H600A 350W, Inet 16Mbps/10GHz od www.lysafree.net

  4. #4

    Standardní

    Myslis neco jako
    dd if=/dev/ramdisk of=/dev/hdX -parametry ?
    ITF FreeNet Liberec

  5. #5

    Standardní

    bootuj z initrd ...
    ve zkratce ...
    nabootis z initrd (tam mas jen uplne zakladni tooly kterejma udelas nasledujici ...)
    vytvoris ramdisk (nebo ho nechas pri startu kernelu ... to je fuk)
    mountnes ramdisk do /ramdisk
    mountnes CF do /CF
    zkopirujes si z CF do /ramdisk to co potrebujes
    odmountis /ramdisk a /CF
    udelas mount -o remount /dev/ramdisk(nebojaksetomenuje) /
    (pokud to nejde tak to proste natvrdo mountnes pres /)
    a pustis init z novyho /
    pak si muzes /CF namountit treba zase do /CF a kopirovat si tam co chces.

    na tohle vsechno by ti melo stacit vseho vsudy asi 5 statickejch binarek takze initrd bude mit tak 100kB
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

  6. #6

    Standardní

    Citace Původně odeslal hwsoft
    Myslis neco jako
    dd if=/dev/ramdisk of=/dev/hdX -parametry ?
    Tím ale přepíšu celej / filesystém, nebo ne?

    Ještě mne napadlo, že bych mohl vytvořit samostatné partice pro /etc, /var a /root, pak by to šlo jednoduše.


    2Fox: dobře, ale podle toho bych si musel na ramdisk (když bude posléze jako / ) nahrát i třeba /usr a to se mi tam nevejde, ne?
    WS: AMD Athlon 64 4000+/2.6GHz, Gigabyte GA-MA69GM-S2H, 4GB RAM, 80GB Seagate 7200.10, 160GB Samsung SP1614C, LG GSA-4163B, Int. VGA Radeon X1250, AOpen H500B 350W, EIZO S1910-K, MS Basic Keyboard, MS Laser Mouse 6000
    SRVR: Intel Celeron 2.16GHz, Intel D865PERL, 1GB RAM, 2x320GB + 1x300GB Seagate SATA, AOpen H600A 350W, Inet 16Mbps/10GHz od www.lysafree.net

  7. #7

    Standardní

    jo jeste by stalo za uvahu udelat SHMfs a z ramdisku mountit jen ty /etc /var a /tmp ... kazdou zvlast ... shmfs je na tohle fajn... samo si pak ale musis zajistit aby ti nic ty partisny nepreplnilo ... by mohlo bejt nepekny
    takze ja bych to videl asi tak ze budes mit
    /etc shmfs
    /var shmfs
    /tmp shmfs

    /dev/hda1 /
    a v /startup/etc, /startup/var, /startup/tmp to co potrebujes menit...

    a pri bootu ... .
    namountis /
    namountis ty shmfs
    zkopirujes veci z /startup/* do spravnejch adresaru
    a pak to udelas zas naopak ...
    tohle by snad slo i bez initrd...
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

  8. #8

    Standardní

    celej / filesystem do rd nahravat nemusis ...
    bud namountis / z karty RO treba do /rootfs a pak pomoci mount --bind udelas aliasy spravnejch adresaru na spravny mista, nebo symlinky nebo neco takovyho ...
    ale to s tim shmfs by mozna bylo elegantnejsi

    jdu na motokary ... zbytek pozdejs nebo zejtra ...
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

  9. #9

    Standardní

    No co sem zkoumal jeden router tady u nas v czf s CF kartou jako disk, tak vpodstate vsechno bezelo jako ro uz od startu systemu, jenom /var se namountoval jako ramdisk. Tim padem syslog a podbony kraviny muzou normalne zapisovat do /var, akorat se zmeny ztrati. Ale to asi neni presne to, co chces.

    Co bych navrhoval pro tvuj pristup je, pouzit remount a dat mu parametr ro nebo rw podle toho, jestli chces zapisovat nebo ne. Teoreticky by v tom nemel byt problem, pokud si nejaky proces nezablokuje soubor primo pro zapis. To chce vyzkouset. Proste porad pojedes v ro modu + ramdisk a kdyz budes chtit neco ulozit na kartu, tak jednoduse premountujes rw, zapises, syncnes a zase premountujes ro. Za behu by to melo byt vpohode.
    In a world without fences and walls, who needs Gates and Windows? | Nesnáším wide monitory.
    Workstation: Xeon E3-1275v5 :: Silentmaxx TwinBlock fanless :: Fujitsu D3417-B :: 32 GB ECC DDR4 :: Radeon Pro WX 2100 fanless :: Dell UP2715K :: Gentoo
    Server: Xeon E3-1245v6 :: Supermicro X11SSH-F :: 32 GB ECC DDR4 :: Aquantia 5GBase-T :: 36 TB storage :: Gentoo Hardened

  10. #10

    Standardní

    Citace Původně odeslal Gargamel
    No co sem zkoumal jeden router tady u nas v czf s CF kartou jako disk, tak vpodstate vsechno bezelo jako ro uz od startu systemu, jenom /var se namountoval jako ramdisk. Tim padem syslog a podbony kraviny muzou normalne zapisovat do /var, akorat se zmeny ztrati. Ale to asi neni presne to, co chces.

    Co bych navrhoval pro tvuj pristup je, pouzit remount a dat mu parametr ro nebo rw podle toho, jestli chces zapisovat nebo ne. Teoreticky by v tom nemel byt problem, pokud si nejaky proces nezablokuje soubor primo pro zapis. To chce vyzkouset. Proste porad pojedes v ro modu + ramdisk a kdyz budes chtit neco ulozit na kartu, tak jednoduse premountujes rw, zapises, syncnes a zase premountujes ro. Za behu by to melo byt vpohode.
    jenze jesli jsem ho dobre pochopil tak on chce mit moznost delat zmeny za behu sytemu ... tj. neco nakonfiguruje, vyzkousi a kdyz to funguje tak zapise na CF ... jenze treba napriklad kdyz bude delat pokusy/neco ladit, bude delat spoustu zmen na tom fs -> spooustu zapisu -> problem ...
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

  11. #11

    Standardní leaf.sf.net

    Podivej se na nejaky distra z leafu, ty to maj IMHO vsechny, zapis az po explicitnim vyzadani
    ITF FreeNet Liberec

  12. #12

    Standardní

    No, tak jsem zkoušel... etc nemůže být na oddělené partition, musí být v / .

    Ale zjistil jsem, že se přebindované /etc přecejen umountovat dá. Když použiju umount s parametrem -l tak to jde. Mělo by se to chovat, tak že ho umountuje a když je při tom v onom filesystému otevřen nějaký soubor, tak ho to ještě zapíše do starého mountpointu. To mi ale nevadí, dám si pozor - poedituju, uložim a pak teprv budu umountovat a zapisovat na flashku.

    Tak jsem si zkusil napsat tohle:
    Kód:
    #!/bin/sh
    #
    # ramdisk     This shell script takes care of ramdisk and ro fs
    #
    
    # Source function library.
    . /etc/init.d/functions
    
    RETVAL=0
    
    # See how we were called.
    case "$1" in
      start)
            # Sets up ramdisk.
            echo -n "Seting up ramdisk: "
            /sbin/mke2fs -q -m 0 /dev/ramdisk
            /bin/mount /dev/ramdisk /ramdisk
            /bin/cp /etc /ramdisk/ -R
            /bin/cp /var /ramdisk/ -R
            /bin/cp /root /ramdisk/ -R
            /bin/cp /tmp /ramdisk/ -R
            /bin/mount --bind /ramdisk/etc /etc
            /bin/mount --bind /ramdisk/var /var
            /bin/mount --bind /ramdisk/root /root
            /bin/mount --bind /ramdisk/tmp /tmp
            ;;
      stop)
            # Stop daemons.
            echo -n "Cleaning and unmounting ramdisk: "
            /bin/umount /etc -l
            /bin/umount /var -l
            /bin/umount /var -l
            /bin/umount /tmp -l
            ;;
      sync|ramtoflash)
            /bin/umount /etc -l
            /bin/umount /var -l
            /bin/umount /var -l
            /bin/umount /tmp -l
            /bin/cp /ramdisk/etc /etc -R
            /bin/cp /ramdisk/var /var -R
            /bin/cp /ramdisk/root /root -R
            /bin/mount --bind /ramdisk/etc /etc
            /bin/mount --bind /ramdisk/var /var
            /bin/mount --bind /ramdisk/root /root
            /bin/mount --bind /ramdisk/tmp /tmp
            ;;
      *)
            echo "Usage: ramdisk {start|stop|sync}"
            exit 1
    esac
    
    exit $RETVAL
    Skript se bude při startu systému volat s parametrem start, při vypínání stop a když budu chtít zapsat na CF, tak s parametrem sync. Ještě tam není pořešené přepínání RO a RW / filesystému, to přidám, zatím to zkouším na HDD.

    Ještě se zeptám - routovací tabulky jsou jen v paměti, že?
    WS: AMD Athlon 64 4000+/2.6GHz, Gigabyte GA-MA69GM-S2H, 4GB RAM, 80GB Seagate 7200.10, 160GB Samsung SP1614C, LG GSA-4163B, Int. VGA Radeon X1250, AOpen H500B 350W, EIZO S1910-K, MS Basic Keyboard, MS Laser Mouse 6000
    SRVR: Intel Celeron 2.16GHz, Intel D865PERL, 1GB RAM, 2x320GB + 1x300GB Seagate SATA, AOpen H600A 350W, Inet 16Mbps/10GHz od www.lysafree.net

  13. #13

    Standardní

    jo to vypada funkcne ...
    jj. routovaci tabulka musi bejt v pameti a nevim o tom ze by ji neco syncovalo na disk ... routuj zebrou a nemusis se o to starat
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

  14. #14

    Standardní

    Citace Původně odeslal Fox!MURDER
    jo to vypada funkcne ...
    jj. routovaci tabulka musi bejt v pameti a nevim o tom ze by ji neco syncovalo na disk ... routuj zebrou a nemusis se o to starat
    Jasně, kdybych používal statický routy, tak bych nic jinýho než nastavování cest nedělal . Jenom jsem se chtěl ujistit, že si zebra na disk nehrábne. No, když bude chtít, tak má holt smůlu.
    WS: AMD Athlon 64 4000+/2.6GHz, Gigabyte GA-MA69GM-S2H, 4GB RAM, 80GB Seagate 7200.10, 160GB Samsung SP1614C, LG GSA-4163B, Int. VGA Radeon X1250, AOpen H500B 350W, EIZO S1910-K, MS Basic Keyboard, MS Laser Mouse 6000
    SRVR: Intel Celeron 2.16GHz, Intel D865PERL, 1GB RAM, 2x320GB + 1x300GB Seagate SATA, AOpen H600A 350W, Inet 16Mbps/10GHz od www.lysafree.net

  15. #15

    Standardní

    mno uzitecny by bylo pouzit lsof na ty filesystemy ... tam uvidis co mas kde otevreny ...
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •