マシンのロックアップにつながるzramのバグ のため、zramを無効にする必要がありました。
dpkg --purge zram-config
と/etc/rc.local
からの参照をコメントアウトするとうまくいくと思いましたが、モジュール(およびその不吉なdmesg警告Buffer I/O error on device zram0, logical block 257912
)がロードされ続けます。
Zramの/etc/init
と/etc/init.d
をgrepしましたが、一致するものはありませんでした。 mkswap
を再定義して、それがどのように呼び出されたかを記録しました(mkswapが保護されたメモリに触れると「バッファエラー」が発生するため)-驚いたことに、呼び出しがありませんでした。そのため、zramの構成(mkswap + swaponを呼び出す)を把握できません。
ロードを停止するためにzram.ko
を壊すことにしました。しかし、どの特定の初期化スクリプトがそれをロードするのかを理解したいと思います。何か案は?
どのinitまたはスタートアップスクリプトがzramを構成するかを追跡する方法についての答えを探していることに注意してください-バグはすでに修正されている可能性があり、いくつかの方法でzramを無効にできるなど、そのような答えはオフになります-トピック。
これを試してください(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
最後から2番目は犯人で、最後の1つは呼び出しパラメータを示しています。スクリプト/etc/init/zram-config.conf
は、コアごとに1つのzramデバイスを作成することを望んでいます。上記のものは、50%の単一のzramデバイスを作成しています。
/dev/zram
の最後のセクターが不良であることを確認できます。これはおそらく1つずつのバグです。 zramとデフォルト設定を備えたシステムは、そのセクターを使用しようとするとクラッシュします。私が見るオプション:
swapoff /dev/zram0
を/etc/rc.local
に追加します(最も基本的)。
Zramをブラックリストに登録します(ただし、これは最初にアンロードされますか?最初のramdriveにロードされているためです)。
それ以外の場合、zramを使用する場合は、-c
を関連するmkswap
に追加し、最後のセクター以外ですべてが機能することを期待する必要があります。参照: この投稿
Initrdイメージ内から-c
をsbin/compcache-enable
に追加して再パックします(カーネルのアップグレードで失われます)。
-c
を/etc/init/zram-config.conf
に追加します。 swapoff
の前にrmmod
とmodprobe
も必要です。これは、実行時にzramがすでに設定されているため、サイズの設定が失敗するためです。
今のところ3を選択しましたが、dmesg
はまだこれらのバッファーI/Oエラーで汚染されています。クラッシュを監視しますが、少なくともそれらがどこから来たかはわかっています。