Po(d)ręczny ramdysk

Każdy użytkownik komputera ma swój katalog roboczy – tam, gdzie kopiowane są pliki przeznaczone do spakowania czy przetworzenia, jakieś wersje robocze dokumentów itp. Często takim miejscem jest katalog Pobrane, co bardziej świadomi użytkownicy tworzą dedykowany folder temp, work czy praca, a najczęściej jest to po prostu… pulpit. To miejsce ma niestety tendencję do zapychania się plikami, które dawno powinny być skasowane, ale już nikt nie pamięta co naprawdę zawierają więc… robi się bałagan. Przydałoby się oddzielne miejsce z szybkim dostępem, które byłoby automatycznie czyszczone ze śmieci. Okazuje się, że każdy użytkownik Linuksa ma takie miejsce pod ręką.

W Linuksie istnieje urządzenie /dev/shm. Jest to wirtualne urządzenie, odpowiedzialne za pamięć współdzieloną (shared memory). Z tego rozwiązania korzystają m.in. przeglądarki np. Brave. /dev/shm można wykorzystać do własnych potrzeb, do stworzenia tzw. ramdysku czyli wirtualnego dysku, który jest umiejscowiony w pamięci RAM komputera. Operacje dyskowe w ramdysku są przeprowadzane wielokrotnie szybciej niż na dysku twardym więc skopiowanie plików, spakowanie ich w archiwum czy utworzenie pliku tymczasowego w ramdysku znacznie przyspiesza pracę.

To rozwiązanie ma jeszcze jedną cechę która może być tyleż zaletą, co wadą: dysk jest czyszczony przy każdym restarcie komputera. Dzięki temu unika się bałaganu, ale przypadkowy restart czy brak prądu może zniweczyć wykonaną pracę – jeśli jej wyniki zapisywane były w ramdysku.

Montowanie

Aby zamontować ramdysk należy najpierw założyć dla niego katalog. Można to zrobić w dowolnym miejscu np. w katalogu użytkownika (nazwa może być dowolna, w przykładzie jest to ram):

$ mkdir /home/<użytkownik>/ram

Rzecz jasna <użytkownik> należy zamienić na swoją nazwę użytkownika.

Można też założyć katalog w miejscu montowania urządzeń (/mnt lub /media). W takim przypadku trzeba to zrobić za pomocą sudo:

$ sudo mkdir /mnt/ram

lub

$ sudo /media/ram

i udostępnić go użytkownikom:

$ sudo chmod 777 /mnt/ram

lub

$ sudo chmod 777 /media/ram

Taki katalog będzie dostępny dla wszystkich użytkowników systemu.

Teraz można już zamontować urządzenie w założonym katalogu:

$ sudo mount -t tmpfs /dev/shm /home/<użytkownik>/ram

I tu <użytkownik> trzeba zamienić na własną nazwę użytkownika.
Opcja -t tmpfs oznacza rodzaj montowanego systemu plików – tmpfs, który jest właściwy dla urządzenia /dev/shm.
Jeśli katalog przeznaczony dla urządzenia został założony w katalogu wspólnym, przeznaczonym do montowania urządzeń to trzeba podać właściwą ścieżkę do niego.

$ df -h

Polecenie df nie służy co prawda do sprawdzania, czy dysk został zamontowany, czy nie, a do sprawdzenia ile jest miejsca na poszczególnych urządzeniach, ale jego wynik bardzo ładnie pokazuje wszystkie punkty montowania więc często jest używane do tego celu:

$ df -h

System plików  rozm. użyte dost. %uż. zamont. na
udev            7,8G     0  7,8G   0% /dev
tmpfs           1,6G  3,2M  1,6G   1% /run
/dev/sda2        94G   21G   68G  24% /
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           7,8G     0  7,8G   0% /sys/fs/cgroup
/dev/sda1       511M  7,9M  504M   2% /boot/efi
/dev/sdb1       917G  643G  228G  74% /home
tmpfs           1,6G   20K  1,6G   1% /run/user/1000
/dev/shm        7,8G     0  7,8G   0% /home/piotr/ram

Jak widać pamięć współdzielona została zamontowana w katalogu domowym użytkownika piotr.

Polecenie df pokazało przy okazji pojemność nowego dysku. Jest ona równa połowie dostępnej pamięci komputera. Na szczęście zamontowanie dysku nie powoduje utraty takiej ilości pamięci. Jest to maksymalna wielkość dysku. Jego rozmiar jest dynamiczny i zwiększany w miarę tworzenia w nim plików; kiedy pliki są usuwane, rozmiar dysku się zmniejsza.

Może się zdarzyć, że potrzebny będzie dysk większy niż połowa pamięci. Można to uzyskać, dodając do polecenia montowania opcję size:

$ sudo mount -o remount,size=10G /dev/shm /home/piotr/ram

$ df -h

System plików  rozm. użyte dost. %uż. zamont. na
udev            7,8G     0  7,8G   0% /dev
tmpfs           1,6G  3,2M  1,6G   1% /run
/dev/sda2        94G   21G   68G  24% /
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           7,8G     0  7,8G   0% /sys/fs/cgroup
/dev/sda1       511M  7,9M  504M   2% /boot/efi
/dev/sdb1       917G  643G  228G  74% /home
tmpfs           1,6G   20K  1,6G   1% /run/user/1000
/dev/shm         10G     0   10G   0% /home/piotr/ram

Opcja remount została użyta, by automatycznie przemontować zamontowane już wcześniej urządzenie.

Jeśli ramdysk jest niepotrzebny, a zachodzi obawa, że może przeszkadzać, można go odmontować poleceniem:

$ sudo umount <katalog montowania>

Należy podać ścieżkę do katalogu, w którym został zamontowany ramdysk. Ponieważ urządzenie /dev/shm może być używane przez programy to próba odmontowania samego urządzenia może skończyć się niepowodzeniem.

Można też ustawić stałe montowanie ramdysku. Należy wówczas dodać wpis w pliku /etc/fstab, odpowiedzialnym za montowanie urządzeń w czasie startu systemu. Można to zrobić za pomocą domyślnego edytora np. nano lub dowolnego innego, trzeba jedynie pamiętać o dodaniu sudo:

$ sudo nano /etc/fstab

Na końcu należy dodać linię:

 /dev/shm    /home/piotr/ram     tmpfs     defaults    0    0 

Poszczególne elementy oddziela się od siebie tabulatorem lub kilkoma spacjami.

Aby uzyskać dysk o innej niż domyślna wielkości trzeba zamiast domyślnych opcji (defaults) podać opcję size oraz wielkość, tak jak przy montowaniu ręcznym:

/dev/shm    /home/piotr/ram     tmpfs     size=10G    0    0

Po zapisaniu pliku fstab nie należy restartować komputera! Jeśli coś poszło nie tak to system może nie wystartować. Zamiast tego trzeba przemontować wszystkie urządzenia za pomocą polecenia:

$ sudo mount -a

Polecenie mount z opcją -a próbuje zamontować ponownie wszystkie urządzenia wymienione w pliku fstab. Jeśli wszystko poszło dobrze polecenie df -h powinno pokazać zamontowany katalog roboczy, a przy następnym restarcie zostanie on zamontowany automatycznie.

Rozwiązanie to sprawdza się w praktyce – tam, gdzie trzeba wykonać operacje na wielu plikach lub dużych plikach, kiedy wymagana jest duża liczba operacji dyskowych – ramdysk potrafi znacząco przyspieszyć pracę. Sprawdza się również jako cache przeglądarki czy innych programów, które zapisują sobie swoje pliki w czasie pracy. Ostrożnie natomiast trzeba go stosować jako katalog roboczy na dokumenty – zawieszenia systemu czy zaniki prądu się zdarzają i wtedy cała praca idzie w powietrze. Natomiast do przetrzymywania plików, które mają być chwilowe, robocze, nadaje się bardzo dobrze, bo usuwając je przy restarcie oszczędza bałaganu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Poprzedni post

OpenStreetMap Część 1 – Świat otwartych danych

Następny post

Klawiatura Launch – Nowość od firmy System76

Powiązane posty