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