![Linux가 디스크가 분리되었음을 알아차리는 데 얼마나 걸리나요? 그리고 더 빠를 수도 있나요?](https://linux55.com/image/137923/Linux%EA%B0%80%20%EB%94%94%EC%8A%A4%ED%81%AC%EA%B0%80%20%EB%B6%84%EB%A6%AC%EB%90%98%EC%97%88%EC%9D%8C%EC%9D%84%20%EC%95%8C%EC%95%84%EC%B0%A8%EB%A6%AC%EB%8A%94%20%EB%8D%B0%20%EC%96%BC%EB%A7%88%EB%82%98%20%EA%B1%B8%EB%A6%AC%EB%82%98%EC%9A%94%3F%20%EA%B7%B8%EB%A6%AC%EA%B3%A0%20%EB%8D%94%20%EB%B9%A0%EB%A5%BC%20%EC%88%98%EB%8F%84%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
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"