J’ai conscience ne pas vous révéler ici une astuce 0-day, je dirais même que c’est vieux comme le monde… si, si, c’était déjà possible sous OS9 avec vos 64Mb de Ram. Je vous re-sort directement cette astuce de mes vieux cartons, car aujourd’hui la mémoire vive est à un prix plus qu’abordable et que toute personne travaillant sur de gros fichiers: vidéos, dumps de toutes sortes, etc.. sait a quel point il est fatiguant d’attendre que le disque ai fini de gratter pour pouvoir travailler.
J’entends d’ici certain d’entre vous, dire « Mais #!$@, c’est quoi ce RamDisk ? » Et bien, comme son nom l’indique, il s’agit d’un disque dur virtuel travaillant directement sur la Mémoire vive de votre machine préférée… Oui, c’est sexy et très rapide !
Trêve de blabla, mettons en application et voyons ce que ça donne réellement. Ouvrez votre terminal page 1:
Chapitre 1. Créer un RamDisk de 1GB.
La commande dont nous aurons besoin pour créer ce disque se résume en une ligne:
1 2 3 4 5 6 | $ diskutil erasevolume HFS+ "ramdisk" 'hdiutil attach -nomount ram://2330860' Started erase on disk1 Unmounting disk ErasingInitialized /dev/rdisk1 as a 1 GB HFS Plus volume Mounting disk Finished erase on disk1 ramdisk |
« Mais attend c’est quoi ce chiffre, à la fin, tu nous parlais de 1Go !? » En réalité les partitions/volumes/images (rayez la mention inutile) sont composées de bloc de 512 Bytes. Pour calculer ce nombre de bloc (ici, 2330860 blocs pour 1Go recherché) il suffit d’une simple multiplication/division:
1 | 2330860 * 512 = 1.191.400.320. Soit 1 GB. |
Donc la formule à utiliser est:
1 | NombreDeBlocs = (Taille du volume MB) * 2048 |
Voilà, notre disque est monté sur le Bureau et est directement exploitable. Pour l’éjecter, il suffit – comme pour tous les volumes sur Os X – de le jeter à la corbeille.
ATTENTION ! ATTENTION ! ATTENTION ! CECI N’EST PAS UN EXERCICE.
S’agissant d’un volume virtuel en mémoire, une fois éjecté, toutes les donnés présente à l’intérieur a ce moment-là son purement et simplement PERDUES. Il vous faudra les sauvegarder sur un support physique avant de le démonter… De plus, si votre ordinateur plante (kernel panic..) ou est éteint (coupure électrique..) la sanction est la même. Je vous aurais prévenu !
Il est possible (voir indispensable) de mettre en place un système de sauvegarde régulier (via cron, par exemple).. on ne va pas être idiot non plus :)
Petit rappel — De nos jours, nous utilisons souvent les termes bit, byte, octet, etc. Pourtant, certaines personnes semblent confondre les unités et me semble qu’un petit point récapitulatif serait de bon augure.
Il existe trois unités utilisées dans le monde de l’électronique et de l’informatique – mais seulement deux unités en pratique. L’unité de base est le bit, toujours écrit en minuscule: « b ». Le bit est l’unité binaire de base des ordinateurs (ayant pour valeur soit 0, soit 1). Puis viens le byte, noté en majuscule: « B ». Un byte est formé de 8 bits « b ». En France, le mot byte n’est pas utilisé et c’est l’octet « o » (en minuscule) qui est de mise (ndlr: théoriquement…). En simplifiant : 1 octet « o » = 1 byte « B » = 8 bits « b ».
A noter qu’en anglais, il faut se méfier de la confusion possible entre bit (bit) et byte (octet):
kb, Mb, Gb… signifient kilobit, mégabit, gigabit…tandis que que kB, MB, GB… signifient kilobyte, megabyte, gigabyte… Une erreur que l’on voit trop souvent !
Chapitre 2. Utilisation de la mémoire…
Voyons maintenant l’utilisation de la mémoire par le Ramdisk.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | utilisateur$ vm_stat Mach Virtual Memory Statistics: (page size of 4096 bytes) Pages free: 516790. Pages active: 106586. ... utilisateur$ diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://2330860` ... Mounting disk utilisateur$ cp /Users/tintin/Desktop/Mes_vacances.FRENCH.DVDRiP.XviD.avi /Volumes/ramdisk/ utilisateur$ vm_stat Mach Virtual Memory Statistics: (page size of 4096 bytes) Pages free: 2713. Pages active: 293000. ... |
On voit clairement que tout est directement chargé en mémoire, inutile d’en dire plus. Passons maintenant directement aux tests de débit.
Chapitre 3. Tests de débit…
Notre avons vu comment créer le disque, voyons maintenant ce que ça donne en terme de performance par rapport à un disque « classique » (en l’occurrence il s’agit du disque 5400tr/mn d’un MacBook, certes pas le plus performant du marché, mais suffisamment représentatif pour ce test):
Test en ECRITURE sur le DISQUE PHYSIQUE
1 2 3 4 5 6 | utilisateur$ time dd if=/dev/zero of=/Volumes/Macintosh\ HD/testfile bs=1024k count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 18.411572 secs (58.318 Mbytes/sec) ----- real 0m18.829s, user 0m0.004s, sys 0m1.304s |
Test en ECRITURE sur le RAMDISK
1 2 3 4 5 6 | utilisateur$ time dd if=/dev/zero of=/Volumes/ramdisk/testfile bs=1024k count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 2.880844 secs (372.717 Mbytes/sec) ----- real 0m2.907s, user 0m0.005s,sys 0m1.499s |
Test en LECTURE sur le DISQUE PHYSIQUE
1 2 3 4 5 6 | utilisateur$ time dd of=/dev/null if=/Volumes/Macintosh\ HD/testfile bs=1024k 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 13.821304 secs (77.687 Mbytes/sec) ----- real 0m13.861s, user 0m0.006s, sys 0m1.018s |
Test en LECTURE sur le RAMDISK
1 2 3 4 5 6 | utilisateur$ time dd of=/dev/null if=/Volumes/ramdisk/testfile bs=1024k 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 1.812593 secs (592.378 Mbytes/sec) ----- real 0m1.829s, user 0m0.005s, sys 0m1.176s |
Pour un fichier de 1Go:
1 2 3 | ________| Disque Physique | Ramdisk _______ Lecture : 13.8s (77Mb/s) | 1.8s (592Mb/s) Ecriture: 18.4s (58Mb/s) | 2.8s (372Mb/s) |
Joli tableau, n’est-ce pas ? … Bref, les performances parlent d’elles mêmes !
Chapitre 4. Utilisation facile ?
Je vous livre un applescript et un script bash, trouvé sur macosxhints.com pour automatiser le biniou:
Applescript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | tell application "Finder" activate display dialog "This script will create a RAM Disk on your desktop. How many megabytes would you like it to be?" default answer "" buttons {"OK", "Cancel"} default button 1 set diskSize to (text returned of the result) set diskSize to diskSize * 2048 do shell script "hdid -nomount ram://" & diskSize set dskImg to the result set prevTextDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {"/"} set myDevDisk to the last text item of dskImg log result set myShellCmd to "/sbin/newfs_hfs /dev/r" & myDevDisk as text do shell script myShellCmd display dialog result do shell script "hdiutil mount /dev/" & myDevDisk set AppleScript's text item delimiters to prevTextDelims end tell |
Bash:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/bin/sh if [ $# -ne 1 ]; then echo " Usage: newRamDisk.sh <size in MB>" echo "Example: newRamDisk.sh 20" exit fi if [ $1 -lt 4 ]; then echo "Error: Size must be greater than or equal to four megabytes" exit fi ramDiskSize=`echo "${1}*2048" | bc` echo "Allocating $ramDiskSize blocks" ramDiskPath="/dev/r"`hdid -nomount ram://${ramDiskSize} | awk -F / '{print $3}'` echo -n "Creating HFS Plus filesystem on $ramDiskPath" newfs_hfs -v "Ram Disk" $ramDiskPath echo "Mounting $ramDiskPath" hdiutil mount $ramDiskPath |
En résumé, à l’heure ou l’on peu se procurer un maximum de RAM pour un investissement réduit le Ramdisk peut être une solution intéressante pour ceux qui ont besoin de disques très – très – rapides. J’utilise régulièrement cette solution pour les espaces temporaires sur les serveur: /tmp sessions_php ou cache.



Salut
J’ai testé le script j’ai ca en sortie :
sudo sh ramdisk.sh 50
Password:
Allocating 102400 blocks
-n Creating HFS Plus filesystem on /dev/rdisk5
Initialized /dev/rdisk5 as a 50 MB HFS Plus volume
Mounting /dev/rdisk5
hdiutil: mount failed – aucun système de fichiers montable
As tu une idée ? Je suis sous snow leopard
Merci d’avance