Arquvo de ‘curiosidade’
-
swapfile
Para usuários GNU/Linux, é muito comum o termo swap, ou partição swap. Em poucas palavras, ele diz respeito à técnica de extender a memória física, que as vezes não é suficiente, para o disco rígido. No Linux, o subsistema de memória usa um mapeamento virtual da memória, que permite um programa da userspace gravar na memória sem se preocupar onde está fisicamente. Mas este já é assunto para outro post.
Como de costume, logo na instalação de uma distribuição já particionamos o disco de uma tal maneira que uma parte fica reservada para a área de troca, que é a tradução de swap. Alguns usam partições primárias para isto, outros lógicas… Alguns seguem uma regra que diz que “a capacidade do swap deve ser o dobro da memória física”… mas no final, isso fica mesmo é a critério do administrador do sistema.
O problema da partição é que complica no caso de precisar aumentar seu espaço. Para isto, poderia criar outra partição e ativá-la no sistema, mas seria necessário espaço em disco não particionado.
Uma solução rápida para isto seria criar um arquivo de swap, ou swapfile. Para criá-lo é quase igual à uma partição, já que para o Linux, os dispositivos de block são representados como arquivos e, cá entre nós, uma partição nada mais é que um conteiner grande de dados (um arquivão!). Na prática, sua criação ficaria assim:
Gerar um arquivo do tamanho de 512 * 100.000 bytes (100.000 blocos de 512 bytes) contendo apenas zeros:
dd if=/dev/zero of=/tmp/swapfile bs=512 count=100000
Definir o arquivo criado como swap:
mkswap /tmp/swapfile
Ativar o novo arquivo no pool de swap do sistema com prioridade 0 (zero):
swapon -p 0 /tmp/swapfile
Verificar o pool swap do sistema:
swapon -s
Desativar um dispositivo/arquivo swap do sistema:
swapoff /tmp/swapfile
Quanto à performance e aplicabilidade em ambiente de produção, prefiro não opinar, mas acredito ser uma alternativa mais rápida e simples para o aumento da área de troca, swap.
-
diff binário
Estava eu procurando por uma solução de patch binário para compor uma parte do meu sistema de backups. Pois bem, embora não seja o cerne de tudo, vou explicar meu cenário para que seja melhor entendido.
Eu estou trabalhando com máquinas virtuais com imagens de discos em volumes lógicos (LVM). Usando o recurso de snapshot do LVM, que é assunto para outro post, eu estava copiando inteiramente a imagem para um backup, através do comando dd. O problema é ter que fazer uma cópia full da imagem a cada backup. Minha máquina de teste tem 10GB, mas imagina um servidor em produção, que pode ter várias dezenas de GBs… Fica inviável o backup deste jeito. Assim começou a busca por uma solução de calcular a diferença entre os dois binários, imagem de produção e a backup, para assim gerar um patch com somente o necessário para transferir ao servidor de backup. Após, eu precisaria aplicar este patch e assim atualizar a iamgem.
Pesquisando no oráculo Google, encontrei este site. Lá pude baixar dois fontes, bsdiff e bspatch. Esses são versões ‘binárias’ do GNU diff e patch. Depois de baixar, compilei usando o Makefile do próprio pacote. Como ele foi feito para os *BSD, o formato do Makefile é um pouco diferente. Para compilar direitinho, crie um arquivo chamado Makefile.patch no mesmo diretório do fonte. Dentro dele, coloque o seguinte conteúdo:
--- Makefile 2010-06-28 14:52:42.351369894 -0300 +++ Makefile.gnu 2010-06-28 14:53:29.883369968 -0300 @@ -1,4 +1,5 @@ CFLAGS += -O3 -lbz2 +INSTALL ?= /bin/install PREFIX ?= /usr/local INSTALL_PROGRAM ?= ${INSTALL} -c -s -m 555 @@ -10,6 +11,6 @@ install: ${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin -.ifndef WITHOUT_MAN +ifndef WITHOUT_MAN ${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1 -.endif +endifSalve o arquivo e aplique o patch da seguinte forma:
patch -p0 < Makefile.patch
Depois disso, é só instalar:
make install
Para testar, fiz o seguinte: copiei para uma pasta os binários /bin/ls e /bin/bash. Lá, calculei a diferença usando o bsdiff:
/usr/local/bin/bsdiff ls bash teste
Assim, foi criado o arquivo binário teste, que é a diferença entre ls e bash, ou seja, um patch. Depois, eu resolvi aplicar este patch no próprio ls. Assim, eu faria este ls se transformar no bash.
/usr/local/bin/bspatch ls ls_patched teste
Realmente, aconteceu como eu esperava. O comand bspatch gerou um binário ls_patched, que é o resultado do ls + teste. E adivinha, ele é exatamente o bash. Executa direitinho.
-
Liberar espaço
De vez em quando, a partição root, ou / (barra), fica perto de usar sua capacidade máxima, e para que o sistema não pare, é preciso liberar um pouco de espaço. De cara, eu sempre penso no diretório /tmp. Claro, se ele fizer parte da mesma partição do /. Para solucionar temporariamente o problema de espaço, eu excluo os arquivos temporários que não foram usados desde uma certa data. Para isto, o comando find é bastante útil. Como exemplo, no meu laptop, eu rodo a seguinte sentença:
$ sudo find /tmp -atime +1 -exec rm -rfv{} \;Isto faz com que ele busque no diretório /tmp todos os arquivos que tem a data de acesso maior que 1 dia no passado e submete-o ao comando rm, para removê-lo. A data pode ser modificada alterando o parâmetro +1 do atime. Caso coloque +2, serão buscados os arquivos com mais de 2 dias de acesso. Para mais informações, sempre existe o man.
$ man find
Outro utilitário bom para ajudar na busca por maior espaço livre é o du (disk usage). Ele faz uma somatória do uso de cada diretório e subdiretório. Dois parâmetros que sempre uso são: -h, para traduzir o espaço usado para unidades mais legíveis (GB, MB…); –max-depth=n, que diz ao du para correr até o nível n. Exemplo de uso:
$ sudo du -h --max-depth=1 /tmp
Ou seja, some o uso de todos os diretórios e subdiretórios de /tmp, porém só me exiba até o primeiro nível, de maneira legível.
-
CPU flags
Pelo tanto que venho lendo sobre virtualização e propriedades dos processadores, resolvi ir um pouco mais a fundo para saber o que significam aqueles nomes estranhos de instruções. No Linux pode-se verificar o conteúdo do arquivo /proc/cpuinfo:
$ grep flags /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv
As mais comuns que vi referências foram: PAE (Physical Address Extensions) que permite endereçamento de memória acima de 4GB; HT (Hyper Threading) que permite um núcleo de processador possuir duas filhas de processamento, simulando assim processamento paralelo; LM (Long Mode) que indica presença de instruções x86_64; entre outros que podem ser encontrados neste endereço.
Tags Cloud
"viagens" backup banco de dados catástrofes curiosidade dicas espiritualidade filosofias hardware linux recuperação redes servidores sql utilidades vídeos variedades virtualização
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.
Arquivo
Blog
Lista de Links
- Asterisk Asterisk PBX
- Debugging Consultoria Debugging Consultoria
- LPI
- Slackbuilds Repositório Slackbuilds
- Slackware Site oficial Slackware
- Viva o Linux Comunidade Viva o Linux
- Voip-Info Wiki VoIP
Utilitários
Tweets
- Por isso optei pelo KVM: http://www.ibm.com/developerworks/br/library/l-linux-kvm/ 15 hrs ago
- Broadcasting your screencast http://www.livestream.com/ 17 hrs ago
- Centenário do Corinthians - http://tinyurl.com/2c824ag 6 days ago
- Para os amantes de virtualização, linux e afins: http://www.freedominterface.org/2010/09/01/libvirt-e-nested-paging/ 1 week ago
- More updates...
Posting tweet...