Poza tym tmpfs
i ramfs
, innym rozwiązaniem jest /dev/ram0
urządzenie blokowe. W najnowszych wersjach Ubuntu to urządzenie domyślnie nie istnieje, ale można je utworzyć za pomocą modprobe brd
.
To podejście jest bardziej przewidywalne, ponieważ tworzy prawdziwy ext4
system plików i nigdy nie przekracza określonego limitu. Ale konfiguracja wymaga więcej kroków i mniej wydajnie wykorzystuje pamięć RAM.
Korzystanie z modułu jądra brd (/ dev / ram0)
Aby utworzyć i zainicjować dysk RAM o pojemności 4 GB:
mkdir /ramdisk
modprobe brd rd_nr=1 rd_size=$((4 * 1048576))
mkfs.ext4 /dev/ram0
mount /dev/ram0 /ramdisk
Ten rd_nr
parametr określa liczbę dysków RAM do utworzenia (domyślnie tworzy 16, tzn. /dev/ram0
Poprzez /dev/ram15
). rd_size
Parametrem jest rozmiar w kilobajtach . $(( ... ))
Składnia pozwala zrobić arytmetyczne w powłoce.
Aby zwolnić dysk RAM, odmontuj go i usuń brd
moduł jądra:
umount /ramdisk
modprobe -r brd
Tworzenie wewnątrz urządzenia blokowego ramfs
Alternatywnie możesz utworzyć urządzenie blokowe wewnątrz ramfs
:
mkdir /ramdisk-storage /ramdisk
mount -t ramfs ramfs /ramdisk-storage
truncate -s 4G /ramdisk-storage/ramdisk.img
mkfs.ext4 /ramdisk-storage/ramdisk.img
mount /ramdisk-storage/ramdisk.img /ramdisk
truncate
Polecenie tworzy pusty plik o danej wielkości tak, że jest inicjowane (tj zużywa pamięci) na żądanie.
Aby zwolnić dysk RAM, zamontuj go i usuń obraz dysku:
umount /ramdisk
rm /ramdisk-storage/ramdisk.img
Porównanie z tmpfs
iramfs
Chociaż tmpfs
i ramfs
są bardziej wydajne niż korzystanie z urządzenia blokowego, poniżej przedstawiono niektóre ich wady.
tmpfs
może zamienić na dysk. Jest to bardziej wydajne, ale może się zdarzyć, że potrzebujesz czystego dysku RAM:
- Pliki, z którymi pracujesz, są wrażliwe (np. Pliki z zaszyfrowanej partycji).
- Robisz testy wydajności i nie chcesz, aby dysk I / O był czynnikiem (czasy zapisu SSD mogą się bardzo różnić).
- Rozpakowujesz duży plik i nie chcesz zużywać dysku SSD.
ramfs
jest łatwy w konfiguracji, zwalnia miejsce po usunięciu plików i bardziej efektywnie wykorzystuje pamięć RAM (system nie buforuje plików, ponieważ wie, że są one w pamięci RAM). Ale ma swoje wady i niespodzianki:
df
Narzędzie nie zgłasza wykorzystanie miejsca:
root@cello-linux:~# df -h /ramdisk
Filesystem Size Used Avail Use% Mounted on
ramfs 0 0 0 - /ramdisk
Nie ma parametru limitu rozmiaru. Jeśli włożysz zbyt dużo w ramdysk, system się zawiesi.
Pliki rzadkie mogą stać się rzadkie, gdy najmniej się tego spodziewasz. Dziś rano skopiowałem obraz maszyny wirtualnej (150G, ale 49G używany na dysku) na ramfs
(mam 128G pamięci RAM). To się udało. Ale kiedy kopiowane zramfs
do miejsca przeznaczenia, mój system stał się odpowiadać. cp
Narzędzie widocznie wypełnione otwory na odczyt , ale nie przy zapisie.
Zarówno tmpfs
i ramfs
mogą zachowywać się inaczej niż w prawdziwym ext4
systemie. Utworzenie urządzenia blokowego w pamięci RAM i zainicjowanie go za pomocą ext4
pozwala tego uniknąć.
Bardziej szczegółowe porównanie: https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
mount -o size=16G -t tmpfs none /mnt/tmpfs