Como detectar qual script de init inicia o zram?

3

Devido a um bug zram que levou ao bloqueio de máquinas , teve que desativar o zram.

Eu achei dpkg --purge zram-config , além de comentar que qualquer referência de /etc/rc.local faria o truque, mas o módulo (e seus avisos ameaçadores do dmesg Buffer I/O error on device zram0, logical block 257912 ) continua sendo carregado.

Eu obtive /etc/init e /etc/init.d para o zram e não houve correspondências. Eu mesmo redefinei mkswap para registrar como ele era chamado (porque os "erros de buffer" ocorrem quando o mkswap toca na memória protegida) - surpreendentemente eu não recebi nenhuma chamada. Então eu não consigo descobrir o que configura o zram (chamando mkswap + swapon).

Eu decidi quebrar o zram.ko para interromper o carregamento. Mas eu ainda gostaria de descobrir o script de inicialização específico que carrega. Alguma idéia?

Note que estou procurando respostas sobre como rastrear qual init ou script de inicialização configura o zram - eu sei muito bem que o bug já pode ter sido corrigido, que você pode desabilitar o zram de várias maneiras etc, e tais respostas seria off-topic.

    
por dan3 17.09.2013 / 08:11

2 respostas

2

Tente isto (adaptando a localização do initrd):

$ mkdir /tmp/x
$ cd /tmp/x
$ zcat /boot/initrd.img-3.8.0-31-generic | cpio -i
$ grep -lR zram .
./scripts/init-top/compcache
./lib/modules/3.8.0-31-generic/kernel/drivers/staging/zram/zram.ko
./lib/modules/3.8.0-31-generic/modules.dep
./lib/modules/3.8.0-31-generic/modules.dep.bin
./lib/modules/3.8.0-31-generic/modules.order
./sbin/compcache-enable
./etc/udev/rules.d/80-compcache.rules

O segundo último é o culpado, o último mostra os parâmetros de chamada. O script /etc/init/zram-config.conf quer fazer um dispositivo zram por núcleo, o acima está fazendo um único com 50%.

Eu posso confirmar que o último setor está ruim em /dev/zram , provavelmente um bug off-by-1. Um sistema com zram e as configurações padrão falharão quando tentar usar esse setor. As opções que vejo:

  1. Adicione swapoff /dev/zram0 a /etc/rc.local (mais básico).

  2. Blacklist zram (Mas isso vai descarregar primeiro? Porque é carregado na ramdrive inicial).

    Caso contrário, se quiser usar o zram, você deve adicionar -c ao mkswap relevante e esperar pelo melhor, ou seja, que tudo funcione separado do último setor. Referência: este post

  3. Adicione o -c to sbin/compcache-enable de dentro da imagem initrd e reembale (perdido com upgrades do kernel).

  4. Adicione -c a /etc/init/zram-config.conf . Você também precisa de um swapoff e rmmod antes de seu modprobe , porque o zram já está definido quando é executado, portanto, a configuração do tamanho falhará.

Eu escolhi 3 por enquanto, mas dmesg ainda está poluído com esses erros de Buffer I / O. Eu estarei atento a acidentes, agora pelo menos eu sei de onde eles vêm.

    
por Matei David 01.10.2013 / 07:45
-1

Eu prefiro ter o ZRAM desligado, já que eu já uso uma partição de disco para swap. Eu estou em 13.10 em uma máquina e 12.0.4 em outra.

Eu sugeriria outra possível mudança para /etc/init/zram-config.conf , para parar completamente as trocas de zram. Supondo que você esteja usando o nível de execução padrão de 2, altere a linha:

start on runlevel [2345]

para

start on runlevel [345]

Eu usei o mesmo truque em /etc/init/tty1.conf , para deixar as mensagens do console de inicialização por view.r .

    
por sea7kenp 13.01.2014 / 20:27