Solaris のシステム管理 (上級編)

第 16 章 ディスク使用の管理 (手順)

この章では、使用していないファイルや大きなディレクトリを見つけることにより、ディスク容量を最適化する方法を示します。この章で説明する手順は次のとおりです。

この章で説明する手順は次のとおりです。

ファイルとディスク容量の情報の表示

次の表は、サイズとディスク容量の情報を表示するコマンドをまとめたものです。

コマンド 

マニュアルページ 

説明 

df

df(1M)

空きディスクブロック数とファイル数を表示する。 

du

du(1)

各サブディレクトリに割り当てられたディスク容量を表示する。 

find -size

find(1)

-size オプションで指定したサイズに基づいて、ディレクトリを再帰的に検索する。

ls - lh

ls(1)

ファイルのサイズを 1024 の累乗でリストする。 

ファイルとディスク容量の情報を表示する方法

次のように df コマンドを入力して、ディスク容量の利用状況に関する情報を表示します。


$ df [directory]  [-h] [-t] [-t]

df

オプションを指定しない場合、マウントされている全ファイルシステム、それらの装置名、使用されている 512 バイトのブロック数、ファイル数のリストを表示する 

directory

チェックするファイルシステムのディレクトリを指定する 

-h

ディスク容量を 1024 の累乗で表示する 

-t

マウントされている全ファイルシステムの合計ブロック数と使用されているブロック数を表示する 

例 — ファイルサイズおよびディスク容量に関する情報を表示する

次の例では、/usr/dist を除き、すべてのファイルシステムがローカルでマウントされています。/usr/dist はシステム venus からリモートにマウントされています。


$ df
/                  (/dev/dsk/c0t0d0s0 ):  287530 blocks    92028 files
/usr               (/dev/dsk/c0t0d0s6 ): 1020214 blocks   268550 files
/proc              (/proc             ):       0 blocks      878 files
/dev/fd            (fd                ):       0 blocks        0 files
/etc/mnttab        (mnttab            ):       0 blocks        0 files
/var/run           (swap              ):  396016 blocks     9375 files
/tmp               (swap              ):  396016 blocks     9375 files
/opt               (/dev/dsk/c0t0d0s5 ):  381552 blocks    96649 files
/export/home       (/dev/dsk/c0t0d0s7 ):  434364 blocks   108220 files
/usr/dist          (venus:/usr/dist   ):14750510 blocks  2130134 files

次の例は、ファイルシステム情報が 1024 バイト単位で表示されています。


$ df -h
Filesystem             size   used  avail capacity  Mounted on
/dev/dsk/c0t0d0s0      1.9G    58M   1.8G     4%    /
/dev/dsk/c0t0d0s6      2.5G   765M   1.7G     1%    /usr
/proc                    0K     0K     0K     0%    /proc
fd                       0K     0K     0K     0%    /dev/fd
mnttab                   0K     0K     0K     0%    /etc/mnttab
swap                   2.1G    24K   2.1G     1%    /var/run
swap                   2.1G     0K   2.1G     0%    /tmp
/dev/dsk/c0t0d0s5      1.9G    12M   1.8G     1%    /opt
/dev/dsk/c0t0d0s7      1.9G    10K   1.8G     1%    /export/home

注 –

/proc/tmp は、ローカルファイルシステムですが、UFS ファイルシステムではありません。/proc は PROCFS ファイルシステムであり、/var/run/tmp は TMPFS ファイルシステムであり、/etc/mnttab は MNTFS ファイルシステムです。


次の例は、マウントされているすべてのファイルシステム、装置名、使用されている 512 バイトブロックの合計数、ファイル数を示しています。2 行構成の各エントリの 2 行目は、それぞれのファイルシステムに割り当てられているブロックの合計数とファイルの合計数を示します。


$ df -t
/                  (/dev/dsk/c0t0d0s0 ):   287530 blocks    92028 files
                                  total:   385614 blocks    96832 files
/usr               (/dev/dsk/c0t0d0s6 ):  1020214 blocks   268550 files
                                  total:  2381102 blocks   300288 files
/proc              (/proc             ):        0 blocks      879 files
                                  total:        0 blocks      924 files
/dev/fd            (fd                ):        0 blocks        0 files
                                  total:        0 blocks       72 files
/etc/mnttab        (mnttab            ):        0 blocks        0 files
                                  total:        0 blocks        1 files
/var/run           (swap              ):   396112 blocks     9375 files
                                  total:   396112 blocks     9395 files
/tmp               (swap              ):   396112 blocks     9375 files
                                  total:   396128 blocks     9395 files
/opt               (/dev/dsk/c0t0d0s5 ):   381552 blocks    96649 files
                                  total:   385614 blocks    96832 files
/export/home       (/dev/dsk/c0t0d0s7 ):   434364 blocks   108220 files
                                  total:   434382 blocks   108224 files
/usr/dist          (venus:/usr/dist   ): 14750510 blocks  2130134 files
                                  total: 41225162 blocks  2482176 files

ファイルサイズの確認

ls コマンドを使用して、ファイルサイズを調べたりソートしたりできます。また、find コマンドを使用して、サイズの制限を超えているファイルを探すことができます。詳細は、ls(1)find(1) のマニュアルページを参照してください。

ファイルサイズを表示する方法

  1. 確認したいファイルがあるディレクトリに移動します。

  2. 次のように入力して、ファイルのサイズを表示します。


    $ ls [-lh] [-s]

    -l

    長形式でファイルとディレクトリのリストを表示し、それぞれのサイズをバイト単位で示す(次の例を参照)  

    -h

    ファイルやディレクトリのサイズが 1024 バイトより大きい場合、ファイルとディレクトリのサイズをキロバイト、メガバイト、ギガバイト、テラバイト単位で示す。 このオプションは、-o- n-@-g オプションで表示された出力を修正して、ファイルやディレクトリのサイズを新しい形式で表示する。詳細は ls(1) を参照してください。

    -s

    ファイルとディレクトリのリストを表示し、それぞれのサイズをブロック単位で示す 

例 — ファイルサイズを表示する

次の例は、lastlogmessages/var/adm ディレクトリ内のその他のファイルよりも大きいことを示します。


$ cd /var/adm
$ ls -lh
total 148
drwxrwxr-x   5 adm      adm          512 Nov 26 09:39 acct/
-rw-------   1 uucp     bin            0 Nov 26 09:25 aculog
drwxr-xr-x   2 adm      adm          512 Nov 26 09:25 exacct/
-r--r--r--   1 root     other       342K Nov 26 13:56 lastlog
drwxr-xr-x   2 adm      adm          512 Nov 26 09:25 log/
-rw-r--r--   1 root     root         20K Nov 26 13:55 messages
drwxr-xr-x   2 adm      adm          512 Nov 26 09:25 passwd/
drwxrwxr-x   2 adm      sys          512 Nov 26 09:39 sa/
drwxr-xr-x   2 root     sys          512 Nov 26 09:49 sm.bin/
-rw-rw-rw-   1 root     bin            0 Nov 26 09:25 spellhist
drwxr-xr-x   2 root     sys          512 Nov 26 09:25 streams/
-rw-r--r--   1 root     bin         3.3K Nov 26 13:56 utmpx
-rw-r--r--   1 root     root           0 Nov 26 10:17 vold.log
-rw-r--r--   1 adm      adm          19K Nov 26 13:56 wtmpx

次の例は、lpsched.1 ファイルが 2 ブロックを使用していることを示します。


$ cd /var/lp/logs
$ ls -s
total 2            0 lpsched       2 lpsched.1

サイズの大きなファイルを見つける方法

  1. サイズの大きなファイルを検索したいディレクトリに移動します。

  2. 次のように入力して、ファイルのサイズをブロック単位に、最も大きいものから降順に表示します。


    $ ls -s | sort -nr | more
    

    sort -nr

    ファイルのリストをブロックサイズの最も大きなものから降順に並べる 

例 — サイズの大きなファイルを見つける

次の例では、lastlogmessages/var/adm ディレクトリ内で最も大きなファイルです。


$ cd /var/adm
$ ls -s | sort -nr | more
  48 lastlog
  30 messages
  24 wtmpx
  18 pacct
   8 utmpx
   2 vold.log
   2 sulog
   2 sm.bin/
   2 sa/
   2 passwd/
   2 pacct1
   2 log/
   2 acct/
   0 spellhist
   0 aculog
total 144

指定されたサイズ制限を超えるファイルを見つける方法

次のように find コマンドを使用して、指定したサイズを超えるファイルを見つけてファイル名を表示します。


$ find directory -size +nnn 

directory

ファイルを検索するディレクトリ 

-size +nnn

512 バイトブロック数。このサイズを上回るファイルがリストされる。 

例 — 指定されたサイズ制限を超えるファイルを見つける

次の例は、作業中のカレントディレクトリ内の 400 ブロックを超えるファイルをどのように見つけるかを示します。


$ find . -size +400 -print
./Howto/howto.doc
./Howto/howto.doc.backup
./Howto/howtotest.doc
./Routine/routineBackupconcepts.doc
./Routine/routineIntro.doc
./Routine/routineTroublefsck.doc
./.record
./Mail/pagination
./Config/configPrintadmin.doc
./Config/configPrintsetup.doc
./Config/configMailappx.doc
./Config/configMailconcepts.doc
./snapshot.rs

ディレクトリサイズの確認

du コマンドとそのオプションを使用してディレクトリのサイズを表示できます。さらに quot コマンドを使用すれば、ユーザーアカウントによって占められるローカル UFS ファイルシステム上のディスク容量のサイズを知ることができます。これらのコマンドについては、du(1) および quot(1M) のマニュアルページを参照してください。

ディレクトリ、サブディレクトリ、およびファイルのサイズを表示する方法

次のように du コマンドを入力して、1 つ以上のディレクトリ、サブディレクトリ、ファイルのサイズを表示します。サイズは 512 バイトブロック単位で表示されます。


$ du [-as] [directory ...]

du

指定した各ディレクトリとそれらの下の各サブディレクトリのサイズを合わせて表示する 

-a

指定したディレクトリ内の各ファイルと各サブディレクトリのサイズと合計ブロック数を表示する 

-s

指定したディレクトリ内の合計ブロック数を表示する 

-h

各ディレクトリを 1024 バイト単位で表示する 

-H

各ディレクトリを 1000 バイト単位で表示する 

directory ...

調べたい 1 つ以上のディレクトリを指定する 

例 — ディレクトリ、サブディレクトリ、およびファイルのサイズを表示する

次の例は、2 つのディレクトリの合計サイズを示しています。


$ du -s /var/adm /var/spool/lp
130     /var/adm
40      /var/spool/lp

次の例は、2 つのディレクトリとそれらのすべてのサブディレクトリとファイルのサイズ、および各ディレクトリ内の合計ブロック数を表示します。


$ du /var/adm /var/spool/lp
2       /var/adm/log
2       /var/adm/passwd
2       /var/adm/acct/fiscal
2       /var/adm/acct/nite
2       /var/adm/acct/sum
8       /var/adm/acct
2       /var/adm/sa
2       /var/adm/sm.bin
130     /var/adm
4       /var/spool/lp/admins
2       /var/spool/lp/fifos/private
2       /var/spool/lp/fifos/public
6       /var/spool/lp/fifos
2       /var/spool/lp/requests/starbug
4       /var/spool/lp/requests
2       /var/spool/lp/system
2       /var/spool/lp/tmp/starbug
2       /var/spool/lp/tmp/.net/tmp/starbug
4       /var/spool/lp/tmp/.net/tmp
2       /var/spool/lp/tmp/.net/requests/starbug
4       /var/spool/lp/tmp/.net/requests
10      /var/spool/lp/tmp/.net
14      /var/spool/lp/tmp
40      /var/spool/lp

次の例は、ディレクトリのサイズを 1024 バイト単位で示しています。


du -h /usr/share/audio
 796K   /usr/share/audio/samples/au
 797K   /usr/share/audio/samples
 798K   /usr/share/audio

ローカル UFS ファイルシステムのユーザーの所有状況を表示する方法

  1. スーパーユーザーになります。

  2. 次のように入力して、ユーザー、ディレクトリまたはファイルシステム、1024 バイト単位のブロック数を表示します。


    # quot [-a] [filesystem]

    -a

    マウントされている各 UFS ファイルシステムの全ユーザーと 1024 バイト単位のブロック数を表示する 

    filesystem

    UFS ファイルシステムを指定する。ユーザーと使用されているブロック数が表示される 


    注 –

    quot コマンドは、ローカル UFS ファイルシステムに対してだけ使用できます。


例 — ローカル UFS ファイルシステムのユーザーの所有状況を表示する

次の例では、ルート (/) ファイルシステムのユーザーが表示されています。次に、マウントされた全 UFS ファイルシステムのユーザーが表示されています。


# quot /
/dev/rdsk/c0t0d0s0:
43340   root    
 3142   rimmer   
   47   uucp    
   35   lp      
   30   adm     
    4   bin     
    4   daemon  
# quot -a
/dev/rdsk/c0t0d0s0 (/):
43340   root    
 3150   rimmer  
   47   uucp    
   35   lp      
   30   adm     
    4   bin     
    4   daemon  
/dev/rdsk/c0t0d0s6 (/usr):
460651  root    
206632  bin     
  791   uucp    
   46   lp      
    4   daemon  
    1   adm     
/dev/rdsk/c0t0d0s7 (/export/home):
    9   root    

古いファイルまたは使用されていないファイルの検索と削除

非常に負荷がかかったファイルシステムを整理する作業として、最近使用されていないファイルの特定と削除があります。使用されていないファイルは ls または find コマンドを使用して見つけることができます。詳細は、ls(1)find(1) のマニュアルページを参照してください。

ディスク容量を節約するその他の方法としては、/var/tmp または /var/spool 内にあるような一時ファイルを空にしたり、core ファイルやクラッシュダンプファイルを削除したりするなどが含まれます。クラッシュダンプファイルの詳細は、第 28 章「システムクラッシュ情報の管理 (手順)」を参照してください。

最新ファイルのリストを表示する方法

次のように ls -t コマンドを使用して、最も新しく作成または変更されたファイルから順番にファイルのリストを表示します。


$ ls -t [directory]

-t

最新タイムスタンプのファイルを最初にしてソートする 

directory

検索するディレクトリを指定します。 

例 — 最新ファイルのリストを表示する

次の例は、ls -tl コマンドを使用して、 /var/adm ディレクトリ内で作成または変更された最新のファイルを検索する方法を示しています。 sulog が最も新しく作成または変更されたファイルです。


$ ls -tl /var/adm
total 134
-rw-------   1 root     root         315 Sep 24 14:00 sulog
-r--r--r--   1 root     other     350700 Sep 22 11:04 lastlog
-rw-r--r--   1 root     bin         4464 Sep 22 11:04 utmpx
-rw-r--r--   1 adm      adm        20088 Sep 22 11:04 wtmpx
-rw-r--r--   1 root     other          0 Sep 19 03:10 messages
-rw-r--r--   1 root     other          0 Sep 12 03:10 messages.0
-rw-r--r--   1 root     root       11510 Sep 10 16:13 messages.1
-rw-r--r--   1 root     root           0 Sep 10 16:12 vold.log
drwxr-xr-x   2 root     sys          512 Sep 10 15:33 sm.bin
drwxrwxr-x   5 adm      adm          512 Sep 10 15:19 acct
drwxrwxr-x   2 adm      sys          512 Sep 10 15:19 sa
-rw-------   1 uucp     bin            0 Sep 10 15:17 aculog
-rw-rw-rw-   1 root     bin            0 Sep 10 15:17 spellhist
drwxr-xr-x   2 adm      adm          512 Sep 10 15:17 log
drwxr-xr-x   2 adm      adm          512 Sep 10 15:17 passwd

古いファイルと使用されていないファイルを見つけて削除する方法

  1. スーパーユーザーになります。

  2. 次のように入力して、指定した日数の間アクセスのないファイルを見つけて、ファイルにそれらのリストを書き込みます。


    # find directory -type f [-atime +nnn] [-mtime +nnn] -print > filename
    

    directory

    ファイルを検索するディレクトリを指定する。このディレクトリの下にあるディレクトリも検索する。 

    -atime + nnn

    指定した日数 (nnn) の間アクセスのないファイルを見つける 

    -mtime + nnn

    指定した日数 (nnn) の間変更のないファイルを見つける 

    filename

    使用されないファイルリストを書き込むファイルを指定する

  3. 上の手順でリストに書き込んだ使用されていないファイルを削除します。


    # rm `cat filename`
    

    filename は、前の手順で作成した、使用されていないファイルのリストが入っているファイル

例 — 古いファイルと使用されていないファイルを見つけて削除する

次の例は、/var/adm ディレクトリとサブディレクトリ中の過去 60 日にわたってアクセスされていないファイルを示しています。/var/tmp/deadfiles ファイルには、使用されていないファイルのリストが含まれます。rm コマンドは、これらの使用されていないファイルを削除します。


# find /var/adm -type f -atime +60 -print > /var/tmp/deadfiles &
# more /var/tmp/deadfiles
/var/adm/aculog
/var/adm/spellhist
/var/adm/wtmpx
/var/adm/sa/sa13
/var/adm/sa/sa27
/var/adm/sa/sa11
/var/adm/sa/sa23
/var/adm/sulog
/var/adm/vold.log
/var/adm/messages.1
/var/adm/messages.2
/var/adm/messages.3
# rm `cat /var/tmp/deadfiles`
#

一時ディレクトリを一度にクリアする方法

  1. スーパーユーザーになります。

  2. 整理するディレクトリに移動します。


    # cd directory
    

    注意 – 注意 –

    手順 3 を実行する前に、正しいディレクトリにいることを確認してください。手順 3 はカレントディレクトリ内のすべてのファイルを削除します。


  3. カレントディレクトリ内のファイルとサブディレクトリを削除します。


    # rm -r *
    
  4. 不要な一時サブディレクトリやファイル、または古いサブディレクトリやファイルがある他のディレクトリに移動して、手順 3 を繰り返してサブディレクトリやファイルを削除します。

例 — 一時ディレクトリを一度にクリアする

次の例は、どのように mywork ディレクトリを整理するかを示し、すべてのファイルとサブディレクトリが削除されたことを確認する方法を示しています。


# cd mywork
# ls
filea.000
fileb.000
filec.001
# rm -r *
# ls
#

core ファイルを見つけて削除する方法

  1. スーパーユーザーになります。

  2. core ファイルを検索したいディレクトリに移動します。

  3. 次のように入力して、ディレクトリとサブディレクトリ内のすべての core ファイルを見つけて削除します。


    # find . -name core -exec rm {} \;
    

例 — core ファイルを見つけて削除する

次の例は、どのように find コマンドを使用して jones のユーザーアカウントから core ファイルを見つけて削除するかを示します。


# cd /home/jones
# find . -name core -exec rm {} \;

クラッシュダンプファイルを削除する方法

クラッシュダンプファイルは非常に大きくなる可能性があります。したがって、必要以上に長期間保存しないでください。

  1. スーパーユーザーになります。

  2. 次のように入力して、クラッシュダンプファイルが格納されているディレクトリに移動します。


    # cd /var/crash/system
    

    system は、クラッシュダンプファイルを作成したシステムのことです。


    注意 – 注意 –

    手順 3 を実行する前に、正しいディレクトリにいることを確認してください。手順 3 はカレントディレクトリ内のすべてのファイルを削除します。


  3. クラッシュダンプファイルを削除します。


    # rm *
    
  4. クラッシュダンプファイルが削除されていることを確認します。


    # ls
    

例 — クラッシュダンプファイルを削除する

次の例は、システム venus からどのようにクラッシュダンプファイルを削除するかと、クラッシュダンプファイルが削除されているかを確認する方法を示します。


# cd /var/crash/venus
# rm *
# ls
#