Créer un RamDisk sous OS X

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:

    $ diskutil erasevolume HFS+ "ramdisk" 'hdiutil attach -nomount ram://2330860'

    Output:Started erase on disk1Unmounting diskErasingInitialized /dev/rdisk1 as a 1 GB HFS Plus volumeMounting diskFinished 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:

    2330860 * 512 = 1.191.400.320. Soit 1 GB.

    Donc la formule à utiliser est: 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 — qui ne fera pas de mal a certain et je ne vise personne. Hein, Stef ! ;):
    Des 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.

    MacBook-Pro$ vm_stat
    Mach Virtual Memory Statistics: (page size of 4096 bytes)
    Pages free: 516790.
    Pages active: 106586.
    ...

    $ diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://2330860`
    ... Mounting disk

    MacBook-Pro$ cp /Users/tintin/Desktop/Mes_vacances.FRENCH.DVDRiP.XviD.avi /Volumes/ramdisk/

    MacBook-Pro$ 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:
    MacBook-Pro$ 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
    MacBook-Pro$ 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:
    MacBook-Pro$ 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:
    MacBook-Pro$ 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:
    _____ 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:
    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:
    #!/bin/sh
    if [ $# -ne 1 ]; then
    echo " Usage: newRamDisk.sh "
    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é, a l’heure ou l’on peu se gaver de RAM pour un investissement réduit ça peut être une solution intéressante pour ceux qui ont besoin de disques très – très – rapides.

    Possibly Related Posts:



    This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

    Laisser un commentaire

    IMGP2023IMGP1900IMGP1873IMGP2032IMGP1849IMGP1817IMGP1570IMGP1572IMGP1469IMGP1342IMGP1272IMGP1226