En raison d'un bug zram entraînant des blocages de la machine , j'ai dû désactiver zram.
Je pensais que dpkg --purge zram-config
ainsi que commenter toute référence de /etc/rc.local
ferait l'affaire, mais le module (et ses avertissements dmesg inquiétants Buffer I/O error on device zram0, logical block 257912
) ne cesse de se charger.
J'ai utilisé /etc/init
et /etc/init.d
pour zram et il n'y a pas eu de correspondance. J'ai même redéfini mkswap
pour consigner comment il a été appelé (car les "erreurs de mémoire tampon" se produisent lorsque mkswap touche la mémoire protégée) - étonnamment, je n'ai reçu aucun appel. Donc, je ne peux pas comprendre ce qui configure zram (appelant mkswap + swapon).
J'ai commencé à casser le zram.ko
pour arrêter son chargement. Mais je voudrais tout de même savoir quel script d’initialisation spécifique le charge. Des idées?
Notez que je cherche des réponses sur la façon de déterminer quel script d'initialisation ou de démarrage configure zram - je sais très bien que le bogue est peut-être déjà corrigé, que vous pouvez désactiver zram de plusieurs manières, etc. -sujet.
Essayez ceci (en adaptant l'emplacement 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
L'avant-dernière est le coupable, la dernière montre les paramètres d'appel. Le script /etc/init/zram-config.conf
veut créer un périphérique zram par cœur, celui ci-dessus en fabrique un avec 50%.
Je peux confirmer que le dernier secteur est mauvais dans /dev/zram
, probablement un bogue off-by-1. Un système avec zram et les paramètres par défaut plantera lorsqu'il essaiera d'utiliser ce secteur. Les options que je vois:
Ajoutez swapoff /dev/zram0
à /etc/rc.local
(base).
Liste noire zram (Mais cela le déchargera-t-il d'abord? Parce qu'il est chargé dans la clé USB).
Sinon, si vous souhaitez utiliser le zram, vous devez ajouter -c
à la mkswap
correspondante et espérer le meilleur, c’est-à-dire que tout fonctionne indépendamment du dernier secteur. Référence: ce post
Ajoutez le -c
à sbin/compcache-enable
de l'intérieur de l'image initrd et remballez-le (perdu avec les mises à niveau du noyau).
Ajoutez -c
à /etc/init/zram-config.conf
. Vous avez également besoin de swapoff
et rmmod
avant son modprobe
, car le zram est déjà défini lors de son exécution. La définition de la taille échouera.
J'ai choisi 3 pour l'instant, mais dmesg
est toujours pollué par ces erreurs d'E/S de mémoire tampon. Je surveillerai les accidents, maintenant au moins je sais d'où ils viennent.