GNU/Linux >> Tutoriels Linux >  >> Linux

La différence entre initrd et initramfs ?

Je pense que vous avez raison en tout.

La différence est facile à voir si vous suivez les étapes nécessaires lors du démarrage :

initrd

  • Un ramdev périphérique de bloc est créé. Il s'agit d'un périphérique bloc basé sur RAM, c'est-à-dire un disque dur simulé qui utilise de la mémoire au lieu de disques physiques.
  • Le initrd le fichier est lu et décompressé dans l'appareil, comme si vous faisiez zcat initrd | dd of=/dev/ram0 ou quelque chose de similaire.
  • Le initrd contient une image d'un système de fichiers, vous pouvez donc maintenant monter le système de fichiers comme d'habitude :mount /dev/ram0 /root . Naturellement, les systèmes de fichiers ont besoin d'un pilote, donc si vous utilisez ext2, le pilote ext2 doit être compilé dans le noyau.
  • Terminé !

initramfs

  • Un tmpfs est monté :mount -t tmpfs nodev /root . Le tmpfs n'a pas besoin de pilote, il est toujours sur le noyau. Aucun périphérique nécessaire, aucun pilote supplémentaire.
  • Le initramfs est décompressé directement dans ce nouveau système de fichiers :zcat initramfs | cpio -i , ou similaire.
  • Terminé !

Et oui, il s'appelle toujours initrd dans de nombreux endroits bien qu'il s'agisse d'un initramfs , en particulier dans les chargeurs de démarrage, car pour eux, il s'agit simplement d'un BLOB. La différence est faite par le système d'exploitation lorsqu'il démarre.


Cache Dentry (et inodes)

Le sous-système de système de fichiers sous Linux comporte trois couches. Le VFS (système de fichiers virtuel), qui implémente l'interface des appels système et gère les points de montage croisés et les vérifications des autorisations et des limites par défaut. En dessous se trouvent les pilotes des systèmes de fichiers individuels et ceux-ci s'interfacent à leur tour avec les pilotes des périphériques blocs (disques, cartes mémoire, etc. ; les interfaces réseau sont exceptionnelles).

L'interface entre VFS et le système de fichiers comprend plusieurs classes (c'est du C pur, donc des structures contenant des pointeurs vers des fonctions et autres, mais c'est conceptuellement une interface orientée objet). Les trois principales classes sont inode , qui décrit tout objet (fichier ou répertoire) dans un système de fichiers, dentry , qui décrit l'entrée dans un répertoire et file , qui décrit le fichier ouvert par un processus. Une fois monté, le pilote du système de fichiers crée inode et dentry car sa racine et les autres sont créées à la demande lorsque le processus veut accéder à un fichier et finit par expirer. C'est un dentry et un cache d'inodes.

Oui, cela signifie que pour chaque fichier ouvert et tout répertoire jusqu'à la racine, il doit y avoir inode et dentry structures allouées dans la mémoire du noyau le représentant.

Cache de pages

Sous Linux, chaque page mémoire contenant des données utilisateur est représentée par un page unifié structure. Cela peut marquer la page comme anonyme (peut être échangée contre un espace d'échange si disponible) ou l'associer à inode sur certains systèmes de fichiers (peut être réécrit et relu à partir du système de fichiers) et il peut faire partie de n'importe quel nombre de cartes mémoire, c'est-à-dire visible dans l'espace d'adressage d'un processus. La somme de toutes les pages actuellement chargées en mémoire constitue le cache de pages.

Les pages sont utilisées pour implémenter l'interface mmap et bien que les appels système de lecture et d'écriture réguliers puissent être implémentés par le système de fichiers par d'autres moyens, la majorité des interfaces utilise une fonction générique qui utilise également des pages. Il existe des fonctions génériques qui, lorsque la lecture d'un fichier est demandée, allouent des pages et appellent le système de fichiers pour les remplir, une par une. Pour le système de fichiers basé sur un périphérique bloc, il calcule simplement les adresses appropriées et délègue ce remplissage au pilote de périphérique bloc.

ramdev (disque virtuel)

Ramdev est un périphérique de bloc régulier. Cela permet de superposer n'importe quel système de fichiers, mais cela est limité par l'interface de périphérique de bloc. Et cela a juste des méthodes pour remplir une page allouée par l'appelant et l'écrire en retour. C'est exactement ce qui est nécessaire pour les vrais périphériques de bloc comme les disques, les cartes mémoire, le stockage de masse USB et autres, mais pour le disque virtuel, cela signifie que les données existent en mémoire deux fois, une fois dans la mémoire du ramdev et une fois dans la mémoire allouée par le appelant.

C'est l'ancienne façon d'implémenter initrd . Depuis des temps où initrd était rare et exotique.

tmpfs

Tmpfs est différent. C'est un système de fichiers factice. Les méthodes qu'il fournit à VFS sont le strict minimum absolu pour le faire fonctionner (en tant que tel, c'est une excellente documentation de ce que les méthodes inode, dentry et file doivent faire). Les fichiers n'existent que s'il existe un inode et un dentry correspondants dans le cache d'inodes, créés lors de la création du fichier et n'ayant jamais expiré à moins que le fichier ne soit supprimé. Les pages sont associées à des fichiers lorsque des données sont écrites et se comportent autrement comme des pages anonymes (les données peuvent être stockées pour être échangées, page les structures restent utilisées tant que le fichier existe).

Cela signifie qu'il n'y a pas de copies supplémentaires des données en mémoire et que tout est beaucoup plus simple et, de ce fait, légèrement plus rapide également. Il utilise simplement les structures de données, qui servent de cache pour tout autre système de fichiers, comme stockage principal.

C'est la nouvelle façon d'implémenter initrd (initramfs , mais l'image s'appelle toujours simplement initrd ).

C'est aussi le moyen d'implémenter la "mémoire partagée posix" (ce qui signifie simplement que tmpfs est monté sur /dev/shm et les applications sont libres d'y créer des fichiers et de les mmaper; simple et efficace) et depuis peu /tmp et /run (ou /var/run ) ont souvent des tmpfs montés spécialement sur les ordinateurs portables pour empêcher les disques de tourner ou éviter une certaine usure en cas de SSD.


Linux
  1. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  2. La différence entre "env" et "printenv" ?

  3. Différence entre le tas Java et le tas C natif

  4. Quelle est la différence entre la mémoire tampon et la mémoire cache sous Linux ?

  5. Quelle est la différence entre strtok_r et strtok_s en C ?

Quelle est la différence entre Linux et Unix ?

La Différence Entre Nss Et Pam?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?

Quelle est la différence entre DMA et les E/S mappées en mémoire ?

Quelle est la différence entre l'écriture dans un fichier et une mémoire mappée ?