Como posso alterar a quantidade e o tamanho dos ramdisks do Linux (/ dev / ram0 - / dev / ram15)?

27

Usando o Linux, quando eu inicializo eu tenho 16 ramdisks automaticamente, no entanto, eu gostaria de criar um ramdisk realmente grande para testar algum software.

Descobri que posso ajustar o tamanho dos discos já existentes no sistema com o parâmetro de inicialização do kernel ramdisk_size , no entanto, isso faz com que todos os 16 ramdisks (/ dev / ram0 - / dev / ram15) tenham o tamanho especificado. Então, se eu quiser criar um disco RAM de 1 GB, precisaria de 16 GB de memória.

Basicamente, eu quero criar um ramdisk de 10 GB que seria / dev / ram0. Como eu faria isso? Eu suponho que há um parâmetro de inicialização do kernel, mas eu simplesmente não o encontrei.

    
por Kevin S. 09.03.2011 / 00:44

7 respostas

18

Tempo de compilação do kernel

Existem duas opções de configuração do kernel que você pode definir no seu arquivo .config :

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Isso configurou meu kernel para criar um ramdisk com 10G no momento da inicialização.

Notas:

  • CONFIG_BLK_DEV_RAM_SIZE está em KB.
  • Não especifique mais memória do que você tem RAM no seu computador.
  • Em menuconfig , veja em Drivers de dispositivos - > Dispositivos de bloco.

Tempo de inicialização

Você pode especificar o tamanho dos discos de RAM que você cria através do parâmetro de inicialização do kernel ramdisk_size . Por exemplo:

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

Agora posso inicializar minha máquina e criar um sistema de arquivos, montá-lo e usá-lo exatamente como um dispositivo de bloco.

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

Fontes:

  1. link [morto]
  2. link
por 10.03.2011 / 23:27
16

Você deve usar tmpfs para isso.

mount -t tmpfs -o size=10g none /mnt/point
    
por 09.03.2011 / 00:48
7

Para criar um disco de RAM grande após a inicialização sem mexer nos parâmetros do kernel. Use tmpfs, crie um arquivo, monte-o por meio de loop e monte-o por meio de um sistema de arquivos:

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/

Provavelmente um pouco de penalidade de desempenho passando por várias camadas diferentes ... mas pelo menos funciona.

    
por 23.05.2013 / 16:57
6

Outra opção é usar os dispositivos de loop (em oposição ao recurso loobpack do mount, conforme mencionado anteriormente):

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

Agora o / dev / loop é um dispositivo de bloqueio legítimo no qual seu aplicativo atuaria como um dispositivo físico ou um ramdisk, exceto pelo fato de ser um arquivo com backup. Você pode montar em algum lugar ou fazer com que o aplicativo atue no nó do dispositivo, o que implementa os ioctls de bloco padrão. Salva a memória RAM do seu sistema e é útil mantê-la para testes, etc.

(Você pode até fdisk myfs.img, criar partições nele e usar --offset e --sizelimit com losetup para apontar cada / dev / loopX para partições específicas na imagem, então loop0, loop1 se torna exatamente como sdc1, sdc2, etc)

    
por 31.10.2012 / 13:15
3

Você poderia usar um arquivo de loop. Basta criar um arquivo de loop do tamanho desejado (se desejar colocá-lo em um ramdisk tmpfs, tudo bem) e, em seguida, formatar o arquivo de loop e montá-lo.

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

O objeto de uma ramdrive é a velocidade. Tmpfs não é uma unidade. Dispositivos de loop não são unidades, mas você pode colocar uma imagem de unidade em um dispositivo de loop. Discos Ram "são" unidades e unidades muito rápidas. Tente executar:

hdparm -t /dev/sda 

e depois:

hdparm -t /dev/ram0

Você verá o que quero dizer! Mas hdparm às vezes destrói a unidade de memória RAM. Então, você tem que fazer isso de novo.

Às vezes, não há dispositivos / dev / ram. Para fazer um:

mknod -m 0777 /dev/ram0 b 1 0 

mas não terá tamanho. Para dar tamanho:

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

e ele irá parar quando a unidade estiver cheia. O tamanho máximo é determinado pela configuração do kernel parm: CONFIG_BLK_DEV_RAM_SIZE .

Em seguida, apenas formate-o, por exemplo

mke2fs /dev/ram0

E monte:

mount /dev/ram0 /mnt/ramdrive

Um dos meus favoritos é o código de depuração armazenado em um ramdrive. As compilações são pelo menos 10x velocidade de código armazenado em um disco rígido. As tabelas de banco de dados armazenadas no ramdrive também voam, mas você deve ter um script que grave periodicamente no disco rígido. A maioria dos administradores não tem coragem de colocar dados em discos RAM. E algumas tabelas são muito grandes.

    
por 03.11.2014 / 10:25
1

No farol 64 (puupy linux baseado em slackware) eu fiz isso;

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á você tem um ramdisk montado como um diretório /mnt/dvd , onde você pode copiar e colar, fazer tudo como faria em um diretório hd, exceto em ram. lembre-se de salvar seus arquivos em hd antes de desligar.

    
por 19.06.2013 / 11:21

Tags