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{매개변수/events_dfl_poll_msecs}=="0", ATTR{매개변수/events_dfl_poll_msecs}="2000"

인용하다

관련 정보