答案1
你可以使用 来观察每个进程的 I/O 活动iotop
。安装:
sudo apt-get install iotop
然后启动:
sudo iotop
观察 30 秒。它是否显示badblocks
正在进行任何 I/O?如果是,则表示它正在运行,如果没有,则表示它可能已冻结。
下次您可以badblocks
使用以下-s
参数启动:
sudo badblocks -nsv /dev/sda6
这将显示出进步。
答案2
您可以通过查看它来了解其badblocks
当前在驱动器中的位置,即:fdinfo
proc
root@ubuntu:/home/ubuntu# ps ax | grep badblock
3772 tty1 D+ 12:11 badblocks -v /dev/sdb
5478 tty2 S+ 0:00 grep --color=auto badblock
root@ubuntu:/home/ubuntu# ls -l /proc/3772/fd
total 0
lrwx------ 1 root root 64 Mar 3 00:41 0 -> /dev/tty1
lrwx------ 1 root root 64 Mar 3 00:41 1 -> /dev/tty1
lrwx------ 1 root root 64 Mar 3 00:41 2 -> /dev/tty1
lr-x------ 1 root root 64 Mar 3 00:41 3 -> /dev/sdb
root@ubuntu:/home/ubuntu# cat /proc/3772/fdinfo/3
pos: 1707980816384
flags: 0140000
mnt_id: 24
root@ubuntu:/home/ubuntu# lsblk -bd /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 2000398934016 0 disk
因此,此次badblocks
运行已完成约 85%。
@falconer 的回答(使用iotop
)是一种观察其当前速率的好方法,但fdinfo
可以显示该计划取得了多少进展。
答案3
除了 iotop,你可能还想看看消息:
dmesg -w
在我的例子中,坏块停留在 2.81%,没有 iotop 活动,并且 dsmesg 定期显示以下消息:
[ 7371.945131] INFO: task badblocks:19760 blocked for more than 120 seconds.
[ 7371.945134] Tainted: G OE 5.0.0-29-generic #31~18.04.1-Ubuntu
[ 7371.945135] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 7371.945136] badblocks D 0 19760 19759 0x00000004
[ 7371.945137] Call Trace:
[ 7371.945140] __schedule+0x2bd/0x850
[ 7371.945141] schedule+0x2c/0x70
[ 7371.945145] io_schedule+0x16/0x40
...
不确定我的情况是什么问题但这可能是一个错误?