Solaris のシステム管理 (第 2 巻)

第 19 章 ディスク使用の管理

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

使用されているブロックとファイルの表示

df コマンドとそのオプションを使用して、空きディスクブロック数とファイル数のレポートを得ることができます。詳細は、df(1M) のマニュアルページを参照してください。

ブロック、ファイル、ディスク容量に関する情報を表示する方法

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

$ df [directory] [-F fstype] [-g] [-k] [-t]

df

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

directory

ファイルシステムを確認したいディレクトリ。装置名、使用ブロック数、ファイル数を表示する 

-F fstype

マウントされていないファイルシステム、それらの装置名、使用されている 512 バイトのブロック数、タイプ fstype のファイルシステム上のファイル数のリストを表示する

-g

マウントされている全ファイルシステムの statvfs 構造を表示する

-k

ファイルシステム、使用されている K バイト数、空き K バイト数、容量の利用率、マウントポイントのリストを表示する 

-t

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


注 -

リモートでマウントされているファイルシステムに対しては、ファイル数の代わりに 「-1 files」 が表示されます。


例 - ブロック、ファイル、ディスク容量に関する情報を表示する

次の例では、/usr/local を除き、すべてのファイルシステムがローカルでマウントされています。/usr/local はシステム mars からリモートにマウントされているため、ローカルのディスク資源を使用しません。

$ df
/               (/dev/dsk/c0t3d0s0 ):   30374 blocks    14002 files
/usr            (/dev/dsk/c0t3d0s6 ):   40714 blocks    80522 files
/proc           (/proc             ):       0 blocks      429 files
/dev/fd         (fd                ):       0 blocks        0 files
/export/home    (/dev/dsk/c0t3d0s7 ):   10712 blocks    10564 files
/export/root    (/dev/dsk/c0t3d0s3 ):   69180 blocks    18812 files
/export/swap    (/dev/dsk/c0t3d0s4 ):   61804 blocks    29563 files
/opt            (/dev/dsk/c0t3d0s5 ):   15722 blocks    13147 files
/tmp            (swap              ):   57104 blocks     5653 files
/usr/local      (mars:/usr/local   ):  435040 blocks       -1 files
$

次の例では、ファイルシステム、合計 K バイト数、使用されている K バイト数、使用可能な K バイト数、容量の利用率、マウントポイントが表示されています。

$ df -k
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/dsk/c0t3d0s0      30991   15812   12089    57%    /
/dev/dsk/c0t3d0s6     185303  164946    1827    99%    /usr
/proc                      0       0       0     0%    /proc
fd                         0       0       0     0%    /dev/fd
/dev/dsk/c0t3d0s7      19095   13739    3456    80%    /export/home
/dev/dsk/c0t3d0s3      34599       9   31140     1%    /export/root
/dev/dsk/c0t3d0s4      55511   24609   25352    50%    /export/swap
/dev/dsk/c0t3d0s5      23063   15202    5561    74%    /opt
swap                   29564     976   28588     4%    /tmp
mars:/usr/local      5353093 5135591  163972    97%    /usr/local
$

次の例は、上の例と同じシステムに関する情報を示していますが、表示されているのは UFS ファイルシステムの情報だけです。

$ df -F ufs
/             (/dev/dsk/c0t3d0s0 ):   30358 blocks    14002 files
/usr          (/dev/dsk/c0t3d0s6 ):   40714 blocks    80522 files
/export/home  (/dev/dsk/c0t3d0s7 ):   10712 blocks    10564 files
/export/root  (/dev/dsk/c0t3d0s3 ):   69180 blocks    18812 files
/export/swap  (/dev/dsk/c0t3d0s4 ):   61804 blocks    29563 files
/opt          (/dev/dsk/c0t3d0s5 ):   15722 blocks    13147 files
$

注 -

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


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

$ df -t
/             (/dev/dsk/c0t3d0s0 ):    30358 blocks    14002 files
                             total:    61982 blocks    16128 files
/usr          (/dev/dsk/c0t3d0s6 ):    40714 blocks    80522 files
                             total:   370606 blocks    94080 files
/proc         (/proc             ):        0 blocks      429 files
                             total:        0 blocks      492 files
/dev/fd       (fd                ):        0 blocks        0 files
                             total:        0 blocks       26 files
/export/home  (/dev/dsk/c0t3d0s7 ):    10712 blocks    10564 files
                             total:    38190 blocks    10752 files
/export/root  (/dev/dsk/c0t3d0s3 ):    69180 blocks    18812 files
                             total:    69198 blocks    18816 files
/export/swap  (/dev/dsk/c0t3d0s4 ):    61804 blocks    29563 files
                             total:   111022 blocks    29568 files
/opt          (/dev/dsk/c0t3d0s5 ):    15722 blocks    13147 files
                             total:    46126 blocks    13440 files
/tmp          (swap              ):    57144 blocks     5653 files
                             total:    59096 blocks     5768 files
/usr/local    (mars:/usr/local   ):   435008 blocks       -1 files
                             total: 10706186 blocks       -1 files
$

ファイルサイズの確認

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

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

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

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

    $ ls [-l] [-s]

    -l

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

    -s

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

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

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

venus% cd /var/adm
venus% ls -l
total 434
-r--r--r--   1 root     other     585872 Jan 28 14:53 lastlog
drwxrwxr-x   2 adm      adm          512 Dec  1 16:35 log
-rw-r--r--   1 root     other        408 Jan 28 14:15 messages
-rw-r--r--   1 root     other        177 Jan 24 16:56 messages.0
-rw-r--r--   1 root     other        177 Jan 17 16:13 messages.1
-rw-r--r--   1 root     other          0 Jan  4 04:05 messages.2
-rw-r--r--   1 root     other        562 Jan  2 13:13 messages.3
drwxrwxr-x   2 adm      adm          512 Dec  1 16:35 passwd
drwxrwxr-x   2 adm      sys          512 Jan 28 11:38 sa
-rw-rw-rw-   1 bin      bin            0 Nov 26 10:56 spellhist
-rw-------   1 root     root        1319 Jan 28 14:58 sulog
-rw-r--r--   1 root     bin          288 Jan 28 14:53 utmp
-rw-r--r--   1 root     bin         2976 Jan 28 14:53 utmpx
-rw-rw-r--   1 adm      adm        12168 Jan 28 14:53 wtmp
-rw-rw-r--   1 adm      adm       125736 Jan 28 14:53 wtmpx

次の例は、lpsched-2 が 2 ブロックを使用していることを示します。

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

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

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

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

    $ ls -s | sort -nr | more
    

    sort -nr

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

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

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

$ cd /var/adm
$ ls -s | sort -nr | more
 320 wtmpx
 128 lastlog
  74 pacct
  56 messages
  30 wtmp
   6 utmpx
   2 utmp
   2 sulog
   2 sa
   2 passwd
   2 log
   0 spellhist
total 624

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

次のように 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(1M)quot(1M) のマニュアルページを参照してください。

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

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

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

du

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

-a

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

-s

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

directory ...

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

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

次の例は、2 つのディレクトリとそれらのすべてのサブディレクトリのサイズを表示します。

$ du /var/log /var/cron
4       /var/log
3250    /var/cron

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

$ du -a /var/log /var/cron
0       /var/log/authlog
0       /var/log/syslog
2       /var/log/sysidconfig.log
4       /var/log
3248    /var/cron/log
3250    /var/cron

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

$ du -s /var/log /var/cron
4      /var/log
3250   /var/cron

ローカル UFS ファイルシステムのユーザー割り当てを表示する方法

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

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

    # quot [-a] [filesystem]

    -a

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

    filesystem

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


    注 -

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


例 - ローカル UFS ファイルシステムのユーザー割り当てを表示する

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

# quot /
/dev/rdsk/c0t0d0s0:
35400   bin
  183   adm
   49   lp
   47   uucp
   37   bob
   28   sys
    2   mary
# quot -a
/dev/rdsk/c0t0d0s0 (/):
35400   bin
  183   adm
   49   lp
   47   uucp
   37   bob
   28   sys
    2   mary
/dev/rdsk/c0t0d0s6 (/usr):
56567   bin
 2000   lp
  698   uucp
    1   adm
/dev/rdsk/c0t0d0s7 (/export/home):
  617   ken

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

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

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

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

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

$ ls -t [directory]

-t

最新タイムスタンプをリストの最初としてソートする 

directory

ファイルを探したいディレクトリ 

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

次の例は、ls -t をどのように使用して /var/adm ディレクトリ内の最新のファイルを見つけるかを示しています。sulogmessagesutmpxwtmpxutmplastlog が最も最近に作成または変更されたファイルです。これは、ls -l からの出力を使用して確認できます。この出力では、それら 6 つのファイルは 3 月に作成または変更されているのに対して、/var/spool 内のその他のファイルは 3 月よりも前に作成または変更されています。

$ ls -t /var/adm
sulog      wtmpx        wtmp        messages.1  vold.log   spellhist
messages   utmp         sa          messages.2  log        aculog
utmpx      lastlog      messages.0  messages.3  acct       passwd
$ ls -l /var/adm
total 686
drwxr-xr-x  5 adm       adm         512 Feb 13 16:20 acct
-rw-------  1 uucp      bin           0 Feb 13 16:04 aculog
-r--r--r--  1 root      other      8456 Mar 27 10:34 lastlog
drwxr-xr-x  2 adm       adm         512 Feb 13 16:36 log
-rw-r--r--  1 root      other    117376 Mar 27 13:11 messages
-rw-r--r--  1 root      other      4620 Jan 30 08:30 messages.0
-rw-r--r--  1 root      other     11176 Jan 23 04:30 messages.1
-rw-r--r--  1 root      other        60 Jan 13 09:45 messages.2
-rw-r--r--  1 root      other         0 Jan 31 04:05 messages.3
drwxr-xr-x  2 adm       adm         512 Feb 13 16:03 passwd
drwxr-xr-x  2 adm       sys         512 Mar 20 06:59 sa
-rw-rw-rw-  1 bin       bin           0 Feb 13 16:04 spellhist
-rw-------  1 root      root       1647 Mar 27 13:28 sulog
-rw-r--r--  1 root      bin         504 Mar 27 10:34 utmp
-rw-r--r--  1 root      bin        5208 Mar 27 10:34 utmpx
-rw-rw-rw-  1 root      root        500 Jan 11 14:40 vold.log
-rw-rw-r--  1 adm       adm       14724 Mar 27 10:34 wtmp
-rw-rw-r--  1 adm       adm      151404 Mar 27 10:34 wtmpx

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

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

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

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

    directory

    ファイルを調べたいディレクトリ。この下のディレクトリも調べられる 

    -atime +nnn

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

    -mtime +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/log/asppp.log
/var/adm/aculog
/var/adm/spellhist
/var/adm/wtmp
/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. 次のように入力して、/var/tmp ディレクトリに移動します。

    # cd /var/tmp
    

    注意 - 注意 -

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


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

    # rm -r *
    
  4. 一時サブディレクトリやファイル、または古いサブディレクトリやファイル (たとえば、maillost+foundquotas など) が入っている他のディレクトリに変更し、上の手順 3 を繰り返してそれらを削除します。

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

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

# cd /var/tmp
# ls
deadfiles           wxconAAAa0003r:0.0  wxconAAAa000NA:0.0
test_dir            wxconAAAa0003u:0.0  wxconAAAa000cc:0.0 
wxconAAAa000zs:0.0
# 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. クラッシュダンプファイルを削除します。

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

    # ls
    

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

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

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