
2012년 9월 20일 수정
이전에는 이 방법을 너무 복잡하게 만들었습니다. 나는 이 명령이 실제로 모든 것을 멋지게 포맷하면서도 더 간단한 방법이라고 믿습니다.
RHEL 5
du -x / | sort -n |cut -d\/ -f1-2|sort -k2 -k1,1nr|uniq -f1|sort -n|tail -10|cut -f2|xargs du -sxh
Solaris 10
du -d / | sort -n |cut -d\/ -f1-2|sort -k2 -k1,1nr|uniq -f1|sort -n|tail -10|cut -f2|xargs du -sdh
편집: RHEL5 또는 Solaris 10에서 각각 du -x 또는 du -d를 올바르게 사용하도록 명령이 업데이트되었습니다.
RHEL5
du -x /|egrep -v "$(echo $(df|awk '{print $1 "\n" $5 "\n" $6}'|cut -d\/ -f2-5|egrep -v "[0-9]|^$|Filesystem|Use|Available|Mounted|blocks|vol|swap")|sed 's/ /\|/g')"|egrep -v "proc|sys|media|selinux|dev|platform|system|tmp|tmpfs|mnt|kernel"|cut -d\/ -f1-3|sort -k2 -k1,1nr|uniq -f1|sort -k1,1n|cut -f2|xargs du -sxh|egrep "G|[5-9][0-9]M|[1-9][0-9][0-9]M"|sed '$d'
솔라리스
du -d /|egrep -v "$(echo $(df|awk '{print $1 "\n" $5 "\n" $6}'|cut -d\/ -f2-5|egrep -v "[0-9]|^$|Filesystem|Use|Available|Mounted|blocks|vol|swap")|sed 's/ /\|/g')"|egrep -v "proc|sys|media|selinux|dev|platform|system|tmp|tmpfs|mnt|kernel"|cut -d\/ -f1-3|sort -k2 -k1,1nr|uniq -f1|sort -k1,1n|cut -f2|xargs du -sdh|egrep "G|[5-9][0-9]M|[1-9][0-9][0-9]M"|sed '$d'
이렇게 하면 "/" 파일 시스템 내에서 50MB가 넘는 디렉터리가 오름차순, 재귀적, 사람이 읽을 수 있는 형식으로 상당히 빠른 시간 내에 반환됩니다.
요청: 이 한 줄짜리 내용을 더 효과적이고, 빠르며, 효율적으로 만드는 데 도움을 주실 수 있나요? 좀 더 우아한 것은 어떨까요? 내가 거기서 무엇을 했는지 이해했다면 계속 읽어보세요.
문제는 다른 모든 파일 시스템이 루트에 속하기 때문에 "/" 디렉토리 아래에 포함된 어떤 디렉토리가 "/" 파일 시스템 용량에 영향을 미치는지 빠르게 식별하기 어려울 수 있다는 것입니다.
이것은 기본적으로 내가 참조하고 싶은 세 번째 egrep에 의해 자연스럽게 추가로 제외되는 두 번째 파이프로 구분된 egrep 정규식 하위 쉘 제외에서 egrepped df를 제거하여 Solaris 10 또는 Red Hat el5에서 du를 실행할 때 / 파일 시스템이 아닌 모든 시스템을 제외합니다. "고래"로. munge-fest는 du -x/-d가 실제로 유용한 일부 xargs du 재활용으로 미친 듯이 확대되고(하단 설명 참조) 최종 무료 egrep은 "/" 파일 시스템이지만, 마운트된 다른 파일 시스템에는 없습니다. 매우 엉성합니다.
Linux 플랫폼 예: xargs du -shx
비밀번호 = /
du *|egrep -v "$(echo $(df|awk '{print $1 "\n" $5 "\n" $6}'|cut -d\/ -f2-5|egrep -v "[0-9]|^$|Filesystem|Use|Available|Mounted|blocks|vol|swap")|sed 's/ /\|/g')"|egrep -v "proc|sys|media|selinux|dev|platform|system|tmp|tmpfs|mnt|kernel"|cut -d\/ -f1-2|sort -k2 -k1,1nr|uniq -f1|sort -k1,1n|cut -f2|xargs du -shx|egrep "G|[5-9][0-9]M|[1-9][0-9][0-9]M"
이는 다음 파일 시스템에 대해 실행됩니다.
Linux builtsowell 2.6.18-274.7.1.el5 #1 SMP Mon Oct 17 11:57:14 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
df -kh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/mpath0p2 8.8G 8.7G 90M 99% /
/dev/mapper/mpath0p6 2.0G 37M 1.9G 2% /tmp
/dev/mapper/mpath0p3 5.9G 670M 4.9G 12% /var
/dev/mapper/mpath0p1 494M 86M 384M 19% /boot
/dev/mapper/mpath0p7 7.3G 187M 6.7G 3% /home
tmpfs 48G 6.2G 42G 14% /dev/shm
/dev/mapper/o10g.bin 25G 7.4G 17G 32% /app/SIP/logs
/dev/mapper/o11g.bin 25G 11G 14G 43% /o11g
tmpfs 4.0K 0 4.0K 0% /dev/vx
lunmonster1q:/vol/oradb_backup/epmxs1q1
686G 507G 180G 74% /rpmqa/backup
lunmonster1q:/vol/oradb_redo/bisxs1q1
4.0G 1.6G 2.5G 38% /bisxs1q/rdoctl1
lunmonster1q:/vol/oradb_backup/bisxs1q1
686G 507G 180G 74% /bisxs1q/backup
lunmonster1q:/vol/oradb_exp/bisxs1q1
2.0T 1.1T 984G 52% /bisxs1q/exp
lunmonster2q:/vol/oradb_home/bisxs1q1
10G 174M 9.9G 2% /bisxs1q/home
lunmonster2q:/vol/oradb_data/bisxs1q1
52G 5.2G 47G 10% /bisxs1q/oradata
lunmonster1q:/vol/oradb_redo/bisxs1q2
4.0G 1.6G 2.5G 38% /bisxs1q/rdoctl2
ip-address1:/vol/oradb_home/cspxs1q1
10G 184M 9.9G 2% /cspxs1q/home
ip-address2:/vol/oradb_backup/cspxs1q1
674G 314G 360G 47% /cspxs1q/backup
ip-address2:/vol/oradb_redo/cspxs1q1
4.0G 1.5G 2.6G 37% /cspxs1q/rdoctl1
ip-address2:/vol/oradb_exp/cspxs1q1
4.1T 1.5T 2.6T 37% /cspxs1q/exp
ip-address2:/vol/oradb_redo/cspxs1q2
4.0G 1.5G 2.6G 37% /cspxs1q/rdoctl2
ip-address1:/vol/oradb_data/cspxs1q1
160G 23G 138G 15% /cspxs1q/oradata
lunmonster1q:/vol/oradb_exp/epmxs1q1
2.0T 1.1T 984G 52% /epmxs1q/exp
lunmonster2q:/vol/oradb_home/epmxs1q1
10G 80M 10G 1% /epmxs1q/home
lunmonster2q:/vol/oradb_data/epmxs1q1
330G 249G 82G 76% /epmxs1q/oradata
lunmonster1q:/vol/oradb_redo/epmxs1q2
5.0G 609M 4.5G 12% /epmxs1q/rdoctl2
lunmonster1q:/vol/oradb_redo/epmxs1q1
5.0G 609M 4.5G 12% /epmxs1q/rdoctl1
/dev/vx/dsk/slaxs1q/slaxs1q-vol1
183G 17G 157G 10% /slaxs1q/backup
/dev/vx/dsk/slaxs1q/slaxs1q-vol4
173G 58G 106G 36% /slaxs1q/oradata
/dev/vx/dsk/slaxs1q/slaxs1q-vol5
75G 952M 71G 2% /slaxs1q/exp
/dev/vx/dsk/slaxs1q/slaxs1q-vol2
9.8G 381M 8.9G 5% /slaxs1q/home
/dev/vx/dsk/slaxs1q/slaxs1q-vol6
4.0G 1.6G 2.2G 42% /slaxs1q/rdoctl1
/dev/vx/dsk/slaxs1q/slaxs1q-vol3
4.0G 1.6G 2.2G 42% /slaxs1q/rdoctl2
/dev/mapper/appoem 30G 1.3G 27G 5% /app/em
결과는 다음과 같습니다.
리눅스:
54M etc/gconf
61M opt/quest
77M opt
118M usr/ ##===\
149M etc
154M root
303M lib/modules
313M usr/java ##====\
331M lib
357M usr/lib64 ##=====\
433M usr/lib ##========\
1.1G usr/share ##=======\
3.2G usr/local ##========\
5.4G usr ##<=============Ascending order to parent
94M app/SIP ##<==\
94M app ##<=======Were reported as 7gb and then corrected by second du with -x.
============================================
Solaris 플랫폼 예: xargs du -shd
비밀번호 = /
du *|egrep -v "$(echo $(df|awk '{print $1 "\n" $5 "\n" $6}'|cut -d\/ -f2-5|egrep -v "[0-9]|^$|Filesystem|Use|Available|Mounted|blocks|vol|swap")|sed 's/ /\|/g')"|egrep -v "proc|sys|media|selinux|dev|platform|system|tmp|tmpfs|mnt|kernel"|cut -d\/ -f1-2|sort -k2 -k1,1nr|uniq -f1|sort -k1,1n|cut -f2|xargs du -sh|egrep "G|[5-9][0-9]M|[1-9][0-9][0-9]M"
이는 다음 파일 시스템에 대해 실행됩니다.
SunOS solarious 5.10 Generic_147440-19 sun4u sparc SUNW,SPARC-Enterprise
Filesystem size used avail capacity Mounted on
kiddie001Q_rpool/ROOT/s10s_u8wos_08a 8G 7.7G 1.3G 96% /
/devices 0K 0K 0K 0% /devices
ctfs 0K 0K 0K 0% /system/contract
proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab
swap 15G 1.8M 15G 1% /etc/svc/volatile
objfs 0K 0K 0K 0% /system/object
sharefs 0K 0K 0K 0% /etc/dfs/sharetab
fd 0K 0K 0K 0% /dev/fd
kiddie001Q_rpool/ROOT/s10s_u8wos_08a/var 31G 8.3G 6.6G 56% /var
swap 512M 4.6M 507M 1% /tmp
swap 15G 88K 15G 1% /var/run
swap 15G 0K 15G 0% /dev/vx/dmp
swap 15G 0K 15G 0% /dev/vx/rdmp
/dev/dsk/c3t4d4s0 3 20G 279G 41G 88% /fs_storage
/dev/vx/dsk/oracle/ora10g-vol1 292G 214G 73G 75% /o10g
/dev/vx/dsk/oec/oec-vol1 64G 33G 31G 52% /oec/runway
/dev/vx/dsk/oracle/ora9i-vol1 64G 33G 31G 59% /o9i
/dev/vx/dsk/home 23G 18G 4.7G 80% /export/home
/dev/vx/dsk/dbwork/dbwork-vol1 292G 214G 73G 92% /db03/wk01
/dev/vx/dsk/oradg/ebusredovol 2.0G 475M 1.5G 24% /u21
/dev/vx/dsk/oradg/ebusbckupvol 200G 32G 166G 17% /u31
/dev/vx/dsk/oradg/ebuscrtlvol 2.0G 475M 1.5G 24% /u20
kiddie001Q_rpool 31G 97K 6.6G 1% /kiddie001Q_rpool
monsterfiler002q:/vol/ebiz_patches_nfs/NSA0304 203G 173G 29G 86% /oracle/patches
/dev/odm 0K 0K 0K 0% /dev/odm
결과는 다음과 같습니다.
솔라리스:
63M etc
490M bb
570M root/cores.ric.20100415
1.7G oec/archive
1.1G root/packages
2.2G root
1.7G oec
==============
엄청난 수의 마운트가 있는 여러 플랫폼에서 "/"(일명 "루트" 파일 시스템 전체 문제)를 보다 효과적으로 처리할 수 있는 방법은 무엇입니까?
Red Hat el5에서 du -x는 분명히 다른 파일 시스템으로의 이동을 방지합니다. 그럴 수도 있지만 / 디렉토리에서 실행하면 아무 작업도 수행되지 않는 것 같습니다.
Solaris 10에서 이에 상응하는 플래그는 du -d로, 이는 전혀 놀라운 일이 아닙니다.
(제가 방금 잘못한 일이기를 바랍니다.)
뭔지 맞춰봐? 정말 느립니다.
답변1
내가 이해하는 바에 따르면 귀하의 문제는 du
다른 파일 시스템으로 내려간다는 것입니다(일부는 네트워크 또는 SAN 마운트이며 활용도를 계산하는 데 오랜 시간이 걸립니다).
du
파일 시스템 활용도 를 모니터링하려는 경우잘못된작업을 위한 도구입니다. 당신은 원합니다 df
(출력을 포함했기 때문에 분명히 알고 있습니다).
출력을 구문 분석하면 어떤 디렉터리가 모든 공간을 차지하고 있는지 확인하기 위해 df
실행해야 하는 특정 파일 시스템을 대상으로 지정하는 데 도움이 될 수 있습니다 du
. 또는 운이 좋으면 전체 파일 시스템에 이를 알아내도록 지시할 수 있는 특정 책임 당사자가 있습니다. 그들 자신). 두 경우 모두 적어도 파일 시스템이 가득 차기 전에 가득 차 있다는 것을 알 수 있습니다(그리고 출력을 구문 분석하기가 더 쉽습니다).
df
즉, 먼저 실행 한 다음 실행하세요.당신이해야한다면보다 구체적인 세부 정보를 얻으려면 활용도가 85% 이상인 것으로 식별된 du
파일 시스템에서 실행하세요 .df
스크립트로 이동하면 (또는 ) 플래그를 du
존중하지 않는 이유 는 질문하는 질문 때문입니다.-d
-x
# pwd
/
# du * (. . .etc. . .)
-- 등 -- du
아래의 모든 항목에서 실행을 요청하는 것은 요청한 대로 정확하게 수행하는 것입니다(각 항목의 사용법을 제공합니다. 인수 중 하나가 파일 시스템 루트인 경우 사용자가 무엇인지 알고 있다고 가정합니다). 하고 사용법을 알려준다/
du -x /bin /home /sbin /usr /tmp /var
du
du
저것찾은 첫 번째 하위 마운트까지의 파일 시스템입니다.
이것은비판적으로(" 하위 마운트에 du -x /
대해 알려주고 무시하세요") 와는 다릅니다 ./
스크립트를 수정하려면*하지 않다 cd
분석중인 디렉토리에 - 대신 다음을 실행하십시오.
du /path/to/full/disk | [whatever you want to feed the output through]
이 방법(또는 귀하가 받을 수 있는 다른 제안)은 두 가지 핵심 문제를 해결하지 못합니다.
모니터링 시스템이 임시적입니다.
문제가 성기에 물리기 전에 문제를 파악하고 싶다면정말배포해야 합니다.괜찮은 모니터링 플랫폼. 관리 팀이 이를 받아들이도록 하는 데 어려움을 겪고 있는 경우 적절한 모니터링을 통해 가동 중지 시간을 피할 수 있다는 점을 상기시켜 주십시오.당신의 환경은 (당신이 올바르게 추측한 대로) 엉망입니다
여기서는 건물을 다시 짓는 것 외에는 할 일이 많지 않습니다.당신의SA 역할을 맡아 시스템을 한 번에 하나씩 제거하고 관리할 수 있는 구조로 재구축해야 하는 이유에 대해 매우 명확하고 시끄러운 비즈니스 사례를 제시합니다.
당신은 해야 할 일을 상당히 잘 처리하고 있는 것 같지만, 질문이 있으면 꼭 물어보세요. 우리는 가능한 한 많은 도움을 주려고 노력할 것입니다. (우리가 당신을 위해 아키텍처를 해줄 수는 없지만, 우리는 개념적인 질문이나 실용적인 " X
모니터링 도구를 사용하려면 어떻게 해야 하나요 Y
?"와 같은 질문에 답할 수 있습니다.
답변2
간단한 대답: 인프라 모니터링 도구(예: ZenOSS, Zabixx 등)를 설치하십시오.
맞춤형 무언가를 찾고 있다면 매번 수동으로 관리하는 대신 이상한 기계별 차이를 처리하기 위한 일종의 추상화 계층이 필요할 수도 있습니다.
답변3
답변4
내 생각에 당신이 찾고있는 것은 다음과 같습니다NCDU. 이렇게 하면 디렉터리 탐색을 중단하면서도 디스크가 사용되는 위치를 계속 찾을 수 있습니다.
이것이 당신이 사용하는 도구라고 말함으로써 다른 답변을 반영하겠습니다.~ 후에모니터링 시스템이 문제를 감지했습니다. 이는 비대화식으로 사용하려는 도구가 아닙니다. 사실, 이는 ncurses 기반이기 때문에 그렇게 하는 것이 어려울 것입니다. 가치가 있는 모든 시스템 관리자는 당신이 설명한 것과 같이 자원을 많이 소모하고 함께 해킹된 배쉬 괴물을 방지하기 위해 검증되고 간단한 도구를 다운로드하도록 허용할 것입니다. 훨씬 더 많은 메모리와 I/O를 사용하며 "금지된" 소프트웨어보다 훨씬 더 위험합니다.