Prave som sa na to spytal v sk-lugu (odpoved som
v /linux/Documentation/ramdisk.txt nenasiel), takze
len preposielam odpoved (bez zaruky, este som neskusal):
Matus "fantomas" Uhlar wrote:
podla zdrojakov to vyzera ze velkost rd je unsigned
long, takze max velkost by mala byt 4GB bez 1B; s tym
ze PC tusim moze mat max 4GB realnej RAM
static unsigned long rd_length[NUM_RAMDISKS]; /* Size of RAM disks in bytes */
static int rd_hardsec[NUM_RAMDISKS]; /* Size of real blocks in bytes */
static int rd_blocksizes[NUM_RAMDISKS]; /* Size of 1024 byte blocks :) */
static int rd_kbsize[NUM_RAMDISKS]; /* Size in blocks of 1024 bytes */
Uniklo mi proč se nejdřív zkopíruje obsah a pak se teprve umountí. Tím že jde o ramdisk, se asi necachuje a není třeba provádět flush, ale ext2 si poznamenává, jestli je přimountěná nebo ne. Já bych to dělal v opačném pořadí. Taky pro reálné použití při shutdownu/rebootu není od věci nejdřív se pomocí lsof podívat jestli ramdisk nepoužívá nějaký proces a případně ho killnout, jinak se nepovede umount /dev/ramdisk (to by nevadilo), ale nakonec se nepovede umount /.
Po precteni clanku jsem dospel k zaveru, ze musim udelat podrobnejsi pruzkum, jaky ze to pouzivam ramdisk ve svem handheldu ja.
Pisou, ze je to nejaky standardni dynamicky ramdisk, ktery byl puvodne napsan jako ukazka psani kernel driveru. Faktem je, ze funguje tak, ze po bootu si sezere 1/2 fyzicke RAM (konkretne tusim z buffers) a to je soucasne jeho maximalni velikost. Pokud nejaka aplikace potrebuje RAM, ramdisk ji rad pusti, pokud ji ma. Take mi neni znamo, ze by se tam muselo obcovat s jakymkoliv mkfs.
No jak rikam, musim se na to mrknout, protoze ramdisk popsany v tomto clanku se mi proti tomu memu ale vubec nelibi.
Mam par dotazu:
1) v jadrech 2.4.x je take shmfs (tusim, ted si nejsem jisty). Chova se to take jako ramdisk (data se umistuji do ram), ale nejsem si jisty, jestli tam muzu nastavit jiny fs nez shm. Prakticky primountovanim shmfs je vytvoren jak ramdisk, tak i jeho fs. Ovsem rad bych tam nacpal image ext2 nebo reiserfs. Netusite, jde to?
>>> 2) Tak nejak jsem koukal i na initrd a chapu to dobre, ze initrd je proste image ramdisku, ktera se nahrava a spousti po nahrati jadra? Dalsi vec je, ze bych rad udelal na spustitelne CD jadro a initrd o velikosti rekneme 400MB a z CD by se nahralo jadro, zapnula by se emulace disku podle eltorito spec. a pak by jadro naslo initrd a ten nahralo do pameti a spustilo ho (spousti se /linuxrc, coz by moh byt symlink na init, ne?) Co me desi, podle initrd.txt v Doc. u jadra jadro nahraje initrd do pameti a pak ho zkonvertuje do normalniho RAM disku a uvolni pamet initrd ('the kernel converts initrd into a "normal" RAM disk and frees the memory used by initrd') a tady se desim toho, ze 400 MB zabere initrd a pak se jadro bude snazit udelat dalsich 400MB pro ramdisk. Take si nejsem jisty, jestli by slo pomoci mkisofs udelat eltorito boot CD s imagem disku o velikosti kolem 400MB, nebo jestli boot image musi byt jen velikosti diskety, ale podle spec. by u diskimage nemelo na velikosti zalezet. Pokud by s timhle byly problemy, slo by udelat eltorito boot s disketovym imagem, ktery by vytvoril 400MB ramdisk (spis podle obrazu disku s Linuxem), primountil CD a do ramdisku nahral image z CD (nechci kopirovat soubor po souboru kvuli pristupovani k souborum, kopirovani celeho image by snad mohlo byt rychlejsi). Muzete se nekdo k tomuhle vsemu vyjadrit a pripadne doporucit jiny postup? (myslenka: chci mit stroj, pamet 512 MB, prace moc delat nebude, 400MB ram disk, ktery se bude nahravat z CD, zadna disketa, proste je to jen stroj ze kteryho se budou cucat data, ale nechci tam mit nejakou ocesanou malou distribuci). Diky za reakce:)
ad 2)
pokud si pamatuju, initrd je komprimovany filesystem, pro ktery si jadro vytvori ramdisk. initrd o velikosti 400 MB neni tedy nejlepsi napad. initrd slouzi k tomu, aby se jadro rozbehlo, i kdyz nema treba ovladac disku (nacte si jej z ramdisku, a pak teprve primountuje skutecny root fs; myslim, ze tohle delaji jadra RH u SCSI disku, aby nemusely mit vsechny mozne SCSI drivery primo v kernelu)
Článek je to docela pěkný, ale co s tím ? Daleko užitečnější by bylo, kdyby se dalo s velikostí RAMdisku manipulovat za běhu. Jde to ? Normálně asi ne, ale určitě existují i jiné způsoby ...
Mimochodem přivítal bych, kdyby si autoři článků svoje díla ověřili v praxi :
a) není mi jasné, proč se před formátováním má RAMdisk mazat příkazem
dd if=/dev/null bs=1024 of=/dev/ramdisk count=X
Copak nestačí formátování ?
b) zařízení "null" je výstupní (koš), na mazání je třeba použít místo něj /dev/zero, které generuje nuly.
c) pokud by se na RH zajišťoval start pomocí skriptu (umístěný nejlépe v /etc/init.d + zmíněné linky), bylo by vhodné na začátek mezi poznámky zařadit řádek :
# chkconfig: 2345 82 02
Proč, to už si zvídavý čtenář jistě domyslí / dohledá v manuálech sám ...
noooo,
myslim ze Vami popisovany ramdisk je vhodny pro bootovani, ale pro praci je snad lepsi ramfs nebo tmpfs, jak jiz zde nekdo zminil.
Jde o to, ze si pamet alokuje dynamicky a sezere presne tolik kolik zabiraji v nem ulozene soubory.
Nekdo se tu ptal na format tohoto fs, ze by snad chtel reiserfs?!? proc? data o inodech i souborech jsou v pameti a jsou ulozeny presne jak jadro potrebuje, proste nejefektivneji, cokoli jineho by to zhorsilo.
take mi prijde prinejmensim divne chtit obsah ramdisku zalohovat, od toho snad ramdisk neni ne? pokud vsak ma autor podlozeno ze mu to 100x zrychli praci, pak OK, ale preci jen Linux by mel casto pouzivane soubory mit v cache, takze by to melo byt skoro jedno ne? 100x se mi zda urcite prehnane
ja pouzivam doma ten tmpfs
mount -t tmpfs none /Ramdisk
jeste s parametrem pro defaultni prava 777
a pouzivam ho pouze kdyz rozbaluji sifrovane soubory - aby se neukladali vubec na disk ...
>ja pouzivam doma ten tmpfs
>mount -t tmpfs none /Ramdisk
>jeste s parametrem pro defaultni prava 777
>a pouzivam ho pouze kdyz rozbaluji sifrovane soubory -
>aby se neukladali vubec na disk ...
Mam obavu, ze tomu ukladani nezabranite, protoze obsah tmpfs se muze octnout ve swapfile/swap partition, pokud ho pouzivate.
Tmpfs je totiz implementovan v normalni virtualni pameti, ktera se v danem okamziku muze nachazet jak ve fyz. pameti tak v odkladacim prostoru.
MAN TMPFS
tmpfs puts everything into the kernel internal caches and grows and
shrinks to accommodate the files it contains and is able to swap
unneeded pages out to swap space. It has maximum size limits which can
be adjusted on the fly via 'mount -o remount ...'
If you compare it to ramfs (which was the template to create tmpfs)
you gain swapping and limit checking. Another similar thing is the RAM
disk (/dev/ram*), which simulates a fixed size hard disk in physical
RAM, where you have to create an ordinary filesystem on top. Ramdisks
cannot swap and you do not have the possibility to resize them.
Co tahle? Microstar 865PE NEO2-PFS
Popis: Chipset Intel 865PE, CPU P4 do 3,6GHz/800MHz socket 478 připraveno pro Prescott, FSB 800/533/400(pouze Northwood) MHz , IDE ATA 66/100, 2x SATA /150 raid 0 nebo 1, Dual channel DDR266/333/400/433/466/500/533 MHz max 4GB, 5xPCI, 1xAGP 8x/4x. Bratru za 2700 bez DPH...