我有一个脚本,可以将当前负载转储到我的服务器上的屏幕窗口中,这样我就无需切换到浏览器就可以查看 zabbix 等。
该脚本基本上只是循环while ;: do awk "{print $1,$2,$3}" < /proc/loadavg; sleep 20s; done
(但使用 /usr/bin/rev 输出更美观,使其易于阅读)。(脚本在这里https://sizone.org/m/hacks/loadlog)
运行此程序时(在一台服务器上,客户正在同时执行 18 个备份作业...),我得到了以下输出:
0113 081430 22.04 22.68 23.82 22.38 22.73 23.82 26.80 23.73 24.12 29.77 24.65 24.42 31.43 25.33 24.65 /usr/local/bin/loadlog:第 23 行:/usr/bin/rev:无法执行二进制文件:可执行格式错误27.64 25.06 24.58 26.99 25.09 24.60
什么可能导致TEMPORARY 执行格式错误?
我也这样做了:
$ sudo md5sum `which rev` 1ebd9cc77b09f907767d39d5b4746c4e /usr/bin/rev
$ sudo apt-get install --reinstall util-linux
Reading package lists... Done Building dependency tree... Done Reading state information... Done 0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 198 not upgraded. Need to get 0 B/1141 kB of archives. After this operation, 0 B of additional disk space will be used. (Reading database ... 50992 files and directories currently installed.) Preparing to unpack .../util-linux_2.36.1-8+deb11u1_amd64.deb ... Unpacking util-linux (2.36.1-8+deb11u1) over (2.36.1-8+deb11u1) ... Setting up util-linux (2.36.1-8+deb11u1) ... fstrim.service is a disabled or a static unit not running, not starting it. Processing triggers for mailcap (3.69) ... Processing triggers for man-db (2.9.4-2) ...
$ sudo md5sum `which rev` 1ebd9cc77b09f907767d39d5b4746c4e /usr/bin/rev
因此 rev 是相同的(或者 md5sum 被巧妙地破解了,让我相信了……)。值得注意的是,这是 HP Proliant Gen 9 上的 ECC 内存。
怎么回事?宇宙射线(与 ECC 相比)?我该怎么做才能进一步验证?我注意到,在盒子上的任何地方都没有给我带来临时执行格式错误。
答案1
截断的/usr/bin/rev
文件可能会导致这种情况,但我不确定是什么原因导致这种情况发生。
对 ld.so 造成某种暂时性损坏是另一种选择。