web-dev-qa-db-fra.com

Comment détecter quel script d'initialisation démarre zram?

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.

3
dan3

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:

  1. Ajoutez swapoff /dev/zram0 à /etc/rc.local (base).

  2. 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

  3. Ajoutez le -c à sbin/compcache-enable de l'intérieur de l'image initrd et remballez-le (perdu avec les mises à niveau du noyau).

  4. 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.

2
Matei David