Come creare un ramdisk Linux di dimensioni fisse che non si scambia mai su disco?


9

Voglio creare un ramdisk Linux di dimensioni fisse che non scambia mai su disco. Nota che la mia domanda non è "perché" voglio farlo (diciamo, ad esempio, che è per uno scopo educativo o per la ricerca): la domanda è come farlo.

A quanto ho capito ramfs, le dimensioni non possono essere limitate, quindi non soddisfa il mio requisito di avere un ramdisk di dimensioni fisse.

Sembra anche che tmpfs possa essere scambiato su disco. Quindi non soddisfa il mio requisito di non scambiare mai su disco.

Come si può creare un ramdisk Linux di dimensioni fisse che non si scambia mai su disco?

È possibile, ad esempio, creare tmpfsall'interno di una ramfs(una soluzione del genere corrisponderebbe a entrambe le mie esigenze) e, se sì, come?

Notare che le prestazioni non sono un problema e che il ramdisk si riempie e innesca errori "disco pieno" non è un problema.


Immagino che questa sia la tua preoccupazione cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem
Kiwy,

possibile duplicato di Creazione di un disco ram su Linux
Kiwy,

Per usare un vero ramdisk (e non tmpfs o ramfs), avrai bisogno del supporto integrato nel tuo kernel, che alcuni kernel di distro potrebbero non fare più - oppure è un modulo. Verifica se sono presenti ramdispositivi dev. Altrimenti, prova modprobe rd.
Riccioli d'oro,

1
Non penso che questa domanda sia duplicata poiché nessuna delle risposte affronta la limitazione delle dimensioni e lo scambio.
Marco

3
Quando le persone ti chiedono perché vuoi fare qualcosa, è perché quello che stai chiedendo sembra un po '(o molto) folle per loro. "Hmmm, sta chiedendo un modo davvero contorto per realizzare X, conosce il comando do-X?". A volte è anche perché ci sono diversi modi e quello giusto dipende dal motivo per cui lo stai facendo. Ad esempio, se chiedi come eliminare un mucchio di file, il modo per farlo dipende dal perché — rm è ottimo se devi liberare spazio su disco, ma non tanto se devi svuotare un disco per lo smaltimento. Quindi, in sintesi, vado avanti e chiedo ... perché?
derobert,

Risposte:


5

Questo è solo un pensiero e ha più di un aspetto negativo, ma potrebbe essere comunque abbastanza utilizzabile.

Che ne dici di creare un file immagine e un filesystem al suo interno sopra ramfs, quindi montare l'immagine come dispositivo loop? In questo modo potresti limitare la dimensione del ramdisk semplicemente limitando la dimensione del file immagine. Per esempio:

$ mkdir -p /ram/{ram,loop}
$ mount -t ramfs none /ram/ram
$ dd if=/dev/zero of=/ram/ram/image bs=2M count=1
1+0 records in
1+0 records out
2097152 bytes (2.1 MB) copied, 0.00372456 s, 563 MB/s
$ mke2fs /ram/ram/image
mke2fs 1.42 (29-Nov-2011)
/ram/ram/image is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
256 inodes, 2048 blocks
102 blocks (4.98%) reserved for the super user
First data block=1
Maximum filesystem blocks=2097152
1 block group
8192 blocks per group, 8192 fragments per group
256 inodes per group

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done
$ mount -o loop /ram/ram/image /ram/loop
$ dd if=/dev/zero of=/ram/loop/test bs=1M count=5
dd: writing `/ram/loop/test': No space left on device
2+0 records in
1+0 records out
2027520 bytes (2.0 MB) copied, 0.00853692 s, 238 MB/s
$ ls -l /ram/loop
total 2001
drwx------ 2 root root   12288 Jan 27 17:12 lost+found
-rw-r--r-- 1 root root 2027520 Jan 27 17:13 test

Nell'esempio (un po 'troppo lungo) sopra, il file di immagine viene creato per essere di 2 megabyte e quando si tenta di scrivere più di 2 megabyte su di esso, la scrittura fallisce semplicemente perché il filesystem è pieno.

Un ovvio ridimensionamento di tutto ciò è ovviamente la maggiore complessità aggiunta, ma almeno per scopi accademici dovrebbe essere sufficiente.


Il file montato in loopback è soggetto a scambio ...
vonbrand


-1

Non può essere fatto. Tutta la RAM è soggetta al paging sia dal design dell'hardware della CPU sia dal design del microkernel Linux. Non ci sono motivi legittimi per trattare diversamente la memoria. TUTTI gli algoritmi software POSSONO essere adattati per utilizzare lo schema di memorizzazione nella cache dei file e la memoria paginata. Il virtuale è SEMPRE migliore e più efficiente.

I dischi RAM di dimensioni limitate vanno contro i principi di base del mondo virtuale. È necessario supporre che vengano inviate solo richieste di file utili al file system host e che tutte queste richieste abbiano pari importanza e priorità nel mondo virtuale (l'unico modello che conta).

È stato matematicamente dimostrato che anche i processi in tempo reale si adattano a questa regola. Se hai un problema di velocità, NON PUOI MAI risolverlo usando la RAM come memoria == l'intero sistema host deve funzionare più velocemente dalla CPU al bus I / O al dispositivo di archiviazione permanente. Tutti i problemi di elaborazione degenerata, tranne quelli artificiali, hanno sufficienti rami e requisiti di I / O dei file che l'aumento della velocità media della cache RAM è il massimo che puoi fare.


Non può essere fatto. Tutta la RAM è soggetta al paging sia dal design dell'hardware della CPU sia dal design del microkernel Linux. Wrong : " mlock(), mlock2()e mlockall()bloccare parte o tutto lo spazio degli indirizzi virtuali del processo di chiamata nella RAM, impedendo che la memoria venga paginata nell'area di scambio."
Andrew Henle,
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.