Jak mogę zmienić ilość i rozmiar ramdysków Linuksa (/ dev / ram0 - / dev / ram15)?

27

Używając Linuksa, kiedy uruchamiam, automatycznie mam 16 ramdysków 16 MB, jednak chciałbym utworzyć jeden naprawdę duży ramdysk do testowania oprogramowania.

Odkryłem, że mogę dostosować rozmiar ramdysków już w systemie za pomocą parametru rozruchowego jądra, ramdisk_sizejednak powoduje to, że wszystkie 16 ramdysków (/ dev / ram0 - / dev / ram15) ma określony rozmiar. Więc jeśli chcę utworzyć ramdysk o pojemności 1 GB, potrzebowałbym 16 GB pamięci.

Zasadniczo chcę utworzyć ramdysk o pojemności 10 GB, który byłby / dev / ram0. Jak miałbym to zrobić? Zakładam, że istnieje parametr rozruchowy jądra, ale po prostu go nie znalazłem.

Kevin S.
źródło

Odpowiedzi:

18

Czas kompilacji jądra

W .configpliku można ustawić dwie opcje konfiguracji jądra :

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

To skonfigurowało moje jądro do utworzenia jednego ramdysku, który ma 10G podczas uruchamiania.

Uwagi:

  • CONFIG_BLK_DEV_RAM_SIZE jest w KB.
  • Nie określaj więcej pamięci, niż faktycznie masz RAM w komputerze.
  • W menuconfigwyglądzie z urządzeniami Drivers-> Urządzenia bloku.

Czas uruchamiania

Możesz określić rozmiar dysków RAM, które tworzysz za pomocą parametru rozruchowego jądra ramdisk_size. Na przykład:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

Teraz mogę uruchomić komputer i utworzyć na nim system plików, zamontować go i używać dokładnie tak, jak z urządzenia blokowego.

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

Źródła:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [martwy]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt
Kevin S.
źródło
16

Zamiast tego powinieneś użyć tmpfs .

mount -t tmpfs -o size=10g none /mnt/point
Ignacio Vazquez-Abrams
źródło
Czy mogę utworzyć system plików na tmpfs? Potrzebuję urządzenia blokowego, które znajduje się w pamięci, na której mogę utworzyć system plików. Czy mogę to zrobić na tmpfs?
Kevin S.
tmpfs to system plików. Tak się składa, że ​​rezyduje w pamięci.
Ignacio Vazquez-Abrams,
3
Doceniam odpowiedź i zwykle tmpfs załatwi sprawę, ale muszę utworzyć system plików xfs w części pamięci, do której piszę.
Kevin S.,
Problem z tmpfs polega na tym, że jest on wspierany przez swap. Jeśli zaczniesz używać swap, tracisz korzyści z bycia w czystej pamięci RAM. Ponadto niektóre osoby wolą mieć obszar, który nie jest zabezpieczony dla aplikacji kryptograficznych.
drudru
Powiązane odpowiedzi i szczegóły znajdują się tutaj: unix.stackexchange.com/questions/66329/…
jocull
7

Aby zrobić duży dysk RAM po rozruchu bez bałagania się parametrami jądra. Użyj tmpfs, utwórz plik, zamontuj go za pomocą pętli i zamontuj za pomocą systemu plików:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

Prawdopodobnie trochę obniżenia wydajności przez wiele różnych warstw ... ale przynajmniej działa.

użytkownik39725
źródło
6

Inną opcją jest użycie urządzeń pętli (w przeciwieństwie do funkcji loobpack montowania, jak wspomniano wcześniej):

dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0

Teraz / dev / loop jest legalnym urządzeniem blokowym, na którym Twoja aplikacja działałaby jak fizyczne urządzenie lub ramdysk, tyle że ma kopię zapasową pliku. Możesz gdzieś zamontować lub aplikacja działa na węźle urządzenia, który implementuje standardowe blokowe elementy ioctls. Zapisuje pamięć RAM systemu i jest przydatna do przechowywania przypadków testowych itp.

(Możesz nawet fdisk myfs.img, utworzyć na nim partycje i użyć --offset i --sizelimit z losetup, aby skierować każdą / dev / loopX do określonych partycji w obrazie, więc loop0, loop1 stają się jak sdc1, sdc2 itp. )

David Mirabito
źródło
+1, ponieważ nie wymaga to ponownej kompilacji jądra
m-ric
3

Zamiast tego możesz użyć pliku pętli. Wystarczy utworzyć plik pętli o żądanym rozmiarze (jeśli chcesz umieścić go w ramdysku tmpfs, dobrze), a następnie sformatuj plik pętli i zamontuj go.

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint
KFro
źródło
Próbowałem tego, zanim opublikowałem swoje pytanie. To świetne rozwiązanie, ale testowane przeze mnie oprogramowanie działa inaczej, gdy zajmuje się plikiem, a nie urządzeniem blokowym, dlatego szukałem opcji ramdysku. Dzięki.
Kevin S.
2
Urządzenia sprzężenia zwrotnego są urządzeniami blokowymi, więc nie jestem pewien, jak to możliwe?
pjc50,
2

Przedmiotem napędu ramdrive jest prędkość. Tmpfs nie jest dyskiem. Urządzenia pętli nie są dyskami, ale można umieścić obraz dysku na urządzeniu pętli. Dyski RAM „są” dyskami i bardzo szybkimi dyskami. Spróbuj uruchomić:

hdparm -t /dev/sda 

i wtedy:

hdparm -t /dev/ram0

Zobaczysz, co mam na myśli! Ale hdparm czasami niszczy napęd pamięci RAM. Musisz to zrobić jeszcze raz.

Czasami nie ma urządzeń / dev / ram. Aby zrobić:

mknod -m 0777 /dev/ram0 b 1 0 

ale nie będzie miał żadnego rozmiaru. Aby nadać temu rozmiar:

dd if=/dev/zero of=/dev/ram0

i zatrzyma się, gdy dysk będzie pełny. Wielkość maksymalna jest określana przez jądro config parmezanem: CONFIG_BLK_DEV_RAM_SIZE.

Następnie po prostu sformatuj, tj

mke2fs /dev/ram0

I zamontuj to:

mount /dev/ram0 /mnt/ramdrive

Moim ulubionym jest debugowanie kodu przechowywanego na dysku RAM. Kompilacje mają co najmniej 10-krotną prędkość kodu przechowywaną na dysku twardym. Tabele bazy danych przechowywane na ramdrive również latają, ale musisz mieć skrypt, który okresowo zapisuje na dysku twardym. Większość administratorów nie ma odwagi umieszczać danych na dyskach RAM. A niektóre tabele są za duże.

Miecz Miecza
źródło
1

Na Lighthouse 64 (puupy Linux oparty na Slackware) zrobiłem to;

mke2fs /dev/ram1 4096000 # nearly 4G ramdisk, choose the size of ramdisk less than actual ram!
mount /dev/ram1 /mnt/dvd # dvd on my laptop is unused choose your device from /mnt/

Tam masz ramdysk zamontowany jako katalog, w /mnt/dvdktórym możesz skopiować wklej zapisz, rób wszystko tak, jak w katalogu hd oprócz ram. pamiętaj, aby zapisać pliki w HD przed zamknięciem.

Marcos
źródło