Poza tym tmpfsi ramfs, innym rozwiązaniem jest /dev/ram0urzą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 ext4system 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_nrparametr określa liczbę dysków RAM do utworzenia (domyślnie tworzy 16, tzn. /dev/ram0Poprzez /dev/ram15). rd_sizeParametrem jest rozmiar w kilobajtach . $(( ... ))Składnia pozwala zrobić arytmetyczne w powłoce.
Aby zwolnić dysk RAM, odmontuj go i usuń brdmoduł 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
truncatePolecenie 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 tmpfsiramfs
Chociaż tmpfsi ramfssą bardziej wydajne niż korzystanie z urządzenia blokowego, poniżej przedstawiono niektóre ich wady.
tmpfsmoż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.
ramfsjest ł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:
dfNarzę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ć. cpNarzędzie widocznie wypełnione otwory na odczyt , ale nie przy zapisie.
Zarówno tmpfsi ramfsmogą zachowywać się inaczej niż w prawdziwym ext4systemie. Utworzenie urządzenia blokowego w pamięci RAM i zainicjowanie go za pomocą ext4pozwala 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