Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[ramdisk] Problème de création de script de démarrage
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
versus8
Tux's lil' helper
Tux's lil' helper


Joined: 21 Sep 2005
Posts: 130

PostPosted: Wed Sep 21, 2005 2:14 pm    Post subject: [ramdisk] Problème de création de script de démarrage Reply with quote

Bonjour,

J'aimerai créer un ramdisk pour pouvoir y monter ma partition /tmp et mettre certains caches (comme celui de firefox) en RAM. De plus, je pense que le temps des compilations peux être amélioré avec cette méthode. Je possède 1280 Mo de mémoire vive, et je compte alloué 256 Mo pour le ramdisk. Il est aussi possible de paramétrer de ramdisk en taille dynamique (comme pour les versions knoppix). Mais si j'ai de plus amples informations sur ce sujet, j'essaierai de vous les faire partager. Un mini "How to" ici ne ferai pas de mal non? ;)

Je n'ai pas trouvé beaucoup d'informations sur Internet concernant la mise en place et le paramétrage d'un ramdisk sous Linux. Je me suis donc basé sur ce site.

La plupart des informations ici datent et ne se valent plus. Mais dans le principe, cela reste correcte.

Pour infos je trourne sur une Gentoo 2005.0 (version provenant du Linux+ Giga pack de 02/05) avec le noyau 2.6.11 et mes partions utilisent le système de fichier reiserfs 3.6.19.

Pour commencer, j'ai modifié dans /boot/grub.conf la taille du ramdisk à 262144 en me basant sur le site précédemment nommé. Puis j'ai voulu créer un script de démarrage dans /etc/init.d/ pour faire en sorte de copier la partition /tmp dans /dev/ram0 (formaté en ext2). Tout cela pour tester les éventuels atouts d'une telle utilisation d'un ramdisk.

Trois problèmes pointent leur nez. 1) mon script ne marche pas :p 2) il me faudrait sans doute un script aussi pour copier le ramdisk vers la partition /tmp à l'arrêt de la machine 3) le ramdisk ne semble plus exister/activé après le boot (un simple free me le démontre).

Le problème 3) peut donc engendrer le problème 1). Même si le script n'est pas bon (je suis un peu novice je l'avoue). Bref, tant pis pour le script, enfin pour l'instant il est inutile puisque le ramdisk ne s'active qu'au boot, il faudrait donc j'implémente dans ce script de copie, une activation de ce ramdisk?

J'ignore qu'elle est la meilleure solution pour un néophyte comme moi. Utiliser un script de démarrage ou un "gestionnaire de tâches" genre cron ou anacron (désolé de la comparaison Windozienne)?

Bon, pour mon script, je me suis basé sur le wiki de gentoo.fr
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#!/sbin/runscript

start() {
ebegin "Démarrage de copie /tmp vers ramdisk"
start-stop-daemon --start --quiet --background --pidfile /var/run/ramdisk.pid --make-pidfile --exec /usr/bin/ramdisk
eend $?
}

stop() {
ebegin "Processus copie vers ramdisk terminée"
start-stop-daemon --stop --quiet --pidfile /var/run/example.pid --name example
eend $?
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Oui, beaucoup doivent bien rire en constatant le pourquoi cela ne marche pas :) Je suis loin d'être une bête dans ce domaine et je ne demande qu'à apprendre. D'ailleurs j'ai vu quelques sites us/fr très bien fait, par exemple ici ou ici. Je suis en train de les étudier ;) mais si vous avez d'autres mines d'informations sur la conception de scripts ou, sur son langage (c'est du C non?) je suis preneur. De toute manière, j'irai acheter des bouquins si cela s'avérerait nécessaire (des conseils?) :D

Bref, je comprend que ce script fais appel à un binaire (?) que j'ai essayé de créer dans /usr/bin/ramdisk. Cette horreur à cette forme :

/sbin/mkfs.ext2 /dev/ram0
cp /tmp/*.* /dev/ram0
mount /dev/ram0 /tmp

Malgré ces erreurs de noob :oops: , la logique est-elle bonne?

J'ai donc essayé /etc/init.d/ramdisk start et vous devinez sans doute le résultat.

J'ai aussi essayé de mettre la ligne suivante dans mon /etc/fstab :

/dev/ram0 /tmp ext2 noatime,notail 0 0

Pas plus de succès. Je désespere pas, et je vais voir comment je pourrais faire automatiser tout cela avec cron. Il faudrait au moins que je réussisse à ce que cela fonctionne manuellement.

Si des personnes sont intéressés par la création d'un ramdisk pour des besoins similaires aux miennes, je serai heureux qu'elles se manifestent et que, ensemble, on puisse proposer des solutions sympathiques. Je raaaame :lol:

Merci de m'avoir lu. A très bientôt,

Marc.


P.S : mon noyau est compilé pour le ramdisk (en module) et cela fonctionne bien avec mon initrd (sauf pour le splash-screen de démarrage, tandis qu'à l'arrêt il fonctionne. Serait-ce un indice?).


Credits :

http://www.gentoo.org/doc/fr/handbook/handbook-x86.xml?part=2&chap=4 > http://creativecommons.org/licenses/by-sa/2.5/deed.fr

http://lea-linux.org/admin/admin_boot/daemons.html

http://fr.gentoo-wiki.com/HOWTO_Cr%C3%A9er_un_script_rc > Par défaut sous licence GNU FDL


Last edited by versus8 on Thu Sep 22, 2005 4:45 pm; edited 2 times in total
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Wed Sep 21, 2005 3:05 pm    Post subject: Reply with quote

Alors tout d'abord tu fais une confusion assez génante entre ramdisk et initial ramdisk (initrd), le second a vocation à être monté sur / au boot du kernel, executer un script quelconque (chargements de modules pour lire le FS utilisé sur la "vraie" partition correspondant à /, ...) avant de monter / sur la "bonne" partition et de passer la main à init, père de tous les processus (pid=1, merci exec).

Il y'a plusieures manières d'utiliser les ramdisks, la plus simple et la plus récente étant :

Code:
mount -t tmpfs /ton_point_de_montage -o size=taille_maximale_du_ramdisk


ainsi pour mettre un fichier dans ce ramdisk dynamique (tant qu'il n'y a rien dedans sa taille = 0)

Code:
mv ton_fichier /ton_point_de_montage


pour les statiques ce sont bien les périphs /dev/ram*

leur taille est initialisée en faisant un dd
Code:
if=/dev/ram* of=/dev/zero bs=taille_des_blocs count=nombre_de_blocks


ensuite il faut bien les formater comme tu l'as dit, puis les monter, ensuite c'est tout con, dans ton install tu avais monté une partoche sur /mnt/gentoo, et pour avoir tes donnés sur la partoche tu copiais dans /mnt/gentoo, là c'est encore et toujours pareil, tu copies/déplace les fichiers dans/vers le point de montage et ils sont mis sur le périph correspondant (donc ton ramdisk)

Voilà, sinon pour le script, heu ouais non sens total à mon avis, tu sors d'où le /usr/bin/ramdisk???

edit : Ah et dernière remarque, il ne suffit pas de copier le cache de firefox sur un ramdisk pour que ce dernier s'en serve automatiquement :wink:

edit2 : les scripts de démarrage c'est du bash ou du sh (du bash amoindri quoi!) à un où deux détails près; en gros /sbin/runscript (qui a été écrit en C) sauve les arguments et les passe à /sin/runscript.sh qui est un script bash qui va sourcer le fichier d'init (c.a.d prendre son contenu) et appeler la fonction du script que tu souhaitais executer (après y'a plein de subtilités mais en gros c'est ça :wink: )

edit 3 : erreur de syntaxe s/block/bs


Last edited by Enlight on Thu Sep 22, 2005 11:33 am; edited 1 time in total
Back to top
View user's profile Send private message
Oliv
n00b
n00b


Joined: 17 Sep 2005
Posts: 35
Location: Montpellier (France)

PostPosted: Wed Sep 21, 2005 5:57 pm    Post subject: Reply with quote

Quote:
Voilà, sinon pour le script, heu ouais non sens total à mon avis, tu sors d'où le /usr/bin/ramdisk???

ben si j'ai bien compris, ramdisk est un script bash qu'il a créé lui même et qui contient cela:
Code:
/sbin/mkfs.ext2 /dev/ram0
cp /tmp/*.* /dev/ram0
mount /dev/ram0 /tmp

donc comme tu l'auras compris ton script est un peu faux, même si dans l'idée générale c'est ça...
Comme te l'as suggéré Enlight, créé ton ramdisk:
Code:
if=/dev/ram* of=/dev/zero block=taille_des_blocs count=nombre_de_blocks

puis 2 solutions: soi copier les données dans le ramdisk immédiatement à l'aide de dd (solution un peu bizarre je dirais) soit tu montes ta partition et ensuite tu copies les données pour le ramdisk (voir code de Enlight)
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Wed Sep 21, 2005 6:57 pm    Post subject: Reply with quote

Oliv wrote:

puis 2 solutions: soi copier les données dans le ramdisk immédiatement à l'aide de dd (solution un peu bizarre je dirais) soit tu montes ta partition et ensuite tu copies les données pour le ramdisk (voir code de Enlight)


C'est clair faut être sacrément 1337 si tu copies sur le ramdisk car il faut copier de tel à tel inode et recréer le journal qui va bien :? (sauf ext2 et reseir 3.6 qui a une option sans journal (JFS peut être également?)) et de toute façon il faut un point de montage pour que les accès se fassent en lecture écritute, le mode opératoire le plus simple reste quand même IMHO :

1) montage d'un rep en tmpfs
2) déplacement du cache firefox dans ce rép
3) création d'un symlink depuis l'emplacement originel vers le fichier en ramdisk

De manière générale je dirais va pas t'emm...er avec les /dev/ram si c'est pas un cas de force majeure (initrd justement)
Back to top
View user's profile Send private message
versus8
Tux's lil' helper
Tux's lil' helper


Joined: 21 Sep 2005
Posts: 130

PostPosted: Thu Sep 22, 2005 4:27 pm    Post subject: Reply with quote

Merci beaucoup Enlight et Oliv, j'y voit plus clair grâce à vous!

Sauf peut-être pour la commande dd et son code. dd m'a l'air d'être assez complexe à utiliser. Si j'ai bien compris, un mkfs.ext2 /dev/ram0 ne suffirait donc pas, il faudrait aussi, pour limiter la taille de ce ramdisk, copier d'un inode à tel inode? Mais si je comprend toujours bien, cela n'est pas nécessaire pour un FS non journalisé.

Au fait, que veux-tu dire par IMHO? :D J'ai déjà vu ce terme dans mes recherches.

<<edit : Ah et dernière remarque, il ne suffit pas de copier le cache de firefox sur un ramdisk pour que ce dernier s'en serve automatiquement :wink: >>

- Oui je m'en doute :lol:

Tiens en effectuant des recherches, j'ai trouvé ceci :

<<From: Aaron Walker <ka0ttic <at> gentoo.org>
Subject: Re: ramdisk
Newsgroups: gmane.linux.gentoo.performance
Date: 2004-10-22 14:48:23 GMT (47 weeks, 6 days, 1 hour and 15 minutes ago)

� wrote:
| Hi,
|
| IMHO Linux has very good caching mechanism, so there is no need of
| ramdisks (er, ramfs or tmpfs) in most situations.
|
| On the contrary, Solaris is using tmpfs for /tmp and /var/run. I really
| like this idea, so after Gentoo install I always add
|
| none /tmp tmpfs size=64M,mode=1777 0 0
|
| to my fstab. Your preferences may differ.
|

I do this as well. On my laptop, I also mount /var/log as tmpfs to reduce the
number of writes (and hence prolong battery life).

--
guru, n:
A computer owner who can read the manual.

Aaron Walker - Gentoo Developer [ Gentoo/BSD / cron / shell-tools ]
ka0ttic <at> gentoo.org http://dev.gentoo.org/~ka0ttic/ >>

C'est une bonne piste?

J'ai aussi vu sur le Net que l'on pouvait paramétrer un ramdisk dans make.conf (FEATURES) pour la compilation. D'ailleur on peut sans doute mettre ccache_dir dans un tmpfs en mémoire vive, mais il faudrait limiter le cache en taille, car en dynamique, il se peut que cela sature... ou pas :p

<<# PORTAGE_TMPFS is a location where portage may create temporary files.
# If specified, portage will use this directory whenever possible
# for all rapid operations such as lockfiles and transient data.
# It is _highly_ recommended that this be a tmpfs or ramdisk. Do not
# set this to anything that does not give a significant performance
# enhancement and proper FS compliance for locks and read/write.
# /dev/shm is a glibc mandated tmpfs, and should be a reasonable
# setting for all linux kernel+glibc based systems.
#PORTAGE_TMPFS="/dev/shm" >>

Sinon d'autres informations concernant le montage de la partition /tmp en RAM :

<<8. Trucs et astuces

Utiliser tmpfs

L'astuce de cette semaine vous montre comment utiliser tmpfs pour accélérer le temps d'accès des petits fichiers temopraires. Tmpfs simule un système de fichiers en supportant les lectures/écritures normales, mais les fichiers sont stockés en mémoire, ce qui rend les accès beaucoup plus rapides. Notez que les fichiers sotckés dans le tmpfs ne sont pas sauvegardés entre les redémarrages. De plus, tmpfs est seulement recommandé pour les systèmes avec beaucoup de mémoire.

Tous d'abord, assurez vous que tmpfs est activé dans votre noyau.

Code Listing 8.1: Activer tmpfs dans le noyau

# cd /usr/src/linux
# make menuconfig
Enable File Systems -->
[*] Virtual memory system support
(Enable this option)

# make dep && make clean bzImage

(Assurez vous que /boot est monté avant cette étape)
# cp /usr/src/linux/arch/i386/boot/bzImage /boot

/tmp est la place la plus courante pour stocker les fichiers temporaires. Nous allons utiliser tmps pour monter /tmp

Code Listing 8.2: Monter /tmp avec tmpfs

# mount -t tmpfs tmpfs /tmp

Maintenant que /tmp est monté, tout ce que vous devez faire est d'ajouter ceci dans votre /etc/fstab pour que cela soit fait automatiquement au démarrage.

Code Listing 8.3: Ajoutez ce qui suit dans votre fichier fstab

tmpfs /tmp tmpfs defaults 0 0 >>

Voilà pour ces petites infos; j'espére qu'elles seront utiles pour d'autres qui veulent tester ce que l'on peut faire avec un ramdisk.

Encore merci et à bientôt!

Marc.



Credits :

http://www.gentoo.org/news/fr/gwn/20030324-newsletter.xml Copyright 2001-2005 Gentoo Foundation, Inc.

http://article.gmane.org/gmane.linux.gentoo.performance/174

http://dev.gentoo.org/~metalgod/stuff/make.conf Copyright 1999-2004 Gentoo Foundation. Distributed under the terms of the GNU General Public License v2
Back to top
View user's profile Send private message
Oliv
n00b
n00b


Joined: 17 Sep 2005
Posts: 35
Location: Montpellier (France)

PostPosted: Thu Sep 22, 2005 5:16 pm    Post subject: Reply with quote

Je dirais que IMHO = In My Humble Opinion... donc en bon français: "A mon Humble Avis" ;)
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Thu Sep 22, 2005 7:06 pm    Post subject: Reply with quote

Oliv wrote:
Je dirais que IMHO = In My Humble Opinion... donc en bon français: "A mon Humble Avis" ;)


yep! quand au dd (dédé? dédééééééééééééé!) ça se fait avant le formatage du /dev/ram comme dit pour initialiser la taille de ce dernier (mais j'ai un sérieux doute quand au fait que si on excède la taille spécifiée (dans la config kernel) on n'écrive pas sur les /dev/ram suivants il me semble avoir gauffré une knoppix qui a son /ramdisk monté sur /dev/ram1 en faisant un gros dd sur /dev/ram0) Mais honnetement j'ai beaucoup de mal avec dd aussi.

Ce que je te conseille, une fois encore c'est de l'oublier et d'utiliser tmpfs. sinon les fichiers comme les logs mettre en ramdisk, j'ai envie de dire si t'es en reiser 3.6 ou ext* peut être, mais avec XFS ou JFS qui cachent beaucoup ou reiser4 qui écrit de manière atomique, ça me parraît inutile.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum