这是我在这里的第一篇帖子。我是一个业余爱好者。
我正在运行“Raspbian GNU/Linux 10(buster)”的 RPi4 上。
管道获取了一堆硬盘的电源状态。然而,在某些驱动器上,hdparm 会变得无响应。
为了尝试解决这个问题,我使用了 timeout 命令,后跟 hdparm 作为 xargs 管道中的参数,但是 timeout 现在超时了 xargs 而不是 hdparm。
该管道在最后一个部分(即 xargs 命令)之前都可以正常工作:
ls -l /dev/disk/by-uuid/ | grep -f /home/dec/drivelist| cut -d '/' -f 3 | xargs -I {} timeout -k 10 8 hdparm -C /dev/{}
(drivelist是一个ASCII文件,每行只有一个磁盘UUID。)
这将输出以下内容,并在sda2超时时退出并无法继续执行xargs。
/dev/sdf1:
drive state is: standby
/dev/sdd1:
drive state is: standby
/dev/sdg1:
drive state is: standby
/dev/sda2:
xargs: timeout: terminated by sig
这里的问题是超时实际上会超时xargs(或整个管道?),而不仅仅是hdparm。
我已经尝试过:
ls -l /dev/disk/by-uuid/ | grep -f /home/dec/drivelist| cut -d '/' -f 3 | xargs -I {} bash -C "timeout -k 10 8 hdparm -C /dev/{}"
这也不能按预期工作并输出:
bash: timeout -k 10 8 hdparm -C /dev/sdf1: No such file or directory
bash: timeout -k 10 8 hdparm -C /dev/sdd1: No such file or directory
bash: timeout -k 10 8 hdparm -C /dev/sdg1: No such file or directory
bash: timeout -k 10 8 hdparm -C /dev/sda2: No such file or directory
如何在管道中使此代码工作,避免多行代码?
感谢您的时间和帮助。
vLAd
关于HDPARM的其他问题
hdparm -C似乎会卡住检查一个2.7 TB的卷。该卷通过SATA-USB连接到RPi,并插入USB3端口。
在这样的大小下,hdparm -C可能需要几分钟才能完成,我只是不耐烦吗?
编辑
我已将此添加到管道中,在xargs之前,但无济于事;这会删除数字,因此sdXn变成了sdX。
grep -Eo "[a-z]{3}"
sda2
之后没有更多的驱动器,因此我得出结论,原始版本有效,只是没有继续使用xargs。 - Armali--verbose
添加到您的xargs
命令行中可能会显示有用的信息。祝你好运。(还有,第一篇帖子很棒!) - shellter