RAM disk

In molti sistemi operativi, compreso Linux, è possibile utilizzare una fetta della memoria volatile RAM come un filesystem, tale risultato viene definito RAM disk.
L'utilizzo dei RAM disk è tipicamente giustificato per incrementare le prestazioni di un sistema ove il limite fisico è dato dalla bassa velocità dell'accesso dati.
L'esempio più calzante potrebbe essere un Server Web con una connessione in fibra o con giga ethernet che non potrà mai utilizzare a pieno la banda disponibile poichè il proprio controller ide/scsi/raid sarà troppo lento per accedere ai dati sul proprio filesystem.

Occorre verificare se il kernel Linux abbia abilitato il supporto per i ramdisk, semplicemente verificando l'esistenza dei device /dev/ram(x)
Nel caso del kernel di default di RedHat è già attivato e non occorre la ricompilazione.
[root@nefertiti root]# ls -l /dev/ram*
lrwxrwxrwx    1 root     root            4 Apr  2  2003 /dev/ram -> ram1
brw-rw----    1 root     disk       1,   0 Jan 30  2003 /dev/ram0
brw-rw----    1 root     disk       1,   1 Jan 30  2003 /dev/ram1
brw-rw----    1 root     disk       1,  10 Jan 30  2003 /dev/ram10
brw-rw----    1 root     disk       1,  11 Jan 30  2003 /dev/ram11
brw-rw----    1 root     disk       1,  12 Jan 30  2003 /dev/ram12
brw-rw----    1 root     disk       1,  13 Jan 30  2003 /dev/ram13
brw-rw----    1 root     disk       1,  14 Jan 30  2003 /dev/ram14
brw-rw----    1 root     disk       1,  15 Jan 30  2003 /dev/ram15
brw-rw----    1 root     disk       1,  16 Jan 30  2003 /dev/ram16
brw-rw----    1 root     disk       1,  17 Jan 30  2003 /dev/ram17
brw-rw----    1 root     disk       1,  18 Jan 30  2003 /dev/ram18
brw-rw----    1 root     disk       1,  19 Jan 30  2003 /dev/ram19
brw-rw----    1 root     disk       1,   2 Jan 30  2003 /dev/ram2
brw-rw----    1 root     disk       1,   3 Jan 30  2003 /dev/ram3
brw-rw----    1 root     disk       1,   4 Jan 30  2003 /dev/ram4
brw-rw----    1 root     disk       1,   5 Jan 30  2003 /dev/ram5
brw-rw----    1 root     disk       1,   6 Jan 30  2003 /dev/ram6
brw-rw----    1 root     disk       1,   7 Jan 30  2003 /dev/ram7
brw-rw----    1 root     disk       1,   8 Jan 30  2003 /dev/ram8
brw-rw----    1 root     disk       1,   9 Jan 30  2003 /dev/ram9
lrwxrwxrwx    1 root     root            4 Apr  2  2003 /dev/ramdisk -> ram0


La dimensione di default è di ca 4Mb relativamente poco se si considera che i sistemi odierni superano senza difficoltà 1Gb di memoria RAM, questa dimensione è modificabile sia in run-time mode con il comando rdev o ramsize oppure tramite una configurazione permanente aggiungendo il seguente parametro al boot del kernel ramdisk_size=xxx ove xxx è la dimensione del ramdisk in Kb.
Esempio di configurazione del boot loader grub:
[root@nefertiti root]# cat /etc/grub.conf
[...]
kernel /vmlinuz-2.4.20-18.9 ro root=LABEL=/ ramdisk_size=500000
[...]


Come tutti i supporti occorre formattarlo per poterlo utilizzare come filesystem, esempio:
[root@nefertiti root]# mkfs.ext3 /dev/ram0
mke2fs 1.32 (09-Nov-2002)
warning: 287 blocks unused.

Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
125416 inodes, 499713 blocks
25000 blocks (5.00%) reserved for the super user
First data block=1
61 block groups
8192 blocks per group, 8192 fragments per group
2056 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


Per rendere disponibile il nuovo filesystem occorre montarlo, e spostare il contenuto che deve essere caricato in memoria all'interno del nuovo file system, esempio:
[root@nefertiti root]# mount /dev/ram0 /home/ramdisk
[root@nefertiti root]# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             15380592   9617788   4981508  66% /
/dev/sda1               100692      9501     85992  10% /boot
none                    515456         0    515456   0% /dev/shm
/dev/ram0               483886      8239    450647   2% /home/ramdisk
[root@nefertiti root]# mv /usr/local/apache/htdocs /home/ramdisk/
[root@nefertiti root]#df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             15380592   9613048   4986248  66% /
/dev/sda1               100692      9501     85992  10% /boot
none                    515456         0    515456   0% /dev/shm
/dev/ram0               483886     12496    446390   3% /home/ramdisk


Anche se il filesystem è vuoto sono risorse allocate che il sistema non può utilizzare, quindi è bene calibrare il filesystem per le singole esigenze, inoltre essendo un filesystem basato su memoria volatile il suo contenuto va perso ad ogni riavvio.
Maggiori informazioni ed esempi di creazione di RAM disk si possono trovare nella documentazione all'interno dei sorgenti del kernel linux/Documentation/ramdisk.txt

Privacy Policy