Portál AbcLinuxu, 5. května 2025 15:41
noatime
, kdy se omezí zápisy na systémové úrovni a může se také přidat async
, potom se na FS zapisuje asynchronně, tj. většinou až při odpojování.
/etc
a /var
na ramdisku. Pokud by se při vypínání vůbec něco mělo ukládat, bylo by dobré použít třeba inkrementální zálohování pomocí programu tar
nebo dar
.
a2x5l5:~# cat /etc/mtab rootfs / rootfs rw 0 0 /dev2/root2 / ext2 ro 0 0 devfs /dev devfs rw 0 0 proc /proc proc rw 0 0 devpts /dev/pts devpts rw 0 0 tmpfs /dev/shm tmpfs rw 0 0
Staci vytvorit initrd, ktery bude mit v linuxrc skriptu pripojeni pripojeni disku do sebe, napr. do /mnt/distribuce. V tomhle ramdisku potom vytvoris potrebne linky do /mnt/distribuce (napr. ln -s mnt/distribuce/bin .) krome var a tmp ktere budou normalne v ramdisku a mas to.
Tohle mam osobne odzkouseno a je to naprosto funkcni, takhle bezi napriklad arachnix(reklama musi bejt )
No, muzu zaslat initrd pouzity v arachnixu, ten by mel byt univerzalne funkcni akorat by se musel mirne upravit linuxrc skript.
Jinak se vytvori pomoci dd prazdny soubor o urcite velikosti, ne nem se vytvori filesystem (doporucuju ext2). Ten soubor pak staci pripojit pres loop device a pak v nem jako u bezneho disku vytvorite adresarovou strukturu pomoci linku. Nakonec staci gzip-nout a je to hotovo.
Snad uz se to da pochopit.
PS.: Nekde na netu jsem kdysi videl nejake howto
dd if=/dev/zero of=novy_ramdisk bs=1k count=4096 mkfs -t ext2 -F novy_ramdiskTento souborový systém připojíme:
mkdir /tmp/novy_ramdisk mount -o loop -t ext2 novy_ramdisk /tmp/novy_ramdiskNaplníme jej nějakými užitečnými věcmi, jako jsou některé sdílené knihovny, popis terminálu pro ncurses, který potřebuje ke správné funkci bash atd.
TARGET=/tmp/novy_ramdisk mkdir -p $TARGET/{bin,sbin,usr/share/terminfo/l} ldd /bin/{bash,{u,}mount} /sbin/modprobe | grep -v ':$' | sed 's/.*=> \(.*\) (.*/\1/' | sort | uniq | \ while read file; do if [ -z "$file" ]; then continue; fi if [ -h $file ]; then LIB=$(basename $(readlink -f $file)) LINK=$(basename $file) echo LINK \'$LINK\' '->' \'$LIB\' cp -p $file $TARGET/lib/$LIB ln -s $LIB $TARGET/lib/$(basename $file) else echo LIB \'$(basename $file)\' cp -p $file $TARGET/lib fi done cp -a /bin/{bash,{u,}mount} $TARGET/bin cp -a /sbin/modprobe $TARGET/sbin cp -a /usr/share/terminfo/l/linux $TARGET/usr/share/terminfo/l mkdir newrootNapíšeme nějaký šikovný skriptík:
<< EOF > $TARGET/sbin/init cat #!/bin/bash # modprobe nějaké šikovné moduly mount /dev/něco /newroot pivot_root /newroot /newroot/initrd exec /sbin/init EOF chmod 755 $TARGET/sbin/initDále je potřeba vytvořit na ramdisku
/dev
se zařízeními null
, console
a dalšími potřebnými. Hodí se přeložit si vlastní jádro a okopírovat jeho moduly také na onen ramdisk.
Ramdisk se pak odpojí a zkomprimuje gzipem:
umount /tmp/novy_ramdisk gzip --best novy_ramdisk > initrd.imgJádro se pak zavádí zavaděčem (z CD třeba isolinuxem, ale může to být i loadlin v DOSu) tak, že se mu předají tyto parametry:
initrd=initrd.img ramdisk_size=4096Skript
/sbin/init
přehodí kořenové systémy příkazem pivot_root
, ale může dělat i složitější věci, např. hledat řadiče disků nebo hledat označení CD mechaniky, ve které je vloženo CD, z kterého se systém spouští atd.
Není samozřejmě potřeba kopírovat všechny ty knihovny na ramdisk tak složitým způsobem, protože jsou k dispozici nástroje jako busybox
. Každý si může udělat i nějaká soukromá udělátka. Ale tento těžkopádný postup pro lenochy funguje taky, jen ten ramdisk pak možná bude větší (8 MB).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.