Como criar um ramdisk Linux de tamanho fixo que nunca é trocado para o disco?


9

Quero criar um ramdisk Linux de tamanho fixo que nunca troque para o disco. Note que minha pergunta não é "por que" eu quero fazer isso (digamos, por exemplo, que seja para fins educativos ou de pesquisa): a questão é como fazê-lo.

Pelo que entendi ramfs, o tamanho não pode ser limitado, por isso não se enquadra no meu requisito de ter um ramdisk de tamanho fixo.

Parece também que tmpfs pode ser trocado para o disco. Portanto, ele não se encaixa no meu requisito de nunca trocar para o disco.

Como você pode criar um ramdisk Linux de tamanho fixo que nunca é trocado para o disco?

É possível, por exemplo, criar tmpfsdentro de uma ramfs(essa solução atenderia aos meus requisitos) e, em caso afirmativo, como?

Observe que o desempenho não é um problema e o ramdisk fica cheio e desencadeia erros de "disco cheio" também não é um problema.


Eu acho que esta resposta a sua preocupação cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem
kiwy


Para usar um ramdisk real (e não tmpfs ou ramfs), você precisará de suporte embutido no seu kernel, que alguns kernels de distribuição podem não fazer mais - ou então é um módulo. Veja se você possui algum ramdispositivo dev. Caso contrário, tente modprobe rd.
27914

1
Não acho que essa pergunta seja uma duplicata, pois nenhuma das respostas aborda a restrição de tamanho e a troca.
Marco

3
Quando as pessoas perguntam por que você quer fazer alguma coisa, é porque o que você está perguntando soa um pouco (ou muito) louco para elas. "Hmmm, ele está pedindo uma maneira realmente complicada de realizar o X, ele sabe sobre o comando do-X?". Às vezes, é também porque existem várias maneiras, e a correta depende de por que você está fazendo isso. Por exemplo, se você perguntar como excluir um monte de arquivos, a maneira de fazer isso depende do porquê - rm é ótimo se você precisar liberar espaço em disco, mas não tanto se precisar colocar um disco em branco para descarte. Então, em resumo, vou em frente e perguntar ... por quê?
derobert

Respostas:


5

Este é apenas um pensamento e tem mais de uma desvantagem, mas pode ser utilizável o suficiente de qualquer maneira.

Que tal criar um arquivo de imagem e um sistema de arquivos dentro dele, sobre ramfs, e montar a imagem como um dispositivo de loop? Dessa forma, você pode limitar o tamanho do ramdisk simplesmente limitando o tamanho do arquivo de imagem. Por exemplo:

$ 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

No exemplo (um pouco longo) acima, o arquivo de imagem é criado para ter 2 megabytes e, ao tentar gravar mais de 2 megabytes, a gravação simplesmente falha porque o sistema de arquivos está cheio.

Uma redução óbvia de tudo isso é, obviamente, que há muita complexidade adicional, mas pelo menos para fins acadêmicos, isso deve ser suficiente.


O loopback montados arquivo está sujeito a troca ...
vonbrand

1

O livro (datado!) "Linux Device Drivers" de Corbet, Rubini e Kroah-Hartman possui um exemplo de driver que apenas aloca uma área de memória fixa para brincar. Não é um sistema de arquivos, mas ...


-1

Não pode ser feito. Toda a RAM está sujeita a paginação pelo design de hardware da CPU e pelo microkernel do Linux. Não há motivos legítimos para tratar a memória de outra forma. TODOS os algoritmos de software PODEM ser adaptados para usar o esquema de cache de arquivos e a memória paginada. Virtual é SEMPRE melhor e mais eficiente.

Os discos de RAM de tamanho limitado são contrários aos princípios básicos do mundo virtual. Você deve assumir que apenas solicitações de arquivos úteis estão sendo feitas para o sistema de arquivos host e que todas essas solicitações têm igual importância e prioridade no mundo virtual (o único modelo que conta).

Foi comprovado matematicamente que mesmo processos em tempo real se encaixam nessa regra. Se você tiver um problema de velocidade, NUNCA PODE resolver usando RAM como armazenamento == todo o sistema host precisa operar mais rapidamente da CPU para o barramento de E / S e para o dispositivo de armazenamento permanente. Todos os problemas de computação degenerados, exceto artificiais, têm ramificações e requisitos de E / S de arquivo suficientes para que o aumento da velocidade média do cache da RAM seja o melhor que você pode fazer.


Não pode ser feito. Toda a RAM está sujeita a paginação pelo design de hardware da CPU e pelo microkernel do Linux. Errado : " e parte de bloqueio ou a totalidade do espaço de endereço virtual do processo de chamada para a RAM, impedindo que a memória de ser paginada para a área de swap." mlock()mlock2()mlockall()
Andrew Henle
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.