linux 多久会注意到磁盘已分离?而且可以更快吗?

linux 多久会注意到磁盘已分离?而且可以更快吗?

我发现如果我从我的Linux服务器(CentOS 7)上分离磁盘,相关/dev/sd*文件将在大约10秒后自动消失。

我想知道 Linux 如何知道磁盘已分离?有没有像扫地机一样不断扫描所有设备的东西?

有可能让它更快吗?

答案1

延迟可能是由udisk2&udev 引起的。

研究

$ ps -eaf|grep [u]disk
root     17041     1  0 09:48 ?        00:00:00 /usr/libexec/udisks2/udisksd

可以像这样查询存储设备:

$ udisksctl status
MODEL                     REVISION  SERIAL               DEVICE
--------------------------------------------------------------------------
VBOX HARDDISK             1.0       VBc5aaf476-f419b1f1  sda

如果你看一下这个udisk2过程:

$ lsof -p $(pidof udisksd) | tail
udisksd 17041 root    3u     unix 0xffff88003a49d400      0t0     611852 socket
udisksd 17041 root    4u  a_inode                0,9        0       4852 [eventfd]
udisksd 17041 root    5u  a_inode                0,9        0       4852 [eventfd]
udisksd 17041 root    6u     unix 0xffff88003a49c000      0t0     611853 socket
udisksd 17041 root    7u  a_inode                0,9        0       4852 [eventfd]
udisksd 17041 root    8r      REG                0,3        0     611907 /proc/17041/mountinfo
udisksd 17041 root    9r      REG                0,3        0 4026532019 /proc/swaps
udisksd 17041 root   10r  a_inode                0,9        0       4852 inotify
udisksd 17041 root   11u  netlink                         0t0     611910 KOBJECT_UEVENT
udisksd 17041 root   12u  a_inode                0,9        0       4852 [eventfd]

那里没什么可说的,吸引我眼球的是那里inotify。每当我看到这个,我立即想到 udev。

寻找udev规则

$ find /etc/udev/rules.d/ /usr/lib/udev/rules.d  | grep sto
/usr/lib/udev/rules.d/90-alsa-restore.rules
/usr/lib/udev/rules.d/60-persistent-storage.rules
/usr/lib/udev/rules.d/60-persistent-storage-tape.rules

第二个文件看起来很有趣,看看里面。这行看起来像原因:

$ cat /usr/lib/udev/rules.d/60-persistent-storage.rules
...
# enable in-kernel media-presence polling
ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"

ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"

参考

相关内容