web-dev-qa-db-ja.com

クロスプラットフォーム、人間が読める形式、他のファイルシステムを真に無視するルートパーティション上のdu

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またはSolaris10でそれぞれ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'

Solaris

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'

これにより、「/」ファイルシステム内の50 MBを超えるディレクトリが、昇順、再帰的、人間が読める形式で、適度に速い時間で返されます。

リクエスト:このワンライナーをより効果的、高速、または効率的にするのを手伝ってもらえますか?もっとエレガントになりませんか?そこで私がしたことを理解しているなら、読んでください。

問題は、他のすべてのファイルシステムがルートに分類されるため、「/」ディレクトリに含まれるどのディレクトリが「/」ファイルシステムの容量に寄与しているのかをすばやく識別することが難しい場合があることです。

これにより、Solaris10またはRedHatel5でduを実行している場合、基本的に2番目のパイプ区切りのegrep regexサブシェル除外からegrepped dfを変更することにより、すべての非/ファイルシステムが除外されます。 「クジラ」として。 munge-festは、du -x/-dが実際に役立ついくつかのxargsduリサイクルに必死にエスカレートし(下のコメントを参照)、最後の無償のegrepは、関連する大容量のディレクトリのリストを吐き出します。 「/」ファイルシステム。ただし、他のマウントされたファイルシステム内にはありません。とてもずさんです。

Linuxプラットフォームの例:xargs du -shx

pwd = /

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
_

これは結果です:

Linux:

_            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

pwd = /

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
_

これは結果です:

Solaris:

_            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
nice_line

あなたの問題は、私が理解しているように、duが他のファイルシステム(ネットワークまたはSANマウント)であり、使用率をカウントするのに長い時間がかかるものです。 )。

ファイルシステムの使用率を監視しようとしている場合は、duがそのジョブの間違ったツールであることを敬意を表して提出します。 dfが必要です(出力を含めたので、明らかに知っています)。

dfからの出力を解析すると、duを実行する必要がある特定のファイルシステムをターゲットにして、どのディレクトリがすべてのスペースをかみ砕いているかを判断するのに役立ちます(または、運が良ければ、ファイルシステム全体にあなたが自分でそれを理解するように言うことができる特定の責任者)。どちらの場合でも、少なくともファイルシステムがいっぱいになる前にいっぱいになっていることがわかります(そして出力の解析が簡単になります)。

つまり、最初にdfを実行し、次に必要に応じて使用率が高いと識別されたファイルシステムdudfを実行します。 (たとえば)より具体的な詳細を取得するには85%。


スクリプトに移ると、du-d(または-x)フラグを尊重していない理由は、次の質問が原因です。

 # pwd   
 /
 # du * (. . .etc. . .)

du/ --du -x /bin /home /sbin /usr /tmp /varなどの下のすべてで実行するように要求しています。--duは、要求したとおりに実行しています(それぞれの使用法を示します)引数の1つがたまたまファイルシステムのルートである場合、duは、実行していることを知っていると想定し、thatファイルシステムの使用法を最大で示します。見つかった最初のサブマウント。

これは重大にdu -x /とは異なります(「/について教えてください。サブマウントは無視してください」)。

スクリプトを修正するには*しないcdを分析しているディレクトリに-代わりに、
du /path/to/full/disk | [whatever you want to feed the output through]


これ(またはあなたが得るかもしれない他の提案)はあなたの2つのコア問題を解決しません:

  1. 監視システムはアドホックです
    性器に噛み付く前に問題を見つけたい場合は、本当にまともな監視プラットフォーム を展開する必要があります。管理チームにこれを受け入れさせるのに問題がある場合は、適切な監視によってダウンタイムを回避できることを彼らに思い出させてください。

  2. あなたの環境は(あなたが正しく推測しているように)混乱しています
    物事を再構築する以外はここで行うことはあまりありません-立ち上がって非常に作るのはSA)としてのあなたの仕事ですシステムを一度に1つずつ停止し、管理可能な構造で再構築する必要がある理由について、明確で非常に大きなビジネスケース。

あなたは何をする必要があるかについてかなりまともなハンドルを持っているようですが、質問がある場合はぜひ質問してください。私たちはできる限り支援しようとします(私たちはあなたのためにあなたのアーキテクチャを行うことはできませんが、概念的な質問や実用的な「監視ツールXYを行うにはどうすればよいですか?」タイプのものに答えることができます。

4
voretaq7

簡単な答え:インフラストラクチャ監視ツール(ZenOSS、Zabixxなど)をインストールします。

カスタムのものを探している場合は、毎回手動で管理するのではなく、マシンごとの奇妙な違いを処理するための何らかの抽象化レイヤーが必要ですか?

3
MikeyB

私はこの推薦を頻繁に行います。私がアドホックディスク使用量の計算に推奨するツールは ncduユーティリティ です。複数回指定できる--excludeフラグがあります。

Solaris (CSWncdu)のパッケージバージョンがあります。または、ソースからコンパイルすることもできます。それはあなたがしていることの多くを単純化します。

1
ewwhite

あなたが探しているのは ncd のようなものだと思います。これにより、ディスクが消費されている場所を見つけながら、ディレクトリへの移動を停止できます。

これはあなたが使用するツールであると言って他の答えをエコーし​​ますあなたの監視システムが問題を検出しました-それはあなたが非対話的に使用したい種類のツールではありません。実際、ncursesベースであるため、そうすることは手間がかかります。システム管理者なら誰でも、リソースを大量に消費し、あなたが説明したようなbashの怪物を一緒にハッキングするのを防ぐために、精査されたシンプルなツールをダウンロードできます。それははるかに多くのメモリとはるかに多くのI/Oを使用し、その「禁止された」ソフトウェアよりもはるかに危険です。

1
Scrivener