Linux
linux 多久會注意到磁碟已分離?它可以更快嗎?
我發現如果我從我的 Linux 伺服器(CentOS 7)分離磁碟,相關
/dev/sd*
文件將在大約 10 秒後自動消失。我想知道Linux如何知道磁碟已分離?是否有類似掃地機的東西不斷掃描所有設備?
有沒有可能讓它更快?
延遲很可能是
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”
參考