web-dev-qa-db-fra.com

Comment puis-je changer la quantité et la taille des disques virtuels Linux (/ dev / ram0 - / dev / ram15)?

Sous Linux, lorsque je démarre, j'ai automatiquement 16 disques RAM de 16 Mo. Toutefois, j'aimerais créer un disque RAM très volumineux pour tester certains logiciels.

J'ai constaté que je pouvais ajuster la taille des disques virtuels déjà présents sur le système avec le paramètre d'amorçage du noyau ramdisk_size; toutefois, la taille spécifiée pour les 16 disques virtuels (/ dev/ram0 -/dev/ram15) est définie. Donc, si je veux créer un disque RAM de 1 Go, il me faudrait 16 Go de mémoire.

En gros, je veux créer un disque RAM de 10 Go qui serait/dev/ram0. Comment pourrais-je m'y prendre? Je suppose qu'il existe un paramètre de démarrage du noyau, mais je ne l'ai tout simplement pas trouvé.

27
Kevin S.

Temps de compilation du noyau

Vous pouvez définir deux options de configuration du noyau dans votre fichier .config:

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Ceci a configuré mon noyau pour créer un disque mémoire qui est 10G au démarrage.

Remarques:

  • CONFIG_BLK_DEV_RAM_SIZE est en ko.
  • Ne spécifiez pas plus de mémoire que vous n'avez réellement RAM sur votre ordinateur.
  • Dans menuconfig, regardez sous Pilotes de périphériques-> Bloquer les périphériques.

Temps de démarrage

Vous pouvez spécifier la taille des disques ram que vous créez via le paramètre de démarrage du noyau ramdisk_size. Par exemple:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

Maintenant, je peux démarrer ma machine et créer un système de fichiers dessus, la monter et l’utiliser exactement comme un périphérique en mode bloc.

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

Sources:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [mort]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt
18
Kevin S.

Vous devriez utiliser tmpfs pour cela à la place.

mount -t tmpfs -o size=10g none /mnt/point
16

Créer un grand disque après l’amorçage sans modifier les paramètres du noyau. Utilisez tmpfs, créez un fichier, montez-le via une boucle et montez-le via un système de fichiers:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

Probablement un peu de performance en passant par plusieurs couches différentes ... mais au moins ça marche.

7
user39725

Une autre option consiste à utiliser les périphériques en boucle (par opposition à la fonctionnalité de montage de loobpack mentionnée précédemment):

dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0

Désormais,/dev/loop est un périphérique de bloc légitime sur lequel votre application agirait comme un périphérique physique ou un disque mémoire, sauf que le fichier est sauvegardé. Vous pouvez monter quelque part ou laisser votre application agir sur le nœud de périphérique, qui implémente les ioctls de bloc standard. Enregistre votre RAM système et utile de garder autour pour testcases, etc.

(Vous pouvez même fdisk myfs.img, créer des partitions dessus et utiliser --offset et --sizelimit avec losetup pour faire pointer chaque/dev/loopX vers des partitions spécifiques de l’image, donc loop0, loop1 deviennent exactement comme sdc1, sdc2, etc. )

6
David Mirabito

Vous pouvez utiliser un fichier de boucle à la place. Créez simplement un fichier de boucle de la taille souhaitée (si vous souhaitez le placer dans un disque RAM tmpfs, très bien), puis formatez le fichier de boucle et montez-le.

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint
3
KFro

L'objet d'une clé USB est la vitesse. Tmpfs n'est pas un lecteur. Les périphériques en boucle ne sont pas des lecteurs, mais vous pouvez placer une image de lecteur sur un périphérique en boucle. Les disques RAM "sont" des lecteurs, et des lecteurs très rapides. Essayez de courir:

hdparm -t /dev/sda 

et alors:

hdparm -t /dev/ram0

Vous verrez ce que je veux dire! Mais hdparm détruit parfois le lecteur de bélier. Donc, vous devez le faire à nouveau.

Parfois, il n'y a pas de périphériques/dev/ram. Pour en faire un:

mknod -m 0777 /dev/ram0 b 1 0 

mais il n'aura aucune taille. Pour lui donner la taille:

dd if=/dev/zero of=/dev/ram0

et il s’arrêtera lorsque le lecteur sera plein. La taille maximale est déterminée par le paramètre de configuration du noyau: CONFIG_BLK_DEV_RAM_SIZE.

Ensuite, formatez-le simplement, c'est-à-dire.

mke2fs /dev/ram0

Et montez le:

mount /dev/ram0 /mnt/ramdrive

Un de mes favoris est le code de débogage stocké sur une clé USB. Les compilations sont au moins 10 fois plus rapides que le code stocké sur un disque dur. Les tables de base de données stockées sur ramdrive volent aussi, mais vous devez avoir un script qui écrit périodiquement sur le disque dur. La plupart des administrateurs n'ont pas le courage de mettre des données sur des disques RAM. Et certaines tables sont trop grandes.

2
Swansword

Sur le phare 64 (Linux génial basé sur slackware) je l’ai fait;

mke2fs /dev/ram1 4096000 # nearly 4G ramdisk, choose the size of ramdisk less than actual ram!
mount /dev/ram1 /mnt/dvd # dvd on my laptop is unused choose your device from /mnt/

Là, vous avez un disque virtuel monté en tant que répertoire /mnt/dvd dans lequel vous pouvez copier-coller, tout faire comme vous le feriez dans un répertoire hd, sauf en RAM. N'oubliez pas de sauvegarder vos fichiers sur le disque dur avant l'arrêt.

1
Marcos