
Usando o Linux, quando inicializo, tenho automaticamente 16 ramdisks de 16 MB; no entanto, gostaria de criar um ramdisk realmente grande para testar algum software.
Descobri que posso ajustar o tamanho dos ramdisks 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. Portanto, se eu quiser criar um disco RAM de 1 GB, precisarei de 16 GB de memória.
Basicamente, quero criar um disco RAM de 10 GB que seria/dev/ram0. Como eu faria isso? Presumo que exista um parâmetro de inicialização do kernel, mas simplesmente não o encontrei.
Responder1
Tempo de compilação do kernel
Existem duas opções de configuração do kernel que você pode definir em seu .config
arquivo:
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760
Isso configurou meu kernel para criar um disco RAM de 10G no momento da inicialização.
Notas:
CONFIG_BLK_DEV_RAM_SIZE
está em KB.- Não especifique mais memória do que a RAM realmente disponível em seu computador.
- Procure
menuconfig
em Drivers de dispositivos-> Bloquear dispositivos.
Tempo de inicialização
Você pode especificar o tamanho dos discos RAM criados por meio 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 nela, montá-la e usá-la exatamente como um dispositivo de bloco.
# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk
Fontes:
Responder2
Você deveria usartmpfspor isso.
mount -t tmpfs -o size=10g none /mnt/point
Responder3
Para criar um disco RAM grande após a inicialização sem mexer nos parâmetros do kernel. Use tmpfs, crie um arquivo, monte-o via loop e monte-o através 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 há uma pequena penalidade no desempenho ao passar por várias camadas diferentes... mas pelo menos funciona.
Responder4
O objetivo de um ramdrive é a velocidade. Tmpfs não é uma unidade. Os dispositivos de loop não são unidades, mas você pode colocar uma imagem de unidade em um dispositivo de loop. Os discos Ram "são" unidades e unidades muito rápidas. Tente executar:
hdparm -t /dev/sda
e então:
hdparm -t /dev/ram0
Você verá o que quero dizer! Mas o hdparm às vezes destrói a unidade 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á nenhum tamanho. Para dar tamanho:
dd if=/dev/zero of=/dev/ram0
e irá parar quando a unidade estiver cheia. O tamanho máximo é determinado pelo parâmetro de configuração do kernel: CONFIG_BLK_DEV_RAM_SIZE
.
Depois é só formatar, ou seja
mke2fs /dev/ram0
E monte-o:
mount /dev/ram0 /mnt/ramdrive
Um dos meus favoritos é a depuração de código armazenado em um ramdrive. As compilações têm pelo menos 10x a velocidade do 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 no disco rígido periodicamente. A maioria dos administradores não tem coragem de colocar dados em discos RAM. E algumas mesas são muito grandes.