2012년 9월 20일 수정

2012년 9월 20일 수정

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 /vardudu저것찾은 첫 번째 하위 마운트까지의 파일 시스템입니다.

이것은비판적으로(" 하위 마운트에 du -x /대해 알려주고 무시하세요") 와는 다릅니다 ./

스크립트를 수정하려면*하지 않다 cd분석중인 디렉토리에 - 대신 다음을 실행하십시오.
du /path/to/full/disk | [whatever you want to feed the output through]


이 방법(또는 귀하가 받을 수 있는 다른 제안)은 두 가지 핵심 문제를 해결하지 못합니다.

  1. 모니터링 시스템이 임시적입니다.
    문제가 성기에 물리기 전에 문제를 파악하고 싶다면정말배포해야 합니다.괜찮은 모니터링 플랫폼. 관리 팀이 이를 받아들이도록 하는 데 어려움을 겪고 있는 경우 적절한 모니터링을 통해 가동 중지 시간을 피할 수 있다는 점을 상기시켜 주십시오.

  2. 당신의 환경은 (당신이 올바르게 추측한 대로) 엉망입니다
    여기서는 건물을 다시 짓는 것 외에는 할 일이 많지 않습니다.당신의SA 역할을 맡아 시스템을 한 번에 하나씩 제거하고 관리할 수 있는 구조로 재구축해야 하는 이유에 대해 매우 명확하고 시끄러운 비즈니스 사례를 제시합니다.

당신은 해야 할 일을 상당히 잘 처리하고 있는 것 같지만, 질문이 있으면 꼭 물어보세요. 우리는 가능한 한 많은 도움을 주려고 노력할 것입니다. (우리가 당신을 위해 아키텍처를 해줄 수는 없지만, 우리는 개념적인 질문이나 실용적인 " X모니터링 도구를 사용하려면 어떻게 해야 하나요 Y?"와 같은 질문에 답할 수 있습니다.

답변2

간단한 대답: 인프라 모니터링 도구(예: ZenOSS, Zabixx 등)를 설치하십시오.

맞춤형 무언가를 찾고 있다면 매번 수동으로 관리하는 대신 이상한 기계별 차이를 처리하기 위한 일종의 추상화 계층이 필요할 수도 있습니다.

답변3

나는 이런 추천을 자주 한다. 임시 디스크 사용량 계산을 위해 제가 옹호하는 도구는ncdu 유틸리티. --exclude여러 번 지정할 수 있는 플래그 가 있습니다 .

다음을 위한 패키지 버전이 있습니다.솔라리스(CSWncdu) 또는 소스에서 컴파일할 수 있습니다. 이는 수행 중인 작업의 대부분을 단순화합니다.

답변4

내 생각에 당신이 찾고있는 것은 다음과 같습니다NCDU. 이렇게 하면 디렉터리 탐색을 중단하면서도 디스크가 사용되는 위치를 계속 찾을 수 있습니다.

이것이 당신이 사용하는 도구라고 말함으로써 다른 답변을 반영하겠습니다.~ 후에모니터링 시스템이 문제를 감지했습니다. 이는 비대화식으로 사용하려는 도구가 아닙니다. 사실, 이는 ncurses 기반이기 때문에 그렇게 하는 것이 어려울 것입니다. 가치가 있는 모든 시스템 관리자는 당신이 설명한 것과 같이 자원을 많이 소모하고 함께 해킹된 배쉬 괴물을 방지하기 위해 검증되고 간단한 도구를 다운로드하도록 허용할 것입니다. 훨씬 더 많은 메모리와 I/O를 사용하며 "금지된" 소프트웨어보다 훨씬 더 위험합니다.

관련 정보