새로운 마운트 지점이 있는 경우 df 명령에서 뷰를 추적하는 방법

새로운 마운트 지점이 있는 경우 df 명령에서 뷰를 추적하는 방법

내 목표는 일부 새로운 마운트 지점이 추가되었는지 지속적으로 확인하는 것입니다. df 명령을 통해 이를 확인해야 합니다.

따라서 다음 명령은 실제로 df를 살펴보고 새 마운트 지점이 있으면 변경 사항을 볼 수 있습니다.

 watchdf

하지만 df에 새 마운트 지점이 나타나면 "새 마운트 지점 추가"를 인쇄하는 bash 스크립트를 통해 df 정보를 추적할 수 있는지 묻고 있습니다. 가능합니까?

답변1

출력을 보는 것은 df출력이 안정적으로 처리될 수 없고 마운트된 모든 파일 시스템을 포함하지 않기 때문에 좋지 않은 생각입니다( -aGNU 또는 busybox 구현 옵션을 사용하지 않는 한).

Linux( util-linux2.20 이상) 에서는 findmnt -p마운트 지점의 변경 사항을 폴링하는 데 사용할 수 있습니다.

poll(events=POLLPRI)이 명령은 파일 설명자에서 읽기 전용 열기 작업을 수행하여 /proc/self/mountinfo이벤트(마운트, 제거)가 발생하는 즉시 보고되도록 합니다. 그러나 이름이 바뀌는 마운트 지점은 감지하지 못합니다.

현재 마운트된 네임스페이스의 변경 사항만 감지합니다(Watching과 마찬가지로 df).

답변2

다음과 같은 스크립트를 사용할 수 있습니다.

x=""
while :; do
  df="$(awk '{print $1,$2}' /proc/mounts)" # only the first two fields are relevant
  if [ "$x" != "$df" ]; then # only diff the contents when something has changed
    diff <(echo "$df") <(echo "$x") \ # compare the two values
      --unchanged-line-format='' \
      --old-line-format='mounted: %L' \
      --new-line-format='unmounted: %L'
  fi
  x="$df"
  sleep 1 # can be increased
done

에 있는 정보를 바탕으로/proc/mounts, 스크립트는 1초마다 반복되어 변경 사항을 확인합니다. diff이전 값을 새 값과 비교하고 출력 형식을 지정합니다.


예를 들어 스크립트가 실행되면 출력은 다음과 같습니다.

mounted: //srv/share /mountpoint
unmounted: /dev/sdb1 /media

관련 정보