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