RAMdisk na Linuxe

Linux nam ponuka velmi zaujimavy strojcek – RAMdisk. V dnesnej dobe, ked cena pamate RAM je na historickom minime a 1GB je smiesne lacny, sa nam naskyta velmi prijemna moznost prace so subormi, ktore potrebujeme casto citat a zapisovat do nich. RAMdisk je totiz neuveritelne rychly. Dalsou moznostou je zapisovat na RAMdisk citlive data, ktore nechceme zapisovat (a nechavat po nich stopy) na HDD – data ulozene na RAMdisku su po vypnuti PC nenavratne stratene bez akejkolvek sance na ich obnovu.

Ako?

Linux ma pripravenych niekolko RAMdiskov defaultne:

[catcher@localhost ~]$ ls -lah /dev/ram*

lrwxrwxrwx 1 root root 4 2008-11-18 16:23 /dev/ram -> ram1

brw-rw---- 1 root disk 1, 0 2008-11-18 16:23 /dev/ram0

brw-rw---- 1 root disk 1, 1 2008-11-18 16:23 /dev/ram1

brw-rw---- 1 root disk 1, 10 2008-11-18 16:23 /dev/ram10

brw-rw---- 1 root disk 1, 11 2008-11-18 16:23 /dev/ram11

brw-rw---- 1 root disk 1, 12 2008-11-18 16:23 /dev/ram12

brw-rw---- 1 root disk 1, 13 2008-11-18 16:23 /dev/ram13

brw-rw---- 1 root disk 1, 14 2008-11-18 16:23 /dev/ram14

brw-rw---- 1 root disk 1, 15 2008-11-18 16:23 /dev/ram15

brw-rw---- 1 root disk 1, 2 2008-11-18 16:23 /dev/ram2

brw-rw---- 1 root disk 1, 3 2008-11-18 16:23 /dev/ram3

brw-rw---- 1 root disk 1, 4 2008-11-18 16:23 /dev/ram4

brw-rw---- 1 root disk 1, 5 2008-11-18 16:23 /dev/ram5

brw-rw---- 1 root disk 1, 6 2008-11-18 16:23 /dev/ram6

brw-rw---- 1 root disk 1, 7 2008-11-18 16:23 /dev/ram7

brw-rw---- 1 root disk 1, 8 2008-11-18 16:23 /dev/ram8

brw-rw---- 1 root disk 1, 9 2008-11-18 16:23 /dev/ram9

lrwxrwxrwx 1 root root 4 2008-11-18 16:23 /dev/ramdisk -> ram0

Defaultne je ich velkost nastavena na 4096 kB. Velkost RAMdiskov vsak mozeme upravit pocas bootu systemu, a to tak, ze kernelu podsupneme parameter ramdisk_size=pocet_kB, takto:

title Fedora (2.6.25-14.fc9.i686)

root (hd0,1)

kernel /boot/vmlinuz-2.6.25-14.fc9.i686 ro root=UUID=133070c1-d881-4279-8543-c55a04e126c9 rhgb ramdisk_size=1331200 quiet

initrd /boot/initrd-2.6.25-14.fc9.i686.img

urcite ste si vsimli parameter ramdisk_size=1331200. Ten zabezpeci, ze velkost kazdeho RAMdisku bude priblizne 1.3 GB. RAMdisk vsak zacne fungovat (a zaberat priestor v operacnej pamati) az potom, ako nanom vytvorime filesystem. On sa sprava ako device, ktore moze byt naformatovane prikazom mkfs (vtedy si alokuje realne stranky v pamati) a nasledne mountnute:

[root@localhost mnt]# mkfs.ext3 -m 0 /dev/ram0

mke2fs 1.41.0 (10-Jul-2008)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

83248 inodes, 332800 blocks

0 blocks (0.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=343932928

11 block groups

32768 blocks per group, 32768 fragments per group

7568 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912

Writing inode tables: done

Creating journal (8192 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or

180 days, whichever comes first. Use tune2fs -c or -i to override.

Parameter m urcuje pocet percent blokov, ktore maju byt vyhradene pre roota – za inych okolnosti velmi prospesny strojcek, ktory vsak teraz nepotrebujeme a vyuzijeme celu velkost ramdisku na vlastne potreby.

Potom uz len:

[root@localhost mnt]# mount /dev/ram0 /mnt/ramdisk0

[root@localhost mnt]# df -h /mnt/ramdisk0

Filesystem Size Used Avail Use% Mounted on

/dev/ram0 1.3G 34M 1.3G 3% /mnt/ramdisk0

[root@localhost mnt]# cd /mnt/ramdisk0

[root@localhost ramdisk0]# ls

lost+found

Mame kusok RAMky namountovany na stroji a mozeme si s nim robit co chceme. A teraz male porovnanie:

[root@localhost ramdisk0]# cd

[root@localhost ~]# pwd

/root

[root@localhost ~]# dd if=/dev/zero of=./test bs=4M count=25

25+0 records in

25+0 records out

104857600 bytes (105 MB) copied, 1.76338 s, 59.5 MB/s

[root@localhost ~]# rm test

rm: remove regular file `test'? y

[root@localhost ~]# cd /mnt/ramdisk0

[root@localhost ramdisk0]# pwd

/mnt/ramdisk0

[root@localhost ramdisk0]# dd if=/dev/zero of=./test bs=4M count=25

25+0 records in

25+0 records out

104857600 bytes (105 MB) copied, 0.241366 s, 434 MB/s

Podla tohoto testu je zapis 4MB blokov na ramdisk priblizne 9 nasobne rychlejsi ako zapis takych istych blokov na HDD.

Vyuzitie RAMdisku by sa dala nechat na vasej fantazii, ja spomeniem napriklad tie casti DocumentRootu apacha, ktore sa casto pouzivaju. Dalsim vhodnym vyuzitim je napriklad vytvorenie 4GB Ramdisku, na ktorom sa vytvori virtualny stroj pod vmware. Umiesti sa nan jeho 4GB HDD file (*.vmdk a *-flat.vmdk), a OS virtualneho stroja sa nastavi tak, aby na tento svoj disk swapoval. Zrychlenie samotneho stroja bude nevidane. Dalsim vhodnym vyuzitim je vytvorit na RAMdisku filesystem /tmp – jeho automaticke mazanie po kazdom reboote by bolo zabezpecene povahou RAMdisku a najnebezpecnejsie subory na systeme (sockety pre ssh) by nikdy neboli zapisane na HDD, co je velmi vyhodna bezpecnostna politika.

Ako by ste vyuzili RAMdisk vy?

Tomas catcher Tudja, 19 Novembra 2008