Come posso modificare la quantità e la dimensione dei ramdisk di Linux (/ dev / ram0 - / dev / ram15)?


27

Usando Linux, quando avvio ho automaticamente 16 ramdisk da 16 MB, tuttavia, vorrei creare un ramdisk davvero grande per testare alcuni software.

Ho scoperto che posso regolare la dimensione dei ramdisk già sul sistema con il parametro di avvio del kernel ramdisk_size, questo rende tutti i 16 ramdisk (/ dev / ram0 - / dev / ram15) la dimensione specificata. Quindi, se voglio creare un ramdisk da 1 GB, avrei bisogno di 16 GB di memoria.

Fondamentalmente, voglio creare un ramdisk da 10 GB che sarebbe / dev / ram0. Come potrei farlo? Presumo ci sia un parametro di avvio del kernel, ma non l'ho trovato.

Risposte:


18

Tempo di compilazione del kernel

Esistono due opzioni di configurazione del kernel che puoi impostare nel tuo .configfile:

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Questo ha configurato il mio kernel per creare un ramdisk che è 10G al momento dell'avvio.

Gli appunti:

  • CONFIG_BLK_DEV_RAM_SIZE è in KB.
  • Non specificare più memoria di quella che hai effettivamente RAM nel tuo computer.
  • In menuconfigsguardo sotto Drivers-> dispositivi a blocchi del dispositivo.

Tempo di avvio

È possibile specificare la dimensione dei dischi ram creati tramite il parametro di avvio del kernel ramdisk_size. Per esempio:

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

Ora posso avviare la mia macchina e creare un file system su di essa, montarlo e usarlo esattamente come un dispositivo a blocchi.

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

fonti:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [morto]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

16

Dovresti usare tmpfs per quello invece.

mount -t tmpfs -o size=10g none /mnt/point

Posso creare un filesystem su un tmpfs? Ho bisogno di un dispositivo a blocchi che risieda in memoria su cui posso creare un filesystem. Posso farlo su un tmpfs?
Kevin S.

tmpfs è un filesystem. Capita semplicemente di risiedere nella memoria.
Ignacio Vazquez-Abrams,

3
Apprezzo la risposta e normalmente un tmpfs farebbe il trucco, ma ho bisogno di creare un filesystem xfs sulla parte della memoria su cui sto scrivendo.
Kevin S.

Il problema con tmpfs è che è supportato da swap. Se inizi a utilizzare lo scambio, perdi i vantaggi di essere nella RAM pura. Inoltre, alcune persone preferiscono avere un'area non supportata da applicazioni crittografiche.
drudru,

Risposte e dettagli correlati sono qui: unix.stackexchange.com/questions/66329/…
jocull,

7

Per creare un disco ram di grandi dimensioni dopo l'avvio senza fare confusione con i parametri del kernel. Usa tmpfs, crea un file, montalo tramite loop e montalo tramite un filesystem:

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/

Probabilmente un po 'di penalità per le prestazioni che attraversano più livelli diversi ... ma almeno funziona.


6

Un'altra opzione è quella di utilizzare i dispositivi loop (al contrario della funzione loobpack di mount come precedentemente menzionato):

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

Ora / dev / loop è un dispositivo a blocchi legittimo su cui la tua app agirebbe come un dispositivo fisico o ramdisk, tranne per il fatto che è supportato da file. Puoi montare da qualche parte o far agire l'app sul nodo del dispositivo, che implementa lo ioctl a blocchi standard. Salva il tuo ram di sistema e utile da tenere in giro per i casi di test, ecc.

(Puoi anche fdisk myfs.img, creare partizioni su di esso e usare --offset e --sizelimit con losetup per puntare ogni / dev / loopX su partizioni specifiche nell'immagine, quindi loop0, loop1 diventano proprio come sdc1, sdc2, ecc. )


+1 poiché non è necessario ricompilare il kernel
m-ric,

3

È possibile invece utilizzare un file loop. Basta creare un file di loop della dimensione desiderata (se si desidera inserirlo in un ramdisk tmpfs, bene), quindi formattare il file di loop e montarlo.

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint

In realtà ho provato questo prima di pubblicare la mia domanda. È un'ottima soluzione, ma il software che sto testando agisce diversamente quando si tratta di un file e non di un dispositivo a blocchi, ecco perché stavo guardando l'opzione ramdisk. Grazie.
Kevin S.

2
I dispositivi di loopback sono dispositivi a blocchi, quindi non sono sicuro di come sia possibile?
pjc50,

2

L'oggetto di un ramdrive è la velocità. Tmpfs non è un'unità. I dispositivi loop non sono unità, ma è possibile inserire un'immagine dell'unità su un dispositivo loop. I dischi di ram "sono" unità e unità molto veloci. Prova a correre:

hdparm -t /dev/sda 

e poi:

hdparm -t /dev/ram0

Vedrai cosa intendo! Ma hdparm a volte distrugge la ram drive. Quindi, devi rifarlo.

A volte non ci sono dispositivi / dev / ram. Per crearne uno:

mknod -m 0777 /dev/ram0 b 1 0 

ma non avrà alcuna dimensione. Per dargli dimensioni:

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

e si fermerà quando l'unità è piena. La dimensione massima è determinata dalla configurazione del kernel parm: CONFIG_BLK_DEV_RAM_SIZE.

Quindi, basta formattarlo, cioè

mke2fs /dev/ram0

E montalo:

mount /dev/ram0 /mnt/ramdrive

Uno dei miei preferiti è il codice di debug memorizzato su un ramdrive. Le compilazioni sono almeno 10 volte la velocità del codice memorizzato su un disco rigido. Anche le tabelle del database memorizzate su ramdrive volano, ma è necessario disporre di uno script che scriva periodicamente sul disco rigido. La maggior parte degli amministratori non ha il coraggio di mettere i dati sui dischi ram. E alcuni tavoli sono troppo grandi.


1

Su Lighthouse 64 (puupy linux basato su slackware) l'ho fatto;

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/

Lì hai un ramdisk montato come directory in /mnt/dvdcui puoi copiare e salvare e fare tutto come faresti in una directory hd tranne in ram. ricordati di salvare i tuoi file su hd prima dell'arresto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.