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:
-
Adicione
swapoff /dev/zram0
a/etc/rc.local
(mais básico). -
Blacklist zram (Mas isso vai descarregar primeiro? Porque é carregado na ramdrive inicial).
Caso contrário, se quiser usar o zram, você deve adicionar
-c
aomkswap
relevante e esperar pelo melhor, ou seja, que tudo funcione separado do último setor. Referência: este post -
Adicione o
-c
tosbin/compcache-enable
de dentro da imagem initrd e reembale (perdido com upgrades do kernel). -
Adicione
-c
a/etc/init/zram-config.conf
. Você também precisa de umswapoff
ermmod
antes de seumodprobe
, 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.