O uso de Wacky para Raid, /dev/ram, e ramfs
ArticleCategory:
Kernel Corner
AuthorImage:
TranslationInfo:[Author and translation history]
original in en Mark
Nielsen
en to pt Bruno Sousa
AboutTheAuthor:
O Mark trabalha como um consultor independente doando o seu tempo a
causas como GNUJobs.com, escrevendo artigos, escrevendo software livre e
trabalhando como voluntário em eastmont.net.
Abstract:
O RamFs é um sistema de ficheiro com alguns aspectos interessantes.
É uma coisa nova no Kernel 2.4.
ArticleIllustration:[This is the title picture for your
article]
ArticleBody:
Introdução ao RamDisk
Por Favor, veja o meu artigo original acerca do velha ramdisk. Está
localizado aqui: Linuxfocus: November1999/article124.html
Não entrarei em detalhes acerca do velho estilo do ramdisk neste
artigo.
O que é o RamDisk? A RamDisk é uma porção de memória que pode alocar
para usar como uma partição. Ou, por outras palavras, pode tirar um pouco
da sua memória e pretender que é um disco rígido que pode formatar, montar,
guardar ficheiros, etc.
Existem dois tipos de ramdisk que falaremos acerca de. O primeiro é
o ramdisk que pode formatar e montar. O segundo é um ramdisk que não pode
formatar, mas tem algumas especificações simpáticas. Eis aqui um detalhe:
A velha abordagem de /dev/ram1:
- MAU: O tamanho do ramdisk é fixo ao arrancar com o computador.
- BOM: Pode formatar a ramdisk do modo que desejar.
- MAU: Uma vez formatado (Não acredito que o tenha de montar),
consome uma porção de memória e não estou certo como a pode reaver.
- BOM: Pode ter mais do que ramdisk ao mesmo tempo.
O Novo ramdisk "ramfs":
- MAU: Não consegui formatar de outro modo que não o predefinido.
Está na camada VFS, ou que isto quer dizer.
- BOM: Pode ter mais do que um.
- BOM: Pode alterar o seu tamanho máximo na linha de comandos.
- MUITO BOM: Só utiliza a memória que necessita. Por outras
palavras pode ter alocados 64 megas de ram, mas se só tem ficheiros de 2k
nela, só usará 2k de memória. Mal um ficheiro seja apagado fica logo com
mais memória para o seu computador.
- MAU: Não é bem por culpa sua. Não caia no erro de preenchar
dois ramdisks ramfs senão esgotará toda a sua memória. Mais acerca
disto.
Como usar o RamDisk do velho modo
Por favor leia o artigo: Como usar a Ramdisk para Linux.
Para usar as ramdisks para os kernels 2.0 e 2.2, digite os seguintes
comandos:
mkfs -t ext2 /dev/ram1
mkdir -p /RAM1
mount /dev/ram1 /RAM1
como root, e está feito. Em muitos sistemas o tamanho está limitado
para 4 megs. Mas isto pode ser alterado na altura de arranque ou se
recompilar o Kernel, mas leia o meu artigo para tal. Pode adicionar ainda
mais como isto,
mkfs -t ext2 /dev/ram2
mkdir -p /RAM2
mount /dev/ram2 /RAM2
Como usar o RamDisk com o ramfs para o kernel 2.4
Primeiro de tudo, Eu assumo que possui o Kernel 2.4 com o ramfs
compilado nele. A maioria das distribuições que usam o novo kernel 2.4
devem ter o ramfs compilado nelas. Eu utilizei o RedHat 7.1 para este
artigo.
Muito simples. Crie um directório e monte nele o ramfs.
mkdir -p /RAM1
mount -t ramfs none /RAM1
Se pretende um segundo, muito simples. Crie o directório e monte nele o
ramfs.
mkdir -p /RAM2
mount -t ramfs none /RAM2
Alterando o tamanho dos ramdisks e outras opções.
Aqui está um exemplo em como fazer um ramdisk de 10 meg.
mkdir -p /RAM1
mount -t ramfs none /RAM1 -o maxsize=10000
Tirado directamente de
http://www.linuxhq.com/kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
+ ramfs - Um sistema de ficheiro que permite um ajuste automático da
+memória
+
+
+ Ramfs é um sistema de ficheiros que conserva todos os ficheiros na RAM.
+ Permite acessos de leitura-escrita. Em contraste ao discos RAM, que
+ alocam uma quantidade fixa de RAM, ramfs adapta-se ao seu conteúdo.
+
+ Pode montar o ramfs com:
+ mount -t ramfs none /mnt/wherever
+
+ Depois é só criar e usar os ficheiros. Quando o sistema de ficheiros é
+ desmontado, todo o seu conteúdo é perdido.
+
+ NOTE! Este sistema de ficheiros é provavelmente muito útil não como um
+ sistema de ficheiros real mas como um exemplo do funcionamento dos
+ sistemas de ficheiro virtuais pode ser escrito.
+
+Limites de Recursos:
+
+ Por defeito um ramfs será limitado para usar metade da memória (física)
+ para armazenar o conteúdo de ficheiros, e mais um bit para os metadados
+ incluídos. A utilização dos limites dos recursos do ramfs podem ser
+ controlados com as seguintes opções de montagem:
+
+ maxsize=NNN
+ Define o máximo de memória utilizada pelo sistema de
+ ficheiros para NNN kilobytes. Este será arredondado por defeito para um
+ múltiplo do tamanho de página. Por defeito é metade da memória física. NB.
+ ao contrário de outros limites, definindo-o para zero não limita nada, mas
+ limitará o limite actual do sistema de ficheiros de dados para zero
+ páginas. Pode haver uso disto numa situação perversa.
+
+ maxfilesize=NNN
+ Define o tamanho máximo de um simples ficheiro num sistema
+ de ficheiros para NNN kilobytes. Será arredondado para um múltiplo do
+ tamanho da página. Se NNN=0 não existe limite. Por defeito não existe
+ limite.
+
+ maxdentries=NNN
+ Define o número máximo de entradas (ligações físicas) de
+ directórios no sistema de ficheiros para NNN. Se NNN=0 então não existe
+ limite. Por defeito está definido para maxsize/4.
+
+ maxinodes=NNN
+ Define o número máximo de inodes (ficheiros distintos) no
+ sistema de ficheiros para NNN. Se NNN=0 não existe limite. Por defeito não
+ há limite (mas nunca pode haver mais inodes que dentries).
Correndo Serviços no Ramdisk
Tive uma ideia. Escute-me com atenção. Não seria bom se pudesse correr
os seus serviços (como um servidor web, um servidor de base de dados, ou um
servidor DNS) na ramdisk? Normalmente, um servidor web padrão não tem
ficheiros muito grandes incorporados. Normalmente, um servidor DNS não tem
muitos ficheiros nele. Pode até pôr um servidor de base de dados na
memória, só precisa de armazenar a informação temporária.
A Ram está mais barata estes dias. Eu comprei recentemente 128 megas
por $120 e imagino que o preço vai continuar a descer. Para 128 megas, eu
posso facilmente carregar os meus servidores neles. Se o meu servidor web
não tem ficheiros grandes, eu posso configurar o http.conf para procurar
noutro directório que não o ramdisk. O servidor de DNS é muito pequeno. O
meu maior servidor de base de dados tem só 28 megas. Considerando o facto
de você conseguir 1 giga de memória de computador estes dias muito barato,
eu penso que seria extraordinário correr tudo que tenho na ram. O único
truque com o servidor de base de dados è que deve guardar todas as
modificações para um servidor de base de dados à parte antes de escrever
para o servidor na ram. Isto é lento, mas considerando que a maior parte do
tempo é passado a ler e não a escrever, devia melhorar a performance.
Talvez se conseguíssemos fazer mirror de um ramdisk para um disco rígido.
Eu já expliquei isto num meu outro artigo, por favor leia-o aqui:
http://www.gnujobs.com/mark/articles/Ramdisk.html#Example.
Substitua somente estes comandos
### Make the ramdisk partitions
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2
### Mount the ramdisks to their appropriate places
mount /dev/ram0 /home/httpd/cgi-bin
mount /dev/ram1 /home/httpd/icons
mount /dev/ram2 /home/httpd/html
por estes comandos (aumente o número se os 10 megas não são
suficientes):
mount -t ramfs none /home/httpd/cgi-bin -o maxsize=10000
mount -t ramfs none /home/httpd/icons -o maxsize=10000
mount -t ramfs none /home/httpd/html -o maxsize=10000
O Ramdisk e o Raid
Porquê combinar uma partição do disco rígido e um ramdisk numa partição
raid? Não sei. Mas talvez haja um uso ao longo da sua continuação. Sistemas
operativos inteligentes não evitam algo só por não ter benefício imediato.
Isto é porque muitos sistemas operativos comerciais estão a tornar-se
impopulares e porque o software livre está a substituir aplicações escritas
por idiotas interessados no dinheiro e não na tecnologia.
Existem três problemas ao combinar um ramdisk com uma partição do
disco rígido.
- Não sei como fazê-lo com a ramfs, mas posso fazê-lo com o
/dev/ram. Talvez se conseguisse formatar uma partição do disco rígido com o
sistema de ficheiros que o ramfs utiliza, conseguia fazê-lo. Não tenho
ideia o que é o VFS e, provavelmente estudá-lo-ei mais tarde.
- Se o raid está em mirror paralelo, então a velocidade extra da
memória não ajudará. Não sei se é possível fazer um raid em mirror para ser
só de leitura a partir do ramdisk, em cada caso, se for possível, haverá
benefícios.
- Após o reboot, tem de reconstruir o ramdisk.
No sentido de configurar o raid eu configurei o meu /etc/raidtab como
este.
raiddev /dev/md3
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
chunk-size 4
persistent-superblock 1
device /dev/hdb6
raid-disk 1
device /dev/ram3
raid-disk 0
E depois executei,
mkraid /dev/md3
mkfs -t ext2 /dev/md3
mkdir -p /RAID1
mount /dev/md3 /RAID1
Problema, até ao reboot, o ramdisk fica confuso. Então no reboot,
on reboot,
raidstart /dev/md3
raidhotadd /dev/md3 /dev/ram3
mount /dev/md3 /RAID1
Agora lembre-se, se não configurou o seu velho ramdisk para ser maior
que 4 megas, é escusado que a partição do disco rígido seja superior a 4
megas.
Seria bom ter um raid em mirror com 3 partições. 1 sendo a ramdisk
e 2 sendo as partições do disco rígido e a ramdisk é só de leitura para os
ciclos de leitura. Não sei se é possível isolar uma das partições raid para
ser só de leitura, mas se conseguisse seira bom.
Comentários
Esta é, provavelmente, a secção mais importante deste artigo. Eu adoro
o Linux porque lhe permite atirar-se para os riscos. Não existe nada como a
dor porque lhe permite aprender.
- Por Defeito o Ramfs é metade da memória física (sem contar com o
espaço swap). Então se criar duas coisas destas e as preencher, o seu
computador ficará sem memória e bloqueará, como o meu fez. POR FAVOR
especifique a quantidade máxima de memória que o ramdisk deve ter, como
descrito em cima.
- Eu acredito que o ramfs é o seu próprio sistema de ficheiros e
não ext2, então se copiar ambos os sentidos com o rsync ou tar, não
espere que tenham o mesmo tamanho. De resto não deve notar grandes
diferenças, mas como não é ext2, as propriedades podem ser diferentes
nalguns níveis.
- Estive a ler a documentação para o ramfs no kernel e não parece
que o ramfs foi desenhado para uso geral, mas não vejo porquê. Trabalha do
modo que eu quero.
Eu ainda não terminei os ramdisks.
- Quero ver se consigo utilizar o ramfs e raid num disco rígido.
- Se o conseguir fazer, então que seja um raid só de leitura
isolado das outras partições.
-
Pôr um serviço como um servidor web, na ramdisk com raid. O Truque é
utilizar o raid, para o caso de ocorrer alguma alteração você não a perca.
É por isto que o raid é estupidamente importante para mim ---- Conseguirei
por serviços na ram SEGURAMENTE e adquirir toda a performance da velocidade
da memória sobre o disco rígido assumindo:
- Que consigo pôr o raid a ler somente da partição do ramdisk e
não de outra.
- Ler ficheiros a partir de um disco rígido são postos na
cache. E só se são retirados da cache é que notará uma diferença na
velocidade. Também o arranque inicial é mais rápido, a primeira vez que o
ficheiro é lido.
- Pode utilizar o servidor web construído nos novos kernels.
Devem rodar rápido também. Talvez combiná-lo com a ramdisk?
- Definindo o computador para arrancar a partir do cdrom, iniciar um
serviço e fazer download através da rede. Não é preciso disco rígido. Isto
era bom. Então opte ter um servidor web (ou algo do género) a correr num
computador sem disco rígido, somente com um cdrom e memória. Se aumentar a
memória do seu sistema para 1 giga, não vejo porque é que não corre todo o
seu sistema a partir do cdrom. Isto seria bom por razões de segurança.
Reinicie o computador, faça-o carregar as alterações de uma fonte segura,
então inicie os serviços e o seu computador está bom, "limpo" e livre de
piratas. O servidor web nunca deve guardar as alterações para o computador
local, mas guardar os logs e informação para um computador à parte, numa
ligação segura, ou numa rede interna. Eu fiz cdroms de arranque de network
com o ramdisk no passado. Seria simpático combinar o meu primeiro projecto
para alcançar isto.
Recursos
-
kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
- http://genericbooks.com/LDP/HOWTO/Software-RAID-HOWTO.html
- Optimizando a
velocidade de pequenas base de dados no Linux
- Como usar o ramdisk no
Linux
- Neste artigo as alterações ficaram disponíveis aqui:
http://www.gnujobs.com/Articles/21/Ramdisk2.html
Obrigado à Katja pela ajuda!
Copyright © 4/2001 Mark Nielsen
Versão do Artigo 1.3 : Data da última modificação Sat May 19
06:04:06 2001