Tworzenie ramdysków

Uwaga: Ten wpis został utworzony ponad rok temu. Informacje w nim zawarte mogą być nieaktualne!
Jest to artykuł konkursowy nadesłany do nas przez Marcina K.

Ramdysk to obszar pamięci RAM wykorzystywany w roli pamięci dyskowej, dzięki czemu czas dostępu do danych w nim zawartych jest wielokrotnie szybszy, niż na standardowych dyskach. Tworzenie ramdysku pod Linuksem można wykonać na co najmniej 2 sposoby:

Sposób pierwszy

Sprawdzamy czy w katalogu /dev istnieją urządzenia ram:

$ ls -l /dev/ram*
brw-rw---- 1 root disk 1, 0 06-23 17:44 /dev/ram0
brw-rw---- 1 root disk 1, 1 06-23 17:45 /dev/ram1
brw-rw---- 1 root disk 1, 10 06-23 17:44 /dev/ram10
brw-rw---- 1 root disk 1, 11 06-23 17:44 /dev/ram11
brw-rw---- 1 root disk 1, 12 06-23 17:44 /dev/ram12
brw-rw---- 1 root disk 1, 13 06-23 17:44 /dev/ram13
brw-rw---- 1 root disk 1, 14 06-23 17:44 /dev/ram14
brw-rw---- 1 root disk 1, 15 06-23 17:44 /dev/ram15
brw-rw---- 1 root disk 1, 2 06-23 17:44 /dev/ram2
brw-rw---- 1 root disk 1, 3 06-23 17:44 /dev/ram3
brw-rw---- 1 root disk 1, 4 06-23 17:44 /dev/ram4
brw-rw---- 1 root disk 1, 5 06-23 17:44 /dev/ram5
brw-rw---- 1 root disk 1, 6 06-23 17:44 /dev/ram6
brw-rw---- 1 root disk 1, 7 06-23 17:44 /dev/ram7
brw-rw---- 1 root disk 1, 8 06-23 17:44 /dev/ram8
brw-rw---- 1 root disk 1, 9 06-23 17:44 /dev/ram9

Jeżeli ich nie ma, to będziemy musieli utworzyć chociaż jeden:

# mknod /dev/ram0 b 1 1
# chown root:disk /dev/ram0
# chmod 660 /dev/ram0

Następnie utworzyć musimy system plików na danym ramdysku:

# mke2fs -t ext3 -m 0 /dev/ram0

I podmontujemy nasz ramdysk:

# mount -t ext3 /dev/ram0 /media/ramdisk/

Poleceniem df sprawdzamy zamontowane systemy plików:

$ df -h
System plików rozm. użyte dost. %uż. zamont. na
/dev/sda9 14G 6,0G 7,2G 46% /
tmpfs 940M 0 940M 0% /lib/init/rw
udev 937M 304K 937M 1% /dev
tmpfs 940M 1,1M 939M 1% /dev/shm
/dev/sda10 26G 14G 12G 56% /home
/dev/sda3 118G 100G 18G 86% /media/Win
/dev/ram0 7,8M 1,1M 6,7M 14% /media/ramdisk

Jak widać jest on poprawnie zamontowany, lecz jego rozmiar to jedyne 7,8M. Aby zwiększyć rozmiar ramdysku należy przeładować moduł brd z żądanymi dla nas ustawieniami:

# rmmod brd
# modprobe brd rd_nr=ilosc_ramdyskow rd_size=wielkosc

np:

# modprobe brd rd_nr=5 rd_size=20480

w wyniku czego otrzymamy 5 urządzeń /dev/ram[0-4] i każde wielkości 20mb.
Dla porównania prędkości odczytu:

$ hdparm -t /dev/sda1
/dev/sda1:
Timing buffered disk reads: 100 MB in 1.30 seconds = 77.14 MB/sec
$ hdparm -t /dev/ram0
/dev/ram0:
Timing buffered disk reads: 4 MB in 0.00 seconds = 805.64 MB/sec

Wyniki mówią same za siebie:)

Sposób drugi

Jest o wiele szybszy i wygodniejszy w użyciu. Możemy użyć systemu plików tmpfs, który umieszcza dane w pamięci wirtualnej, przez co dostęp do danych jest o wiele szybszy niż w przypadku zapisywania ich na dysk.

# mount -t tmpfs -o size=60m tmpfs /media/ramdisk/

i sprawdzamy:

$ df -h
System plików rozm. użyte dost. %uż. zamont. na
/dev/sda9 14G 6,0G 7,2G 46% /
tmpfs 940M 0 940M 0% /lib/init/rw
udev 937M 252K 937M 1% /dev
tmpfs 940M 3,4M 937M 1% /dev/shm
/dev/sda10 26G 14G 12G 56% /home
/dev/sda3 118G 100G 18G 86% /media/Win
tmpfs 60M 0 60M 0% /media/nfs

Należy jednak pamiętać, że dane umieszczane w pamięci RAM są trzymane tak długo jak długo jest ona zasilana. Dlatego po restarcie / wyłączeniu komputera wszytko zostaje z niej usunięte.

Jeżeli powyższy artykuł nie rozwiązał lub rozwiązał częściowo Twój problem, dodaj swój komentarz opisujący, w którym miejscu napotkałeś trudności.
Mile widziane komentarze z uwagami lub informacjami o rozwiązaniu problemu.
  • RIM

    Sposob drugi :
    mount: punkt montowania /media/ramdisk/ nie istnieje
    ???

    • Unity

      A katalog utworzyłeś?

      sudo mkdir /media/ramdisk
      • RIM

        Dzieki Unity !

  • Greg

    Bardzo ciekawy artykuł na podobny temat znalazłem tu: Ramdysk w systemie Solaris.

  • clfapujc

    Według drugiego sposobu mam zamontowany cały katalog /tmp w RAM. A pamięć cache Firefoksa w /tmp, czyli również w RAM.

    Nie znam jednak innych zastosowań do ramdysków. Może ktoś ma jakieś ciekawe propozycje do zastosowania na komputerze do codziennego użytku (Internet, filmy, muzyka, gimp, compiz itp)?

    • Van

      @clfapujc
      Jak pracujesz przy użyciu aplikacji, która normalnie miele dużo dyskiem twardym, to ramdysk się może przydać.

      Przykład? Takie na przykład nagrywanie pulpitu przy użyciu recordmydesktop zużywa dużo miejsca na dysku w trakcie nagrywania. Innym przykładem mogą być programy do tworzenia muzyki.

      • ubuntu-usr

        @Van: no ok, co do recordmydesktop się zgodzę, tylko co w wypadku, gdy nagrywamy dość długi film, używając przy tym pamięciożernych (np. GIMP) aplikacji? Wydaje mi się, że przy takich operacjach może zabraknąć miejsca w ramdysku, a wtedy co?

    • snejkczif

      Ramdyski świetnie sprawdzają się również jako tzw. cache, gdzie ważny jest czas dostępu do danych, np. w serwerach proxy

      • xyz

        Szkoda, że zabrakło rozwinięcia o przydatności ramdysków w samym artykule

  • user123124

    Witam.
    Po wpisaniu df -h, bez względu na to czy mam dużo rzeczy pootwieranych, czy też nie, zawsze mam 0%… czy wszystko w porządku?

    tmpfs 60M 0 60M 0% /media/ramdisk

  • ubuntu-usr

    tmpfs, który umieszcza dane w pamięci wirtualnej, przez co dostęp do danych jest o wiele szybszy niż w przypadku zapisywania ich na dysk.

    Bzdura! Jak może być o wiele szybszy dostęp, skoro akurat ta metoda korzysta zarówno z RAM jak i swap? Swap domyślnie rezyduje na dysku twardym twardym komputera…