Utilisations variées de Raid, /dev/ram et ramfs

ArticleCategory:

Kernel Corner

AuthorImage:

[Photo of the Author]

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]

[illustration]

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:

  1. MAUVAIS: La taille du ramdisk est fixée au démarrage.
  2. BON: Vous pouvez formater le disque RAM comme vous le souhaitez.
  3. 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.
  4. BON: Vous pouvez avoir plus d'un disque RAM.
Le nouveau disque RAM "ramfs":
  1. 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.
  2. BON: Vous pouvez en avoir plus d'un.
  3. BON: Vous pouvez changer sa taille maximale sur la ligne de commande.
  4. 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.
  5. 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.

  1. 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.
  2. 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.
  3. 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.
  1. 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.
  2. 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.
  3. 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.
  1. Je dois vérifier si je peux combiner ramfs et une partition de disque dur sur un raid en miroir.
  2. Si j'y parviens, les lectures sur le Raid peuvent être limitées à une des partitions.
  3. 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 :
  4. 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

  1. kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
  2. http://genericbooks.com/LDP/HOWTO/Software-RAID-HOWTO.html
  3. Accélérer de petites bases de données sous Linux
  4. Comment utiliser un disque RAM sous Linux
  5. 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