내 Linux 서버는 아래와 같이 /에 마운트된 /dev/sda4 장치의 디스크 공간 사용량이 높다고 보고합니다.
[root@stormtrooper03 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda4 126G 114G 5.5G 96% /
tmpfs 32G 0 32G 0% /dev/shm
/dev/sda2 239M 118M 109M 53% /boot
/dev/sda1 150M 264K 150M 1% /boot/efi
/dev/sda5 63G 52M 60G 1% /home
/dev/sda6 63G 54M 60G 1% /tmp
/dev/sda7 63G 2.6G 58G 5% /usr
/dev/sda3 539G 11G 501G 3% /var
/dev/sdb1 917G 857G 51G 95% /data/1
/dev/sdc1 917G 861G 47G 95% /data/2
/dev/sdd1 917G 282G 627G 31% /data/3
/dev/sde1 917G 861G 47G 95% /data/4
/dev/sdf1 917G 858G 50G 95% /data/5
du -sh /*
그러나 아래 표시된 것처럼 실행에서는 이보다 훨씬 적은 양을 사용한다는 것을 알고 있습니다 . 이 장치의 파일 설정을 정리해야 하는데 찾을 수 없습니다!
[root@stormtrooper03 /]# du -sh /*
6.7M /bin
116M /boot
3.7T /data
356K /dev
30M /etc
172K /home
638M /lib
20M /lib64
16K /lost+found
4.0K /media
4.0K /mnt
3.8G /opt
0 /proc
42M /root
9.2M /sbin
4.0K /selinux
4.0K /srv
0 /sys
2.1M /tmp
2.5G /usr
11G /var
고쳐 쓰다
원인을 찾았습니다. /data/3
110GB의 데이터가 있는 새 디스크가 마운트되었으며 디스크가 마운트된 후 파일 시스템에서 숨겨졌습니다.
대답기존 디렉토리에서 마운트가 발생하는 이유원시 데이터를 검색하는 데 사용하는 방법을 설명 mount --bind
하지만, 사전에 알지 못하는 경우 시스템에 "그림자" 디렉터리가 있는지 찾는 방법은 설명하지 않습니다.
각 디스크를 개별적으로 확인하지 않고 비어 있지 않은 디렉토리에 마운트된 디스크 목록을 얻는 빠른 방법이 있습니까 mount --bind
?
답변1
이 문제를 해결했습니다! 이 서버의 작업을 다른 서버와 다르게 추적하여 /data/3에 마운트된 디스크가 어느 시점에서 작동을 멈췄다는 사실을 발견하여 /etc/fstab에 이를 주석 처리했습니다. 그러나 시스템의 프로세스는 이를 인식하지 못하고 계속해서 /data/3에 씁니다. 이때는 /에 있는 디렉터리입니다. 불량 디스크는 나중에 교체되었고 fstab 항목이 업데이트되어 이제 /data/3이 새 디스크에 마운트됩니다. 어찌됐든 오래된 데이터는숨겨진왜냐하면 그것에 대한 포인터나 다른 것이 없는 것 같기 때문입니다.
이 사실을 알고 나면 /data/3 디스크를 마운트 해제했고 이제 110GB 데이터 세트를 볼 수 있었습니다. 이를 삭제하고 디스크를 다시 마운트하면 모든 것이 정상으로 돌아갔습니다.
이와 같은 고아 디렉토리를 찾을 수 있는 도구가 있는지 모르겠습니다.
답변2
[편집하다]: 이 답변을 일반적인 설명으로 유지하세요. 질문의 세련된 버전에 대한 답변은 아닙니다.
디렉토리 통계시스템에서 대용량 파일과 디렉터리의 위치를 볼 수 있는 훌륭한 그래픽 유틸리티입니다. 히트맵과 정렬된 목록을 제공합니다.
답변3
숨겨진 데이터가 포함될 수 있는 다른 위치에 파일 시스템을 마운트하는 경우 잠재적으로 숨겨진 데이터가 마운트된 상대 위치로 이동하여 거기에 데이터가 있는지 확인할 수 있습니다.
어떤 결과가 나오면 sudo ls -A $MOUNTPOINT
어디에나 뭔가가 있다는 뜻입니다 $MOUNTPOINT
.
설치된 항목을 확인하려면 mount
명령을 별도로 실행하세요.
숨겨진 데이터를 찾는 데 사용할 수 있는 코드는 다음과 같습니다.
#!/bin/bash
TMP="/media/root" # temp location to mount the directory that might have data hidden by a mount point
sudo mkdir -p "$TMP"
sudo mount --bind --read-only -- "/" "$TMP" # if "/" holds the mount point with the hidden by mountpoint data, replace "/" if needed.
# replace `$(mount | awk '{print $3}')` below with the directories you wish to test for hidden data
for LOCATION in $(mount | awk '{print $3}') ; do
if [ -n "$(sudo ls -A "$TMP$LOCATION" 2>/dev/null)" ]; then
echo "data on unmounted \"$LOCATION\"";
fi;
done;
sudo umount "$TMP"
예제 출력:
data on unmounted "/run"
data on unmounted "/"
data on unmounted "/var"