我发现如果我从我的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"