Utilisations variées de Raid, /dev/ram et ramfs
ArticleCategory:
Kernel Corner
AuthorImage:
TranslationInfo:[Author and translation history]
original in en Mark
Nielsen
en to fr Iznogood
AboutTheAuthor:
Mark est un consultant indépendant qui donne de son temps à des causes comme GNUJobs.com, écrit des articles, crée des logiciels libres et travaille comme bénévole à eastmont.net.
Abstract:
Ramfs est un système de fichier très simple avec quelques aspects
intéressants. C'est l'une des nouveautés du noyau 2.4.
ArticleIllustration:[This is the title picture for your
article]
ArticleBody:
Introduction à RamDisk
Veuillez vous référer à mon article original sur les anciens disques RAM. Il est situé ici: Linuxfocus: November1999/article124.html
Je n'entrerai pas dans le détail pour ce qui concerne l'ancienne version de disque RAM dans cet article.
Qu'est-ce qu'un disque RAM? C'est une portion de mémoire que vous allouez
pour l'utiliser comme une partition. Ou, en d'autres termes, vous prenez un
peu de votre mémoire et vous la considérez comme un disque dur que vous
pouvez formater, monter, y sauvegarder des fichiers, etc.
Nous aborderons deux types de disques RAM. Le premier peut être formaté
et monté. Le second ne peut pas être formaté mais possède des
caractéristiques intéressantes. En voici le détail :
L'ancienne approche /dev/ram1:
- MAUVAIS: La taille du ramdisk est fixée au démarrage.
- BON: Vous pouvez formater le disque RAM comme vous le souhaitez.
- MAUVAIS: Une fois formaté (Je ne pense pas que vous deviez le monter), il prend une partie de la mémoire et je ne suis pas sûr que vous puissiez la récupérer.
- BON: Vous pouvez avoir plus d'un disque RAM.
Le nouveau disque RAM "ramfs":
- MAUVAIS: Je n'ai pas pu le formater autrement que selon les
caractéristiques prédédinies. Il est dans la couche VFS, quoique cela
veuille dire.
- BON: Vous pouvez en avoir plus d'un.
- BON: Vous pouvez changer sa taille maximale sur la ligne de commande.
- TRES BON: Il n'utilise que la mémoire dont il a besoin. En d'autres
termes, vous pouvez lui allouer 64 Mo de RAM mais s'il n'a qu'un fichier de 2 ko, il n'utilisera que 2 ko de mémoire. Dès qu'un fichier est effacé, la mémoire précédement occupée est libérée.
- MAUVAIS: Enfin, ce n'est pas vraiment de sa faute. Ne tombez
dans le piège de remplir deux disques RAM ramfs sinon vous n'aurez plus de
mémoire disponible.
Comment utiliser RamDisk à l'ancienne manière
Reportez-vous à l'article: Comment utiliser un disque RAM sous Linux.
Pour utiliser vos disques RAM avec les noyaux 2.0 et 2.2, saisissez simplement ces trois commandes:
mkfs -t ext2 /dev/ram1
mkdir -p /RAM1
mount /dev/ram1 /RAM1
en tant que root et c'est tout. Sur la plupart des systèmes, la taille est
limitée à 4 Mo. Cela peut être changé au démarrage ou si vous recompilez le
noyau, mais pour ça, lisez plutôt l'ancien article. Vous pouvez aussi en
ajouter de cette manière :
mkfs -t ext2 /dev/ram2
mkdir -p /RAM2
mount /dev/ram2 /RAM2
Comment utiliser RamDisk avec ramfs pour le noyau 2.4
Avant tout, je suppose que vous avez un noyau 2.4 avec ramfs compilé. La
plupart des distribution principales qui utilisent le 2.4 l'ont par défaut. J'ai utilisé la RedHat 7.1 pour cet article.
C'est très simple. Créez un répertoire et montez-y ramfs.
mkdir -p /RAM1
mount -t ramfs none /RAM1
Si vous en voulez un second, c'est très simple. Créez un répertoire et
montez-y ramfs.
mkdir -p /RAM2
mount -t ramfs none /RAM2
Changer la taille des disques RAM et autre options.
Voici un exemple sur la manière de créer un disque RAM de 10 Mo.
mkdir -p /RAM1
mount -t ramfs none /RAM1 -o maxsize=10000
Je l'ai récupéré directement sur
http://www.linuxhq.com/kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
+ ramfs - Un système de fichier à taille ajustable logé en RAM
+
+
+ Ramfs est un système de fichiers qui stocke tout dans la RAM.
+ Il permet les accès en lecture et écriture. Contrairement aux
+ disques RAM, qui conservent une taille mémoire fixe, ramfs
+ adapte sa taille à son contenu.
+
+ Vous pouvez monter ramfs par la commande:
+ mount -t ramfs none /mnt/wherever
+
+ Vous n'avez plus qu'à créer et utiliser les fichiers. Lorsque le système
+ de fichier est démonté, tout le contenu est perdu.
+
+ NOTE! Ce système de fichier est probablement plus utile, non pas comme
+ quelque chose de réel mais comme exemple sur la manière d'écrire des
+ systèmes de fichiers virtuels.
+
+Limites de ressources:
+
+Par défaut, ramfs sera limité à l'utilisation de la moitié de la mémoire
+physique pour le stockage du contenu des fichiers et un peu plus
+lorsque les métadonnées seront incluses.
+La limitation en ressources de ramfs peut être contrôlée avec
+les options de montage suivantes:
+
+ maxsize=NNN
+ Indique la taille de mémoire maximale allouée pour le
+système de fichiers à NNN ko. Ce chiffre sera arrondi à l'inférieur
+d'un multiple de la taille de page. Par défaut, c'est équivalent à la
+moitié de la taille de la mémoire. NB. Contrairement à la plupart des
+autres limites, indiquer zéro *ne* signifie *pas* qu'il n'y a pas de
+limites mais limitera réellement la taille des données du système de
+fichiers à zéro page. Il peut y avoir une raison à cela dans des
+ situations spécifiques.
+
+ maxfilesize=NNN
+ Définit la taille maximum d'un simple fichier à
+NNN ko. Ce chiffre sera arrondi à l'inférieur d'un multiple de
+la taille de page. Si NNN=0, il n'y a pas de limite. Il n'y a pas de
+limite par défaut.
+
+ maxdentries=NNN
+ Définit le nombre maximum d'entrées de répertoires
+(liens en dur) sur le système de fichier à NNN. Si NNN=0, il n'y a pas
+de limite. Par défaut, c'est initialisé à maxsize/4.
+
+ maxinodes=NNN
+ Initialise le nombre maximum d'inodes (fichiers
+distincts) sur le système de fichiers à NNN. Si NNN=0, il n'y a pas
+de limite.
+Par défaut, il n'y a pas de limite (mais il ne peut jamais y avoir plus
+d'inodes que d'entrées).
Lancer des services dans RamDisk
J'ai pensé à quelque chose. Ecoutez bien. Ne serait-ce pas fabuleux de
pouvoir lancer vos services (tels que des serveurs web, de base de données
ou DNS) dans un disque RAM? Habituellement, les serveurs web ne contiennent
pas beaucoup de gros fichiers. Habituellement, un serveur DNS ne contient
pas beaucoup de fichiers. Vous pouvez même mettre un serveur de base de
données en mémoire si vous n'avez besoin de stocker que des fichiers temporaires.
La RAM est bon marché en ce moment. J'ai acheté 128 Mo de RAM pour 120$
récemment et je suppose que le prix va continuer à baisser. Avec 128 Mo de
RAM, je peux facilement installer n'importe lequel de mes serveurs web. Si
le serveur web a de gros fichiers, je peux configurer httpd.conf pour qu'il
recherche un autre répertoire à l'extérieur du disque RAM. Mon serveur DNS
est très petit. Mon serveur de données le plus important fait seulement 28
Mo. En considérant le fait que vous pouvez avoir aujourd'hui des ordinateurs
à 1 Go de mémoire pour pas très cher, il serait bien de lancer tous les
serveurs dans la RAM. La partie la plus délicate avec le seveur de base de
données est que vous devez d'abord sauvegarder toutes les données sur un
serveur séparé avant d'écrire sur le serveur en mémoire. C'est lent mais en
considérant le temps passé à lire et non à écrire, les performances sont
meilleures. Peut être qu'il est possible de faire un miroir d'un disque RAM vers un disque dur.
Je l'ai déjà expliqué dans l'autre article, que vous pouvez trouver sur: http://www.gnujobs.com/mark/articles/Ramdisk.html#Example.
Remplacez simplement ces commandes
### Créez les partitions
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2
### Montez les disques RAM
mount /dev/ram0 /home/httpd/cgi-bin
mount /dev/ram1 /home/httpd/icons
mount /dev/ram2 /home/httpd/html
avec celles-ci (augmentez la taille si 10 Mo ne sont pas suffisants):
mount -t ramfs none /home/httpd/cgi-bin -o maxsize=10000
mount -t ramfs none /home/httpd/icons -o maxsize=10000
mount -t ramfs none /home/httpd/html -o maxsize=10000
Ramdisk et Raid
Pourquoi combiner une partition de disque dur et un disque RAM dans une
partition RAID? Je ne sais pas. Mais il pourrait y avoir un intérêt à
l'usage. Les systèmes d'exploitation intelligents n'écartent pas une
fonctionnalité parce qu'il n'y a pas de bénéfice à court terme. C'est
pourquoi beaucoup de systèmes d'exploitation commerciaux sont devenus
impopulaires et pourquoi les logiciels libres remplacent de plus en plus les
applications écrites par des personnes qui sont seulement intéréssées par l'argent et non par la technologie.
Combiner un disque RAM avec une partition de disque dur pose trois problèmes.
- Je ne sais pas comment faire avec ramfs mais je peux le faire avec
/dev/ram. Peut être que s'il était possible de formater une partition de
disque dur avec le système de fichier utilisé par ramfs, ce serait
réalisable. Je ne sais pas à quoi correspond la couche VFS, je vais donc
essayer d'approfondir un peu plus tard.
- Si le Raid en miroir fonctionne en parallèle alors la vitesse
supplémentaire founie par la mémoire sera inutile. S'il était
possible de créer un raid en miroir capable de ne faire que des lectures
du disque RAM, alors ce serait bénéfique.
- Au démarrage, vous devrez recréer le disque RAM.
Pour initialiser le raid, j'ai configuré /etc/raidtab comme ceci.
raiddev /dev/md3
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
chunk-size 4
persistent-superblock 1
device /dev/hdb6
raid-disk 1
device /dev/ram3
raid-disk 0
Puis j'ai exécuté,
mkraid /dev/md3
mkfs -t ext2 /dev/md3
mkdir -p /RAID1
mount /dev/md3 /RAID1
Le problème, au démarrage, est que le disque RAM sera manquant. Donc, après
lancement,
raidstart /dev/md3
raidhotadd /dev/md3 /dev/ram3
mount /dev/md3 /RAID1
Maintenant rappelez-vous que si vous ne reconfigurez pas l'ancien disque RAM
à plus de 4 Mo, il n'est pas nécessaire que votre partition de disque dur
soit supérieure à 4 Mo.
Il serait vraiment intéressant de créer un raid en miroir avec trois
partitions. Une étant le disque RAM, les deux autres étant les partitions de
disque dur et de faire en sorte que seul le disque RAM soit actif pour les
cycles de lecture. Je ne sais pas s'il est possible de limiter les lectures à une seule des partitions d'un Raid mais ce serait très bien.
Commentaires
C'est probablement la section la plus importante de cet article. J'aime
Linux car il permet de se mettre dans des situations critiques. Et il n'y a
rien de mieux que les problèmes pour apprendre.
- Par défaut, ramfs utilise la moitié de la mémoire physique (pas de
swap). Donc si vous en créez deux, et que vous les remplissiez, votre
ordinateur n'aura plus de mémoire et s'arrêtera, comme le mien l'a fait.
Alors, SVP, spécifiez la quantité maximale de mémoire dédiée au disque RAM comme décrit ci-dessus.
- Je pense que ramfs est son propre système de fichiers et non pas ext2,
donc, si vous déplacez des fichiers en utilisant rsync ou tar, ne vous
attendez pas à ce que les fichiers possèdent exactement la même taille.
Vous ne verrez pas de différence majeure la plupart du temps en les
utilisant mais comme ce n'est pas du ext2, leurs propriétés peuvent être
différentes selon le cas.
- A la lecture des docs de ramfs dans le noyau, j'ai vu qu'il ne
semblait pas que ramfs soit destiné à une utilisation étendue, mais je
ne vois pas pourquoi. Il fonctionne de la manière dont je l'espérais.
Mais je n'en ai pas encore fini avec les disques RAM.
- Je dois vérifier si je peux combiner ramfs et une partition de disque
dur sur un raid en miroir.
- Si j'y parviens, les lectures sur le Raid peuvent être limitées à une
des partitions.
- Installer un service, comme un serveur web, sur un disque RAM avec
Raid. Le truc, ici, est d'utiliser Raid de telle manière que si un
changement se produit, vous ne perdrez rien. C'est pourquoi Raid est
tellement important pour moi ---- Je pourrais alors installer des services
dans la RAM en toute SECURITE et profiter des gains de performance par
rapport au disque dur à la condition que :
- Je puisse obtenir de Raid de lire seulement dans la partition de disque RAM et pas dans les autres.
- Les fichiers lus à partir du disque dur soient cachés en mémoire.
C'est seulement dans les cas où les données changent ou sont retirées
du cache que vous noterez une différence de vitesse. Le démarrage
initial est donc plus rapide à la première lecture du fichier.
- Vous pouvez utiliser le serveur web inclus dans les nouveaux
noyaux. Il doit être vraiment très rapide. Et peut-être combiner ce
serveur web avec un disque RAM ?
- Configurer un ordinateur pour démarrer à partir d'un cdrom, démarrer
un service et récupérer les modifications par le réseau. Plus besoin de
disque dur. Ca, ce serait bien. Vous auriez alors un serveur web (ou
quelque chose d'autre) qui fonctionnerait sur un ordinateur sans disque
dur et avec seulement un cdrom et de la mémoire. Si vous montez la mémoire
jusqu'à 1 Go, je ne vois pas pourquoi votre système ne fonctionnerait pas
entièrement à partir d'un CDRom. Ce serait bien pour des raisons de
sécurité. Il faudrait simplement redémarrer le système, lui faire charger
les modifications (correctifs de sécurité) à partir d'une ressource
sécurisée puis démarrer les services et votre ordinateur serait propre et
net, et dépourvu de failles. Le serveur web ne sauvegarderait rien sur
l'ordinateur local mais enregistrerait les logs et les informations sur
une autre machine par une connexion sécurisée ou un réseau interne. J'ai
fait des cdroms bootables en réseau à l'aide de disque RAM dans le passé.
Ce serait bien comme aboutissement, de combiner cela à mon précédent projet.
Ressources
-
kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
- http://genericbooks.com/LDP/HOWTO/Software-RAID-HOWTO.html
- Accélérer de petites bases
de données sous Linux
- Comment utiliser un disque
RAM sous Linux
- Si cet article change, il sera disponible ici: http://www.gnujobs.com/Articles/21/Ramdisk2.html
Merci à Katja pour toute l'aide qu'elle m'a apporté !
Copyright © 4/2001 Mark Nielsen
Article Version 1.3 : Date du Dernier Changement Sat May 19 06:04:06 2001