CentOSは、ファイルを削除した後、スペースを解放しません

サーバーのホームスペースがいっぱいで、不要なファイルをクリアする必要があることがわかりましたが、ファイルを削除した後、使用可能なスペースが変更されていないことがわかりました。
os:centos6.0

現象:

現在のディスクスペース使用量が見つかりました:

[ root@ticketb ~]# df -h
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/sda1             981M  203M  729M  22% /
 none                   16G     0   16G   0%/dev/shm
 /dev/sda9             2.9G   37M  2.7G   2%/tmp
 /dev/sda7             4.9G  1.9G  2.7G  42%/usr
 /dev/sda8             2.9G  145M  2.6G   6%/var/dev/mapper/vghome-lvhome
      20 G   19G   11M 100%/home
 /dev/mapper/vgoradata-lvoradata
      144 G   48G   90G  35%/u01/oradata
 /dev/mapper/vgbackup-lvbackup
      193 G  7.8G  175G   5%/u01/backup

次のコマンドを使用して不要なファイルを見つけてから削除します

[ root@ticketb ~]# find /home/oracle/admin/dbticb/udump/ -name "dbticb_*.trc" -mtime +50 | xargs rm -rf

その後、ディスクスペースの使用状況を確認した後、/ homeスペースに変更はありません。

[ root@ticketb ~]# df -h
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/sda1             981M  203M  729M  22% /
 none                   16G     0   16G   0%/dev/shm
 /dev/sda9             2.9G   37M  2.7G   2%/tmp
 /dev/sda7             4.9G  1.9G  2.7G  42%/usr
 /dev/sda8             2.9G  145M  2.6G   6%/var/dev/mapper/vghome-lvhome
      20 G   19G   11M 100%/home
 /dev/mapper/vgoradata-lvoradata
      144 G   48G   90G  35%/u01/oradata
 /dev/mapper/vgbackup-lvbackup
      193 G  7.8G  175G   5%/u01/backup

これは気のめいるようです。ファイルを削除しました。スペースが解放されなかった理由です。rmコマンドを直接削除する必要があります。/homeの下で占有されているスペースを確認してください。

[ root@ticketb ~]# du -h --max-depth=1/home
 16 K     /home/lost+found
 2.6 G    /home/oracle
 2.6 G    /home

しかし、ここの表示スペースは解放されているので、グーグルの下で、

ディスクスペースを解放しない理由:

LinuxまたはUnixシステムでは、rmまたはファイルマネージャーを使用してファイルを削除すると、ファイルシステムのディレクトリ構造からリンクが解除(リンク解除)されます。ただし、ファイルが
開くと(使用中のプロセスがあります)、プロセスは引き続きファイルを読み取ることができ、ディスク領域は常に占有されます。そして私が削除したのはオラクルアラームログファイルです
ファイルは削除時に使用されている必要があります

解決

最初に、以下に示すように、削除されたがアプリケーションによって占有されているファイルのリストを取得します。

[ root@ticketb ~]# lsof |grep deleted
 oracle    12639  oracle    5w      REG              253,0648215907/home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc(deleted)
 oracle    12639  oracle    6w      REG              253,016749822091215748/home/oracle/admin/dbticb/bdump/alert_dbticb.log(deleted)
 oracle    12639  oracle    7u      REG              253,0036282/home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb(deleted)
 oracle    12639  oracle    8w      REG              253,016749822091215748/home/oracle/admin/dbticb/bdump/alert_dbticb.log(deleted)
 oracle    12641  oracle    5w      REG              253,0648215907/home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc(deleted)
 oracle    12641  oracle    6w      REG              253,016749822091215748/home/oracle/admin/dbticb/bdump/alert_dbticb.log(deleted)
 。
 。
 oracle    23492  oracle    6w      REG              253,016749822091215748/home/oracle/admin/dbticb/bdump/alert_dbticb.log(deleted)
 oracle    23492  oracle    7u      REG              253,0036282/home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb(deleted)
 oracle    23492  oracle    8w      REG              253,016749822091215748/home/oracle/admin/dbticb/bdump/alert_dbticb.log(deleted)
 oracle    23494  oracle   10u      REG              253,0036307/home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstrmandb(deleted)

出力から、/ home / oracle / admin / dbticb / bdump / alert_dbticb.logがまだ使用されており、スペースが解放されていないことがわかります。

プロセスを解放する方法は?

1つの方法は、対応するプロセスを強制終了するか、このファイルを使用するアプリケーションを停止して、osにディスクスペースを自動的に再利用させることです。

このファイルは私の環境の多くのプロセスで使用されています。プロセスを停止するのは少し面倒で、非常に危険です。

linuxがファイルを開くと、Linuxカーネルは/ proc / "/ proc / nnnn / fd /ディレクトリ(nnnnはpid)"にプロセスごとにpidを作成します。
名前付きディレクトリは、プロセスに関する情報を格納するために使用され、そのサブディレクトリfdは、プロセスによって開かれたすべてのファイルのfd(fd:ファイル記述子)を格納します。

強制終了プロセスでは、procファイルシステム内のファイルを切り捨てることにより、システムに使用用に割り当てられたファイルを再利用させることができます。
これは高度な手法であり、管理者が実行中のプロセスに影響を与えないと確信している場合にのみ使用されます。これへの適用
サポートが良くない使用中のファイルが切り捨てられると、予期しない問題が発生する可能性があります

だから私はまだ停止アプリケーションを使用して解決します

oracleデータベースを再起動し、/ home / oracle / admin / dbticb / bdump /alert_dbticb.logに対応するスペースが解放されていることを確認します

ディスクスペースの使用状況を確認したところ、スペースが再利用されていることがわかりました

[ root@ticketb ~]# df -h
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/sda1             981M  203M  729M  22% /
 none                   16G     0   16G   0%/dev/shm
 /dev/sda9             2.9G   37M  2.7G   2%/tmp
 /dev/sda7             4.9G  1.9G  2.7G  42%/usr
 /dev/sda8             2.9G  145M  2.6G   6%/var/dev/mapper/vghome-lvhome
      20 G  2.6G   16G  15%/home
 /dev/mapper/vgoradata-lvoradata
      144 G   48G   90G  35%/u01/oradata
 /dev/mapper/vgbackup-lvbackup
      193 G  7.8G  175G   5%/u01/backup

わかりました、問題は解決されてから、仕上げ作業を行います


lsofコマンドを学ぶ

lsofのフルネームは、開いているファイルのリストです。これは、システムで開かれているファイルをリストするためのものです。 Linux環境では、すべてがファイルであることは誰もが知っています。
デバイスはファイルであり、ディレクトリはファイルであり、ソケットでさえファイルです。したがって、lsofコマンドは日常のLinux管理に非常に役立ちます。

lsofはLinuxで最も一般的に使用されるコマンドの1つであり、通常の出力形式は次のとおりです。

見積もり
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

通常、次のフィールドを含めます。より見やすいマニュアル。

1、 COMMAND
デフォルトで表示されるコマンド名。長さは9文字です。 + cパラメータを使用して、表示の幅を指定できます。+ cが後に続くパラメータがゼロの場合、コマンドのフルネームが表示されます。
2、 PID:プロセスのID番号
3、 PPID
親プロセスのIP番号はデフォルトでは表示されません。-Rパラメーターを使用すると開くことができます。
4、 PGID
プロセスグループのID番号はデフォルトでは表示されません。-gパラメータを使用すると開くことができます。
5、 USER
コマンドの実行UIDまたはシステムにログインしているユーザーの名前。デフォルトの表示はユーザー名です。-lパラメーターを使用すると、UIDを表示できます。
6、 FD
ファイルのファイル記述子番号、または次の内容です。
(ここで対応する意味を翻訳することは困難です、英語を維持してください)

 見積もり
 cwd  current working directory;
 Lnn  library references(AIX);
 jld  jail directory(FreeBSD);
 ltx  shared library text(code and data);
 Mxx  hex memory-mapped type number xx.
 m86  DOS Merge mapped file;
 mem  memory-mapped file;
 mmap memory-mapped device;
 pd   parent directory;
 rtd  root directory;
 tr   kernel trace file(OpenBSD);
 txt  program text(code and data);
 v86  VP/ix mapped file;

ファイルのファイル記述子番号の表示モードは次のとおりです。

 見積もり
 r for read access;
 w for write access;
 u for read and write access;
 N for a Solaris NFS lock of unknown type;
 r for read lock on part of the file;
 R for a read lock on the entire file;
 w for a write lock on part of the file;
 W for a write lock on the entire file;
 u for a read and write lock of any length;
 U for a lock of unknown type;
 x for an SCO OpenServer Xenix lock on part  of the file;
 X  for an SCO OpenServer Xenix lock on the entire file;
 space if there is no lock.

7、 TYPE

見積もり
IPv4IPv4パッケージ;
IPv6はIPv6形式のパケットを使用します。アドレスがIPv4の場合でも、IPv6として表示され、IPv6アドレスにマップされます。
DIRディレクトリ
LINKリンクファイル

詳細については、マニュアルのその他の注記を参照してください。

8、 DEVICE
文字スペシャルとブロックスペシャルで表されるデバイス番号
9、 SIZE
ファイルのサイズ。サイズで表現できない場合は空白になります。 -sパラメーターを使用して制御します。
10、 NODE
ローカルファイルのノードコード、またはTCPなどのプロトコル。
11、 NAME
マウントポイントとファイルのフルパス(リンクは実際のパスに解決されます)、または接続されているパーティのアドレス、ポート、ステータスなど

一般的な例:

  1. ファイル/home/oracle/10.2.0/db_1/bin/tnslsnrを開くプロセスを表示します
[ root@svr-db-test ~]# lsof /home/oracle/10.2.0/db_1/bin/tnslsnr
 COMMAND  PID   USER  FD   TYPE DEVICE   SIZE     NODE NAME
 tnslsnr 3520 oracle txt    REG  253,543106211408866/home/oracle/10.2.0/db_1/bin/tnslsnr
  1. ポート22で実行されているプログラムを確認する
[ root@svr-db-test ~]# lsof -i :22
 COMMAND  PID USER   FD   TYPE  DEVICE SIZE NODE NAME
 sshd    3101 root    3u  IPv6    8670       TCP *:ssh(LISTEN)
 sshd    4545 root    3u  IPv6 4237972       TCP 203.aibo.com:ssh->win-avbmq9e8ka7.gdgg.local:nsjtp-ctrl(ESTABLISHED)
  1. initによって現在開かれているファイルを表示する
[ root@svr-db-test ~]# lsof -c init
 COMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME
 init      1 root  cwd    DIR  253,040962/
 init      1 root  rtd    DIR  253,040962/
 init      1 root  txt    REG  253,043496524446/sbin/init
 init      1 root  mem    REG  253,0130448917826/lib64/ld-2.5.so
 init      1 root  mem    REG  253,01678480917827/lib64/libc-2.5.so
 init      1 root  mem    REG  253,023520917686/lib64/libdl-2.5.so
 init      1 root  mem    REG  253,0247528917844/lib64/libsepol.so.1
 init      1 root  mem    REG  253,095480917845/lib64/libselinux.so.1
 init      1 root   10u  FIFO   0,162311/dev/initctl
  1. プロセス番号1のプロセスによって開かれたファイルを確認します
[ root@svr-db-test ~]# lsof -p 1
 COMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME
 init      1 root  cwd    DIR  253,040962/
 init      1 root  rtd    DIR  253,040962/
 init      1 root  txt    REG  253,043496524446/sbin/init
 init      1 root  mem    REG  253,0130448917826/lib64/ld-2.5.so
 init      1 root  mem    REG  253,01678480917827/lib64/libc-2.5.so
 init      1 root  mem    REG  253,023520917686/lib64/libdl-2.5.so
 init      1 root  mem    REG  253,0247528917844/lib64/libsepol.so.1
 init      1 root  mem    REG  253,095480917845/lib64/libselinux.so.1
 init      1 root   10u  FIFO   0,162311/dev/initctl
  1. 3520に所属するプロセスを表示します
[ root@svr-db-test ~]# lsof -g 3520
 COMMAND  PID PGID   USER   FD   TYPE             DEVICE      SIZE     NODE NAME
 tnslsnr 35203520 oracle  cwd    DIR              253,5409611059201/home/oracle
 tnslsnr 35203520 oracle  rtd    DIR              253,040962/
 tnslsnr 35203520 oracle  txt    REG              253,543106211408866/home/oracle/10.2.0/db_1/bin/tnslsnr
 tnslsnr 35203520 oracle  mem    REG              253,0130448917826/lib64/ld-2.5.so
 tnslsnr 35203520 oracle  mem    REG              253,01678480917827/lib64/libc-2.5.so
 tnslsnr 35203520 oracle  mem    REG              253,023520917686/lib64/libdl-2.5.so
 tnslsnr 35203520 oracle  mem    REG              253,0615136917834/lib64/libm-2.5.so
 tnslsnr 35203520 oracle  mem    REG              253,0141208917829/lib64/libpthread-2.5.so
 tnslsnr 35203520 oracle  mem    REG              253,0109824917839/lib64/libnsl-2.5.so
 tnslsnr 35203520 oracle  mem    REG              253,52070662211405436/home/oracle/10.2.0/db_1/lib/libclntsh.so.10.1
 tnslsnr 35203520 oracle  mem    REG              253,5380309711410641/home/oracle/10.2.0/db_1/lib/libnnz10.so
 tnslsnr 35203520 oracle  mem    REG              253,58349311407251/home/oracle/10.2.0/db_1/lib/libons.so
 tnslsnr 35203520 oracle  mem    REG              253,053880917532/lib64/libnss_files-2.5.so
 tnslsnr 35203520 oracle  mem    REG              253,5854511407615/home/oracle/10.2.0/db_1/lib/libskgxn2.so
 tnslsnr 35203520 oracle  mem    REG              253,551370511410332/home/oracle/10.2.0/db_1/lib/libocrutl10.so
 tnslsnr 35203520 oracle  mem    REG              253,563616111410330/home/oracle/10.2.0/db_1/lib/libocr10.so
 tnslsnr 35203520 oracle  mem    REG              253,565782511410331/home/oracle/10.2.0/db_1/lib/libocrb10.so
 tnslsnr 35203520 oracle  mem    REG              253,5174576911410365/home/oracle/10.2.0/db_1/lib/libhasgen10.so
 tnslsnr 35203520 oracle  mem    REG              253,56198511410366/home/oracle/10.2.0/db_1/lib/libclsra10.so
 tnslsnr 35203520 oracle    0u   CHR                1,32553/dev/null
 tnslsnr 35203520 oracle    1u   CHR                1,32553/dev/null
 tnslsnr 35203520 oracle    2u   CHR                1,32553/dev/null
 tnslsnr 35203520 oracle    3w   REG              253,531885301211633459/home/oracle/10.2.0/db_1/network/log/listener.log
 tnslsnr 35203520 oracle    4r  FIFO                0,615661 pipe
 tnslsnr 35203520 oracle    5r   REG              253,51177611410579/home/oracle/10.2.0/db_1/network/mesg/nlus.msb
 tnslsnr 35203520 oracle    6r   REG              253,54659211407160/home/oracle/10.2.0/db_1/network/mesg/tnsus.msb
 tnslsnr 35203520 oracle    7w  FIFO                0,615662 pipe
 tnslsnr 35203520 oracle    8u  IPv4              15665                TCP 203.aibo.com:ncube-lm(LISTEN)
 tnslsnr 35203520 oracle    9u  unix 0xffff81021b7d698015666/var/tmp/.oracle/s#3520.1
 tnslsnr 35203520 oracle   10u  unix 0xffff81021b7d66c015668/var/tmp/.oracle/s#3520.2
  1. / home / oracleフォルダーに従って検索しますが、プロセスによって開かれたディレクトリ内のファイルを表示するために使用されるサブディレクトリは開きません。
[ root@svr-db-test ~]# lsof +d /home/oracle
 COMMAND  PID   USER   FD   TYPE DEVICE SIZE     NODE NAME
 tnslsnr 3520 oracle  cwd    DIR  253,5409611059201/home/oracle
  1. / home / oracleフォルダーを開き、そのサブディレクトリを検索して、プロセスによって開かれたファイルをディレクトリに表示します。
[ root@svr-db-test ~]# lsof +D /home/oracle
  1. lsof -iは、プロセスの状態を表示するために使用されます

構文:lsof -i [46] [protocol] [@ hostname | hostaddr] [:service | port]

46 - - > IPv4 or IPv6

protocol --> TCP or UDP

hostname --> Internet host name

hostaddr-> IPv4の場所

service-> / etc / service内のサービス名(複数の場合があります)

ポート->ポート番号(複数の可能性があります)

例:

[ root@svr-db-test ~]# lsof -i [email protected]:1521-n
 COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
 oracle  15633 oracle   16u  IPv4 4069605       TCP 192.168.2.203:31580->192.168.2.245:ncube-lm(ESTABLISHED)

または

[ root@svr-db-test ~]# lsof -i [email protected]:1521 
 COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
 oracle  15633 oracle   16u  IPv4 4069605       TCP 203.aibo.com:31580->192.168.2.245:ncube-lm(ESTABLISHED)

lsof -nはIPをホスト名に変換しません。デフォルトでは、-nパラメーターは追加されません

  1. ユーザーの開いているファイル(またはユーザーがプログラムの実行によって開いたファイル)を表示します
[ root@svr-db-test ~]# lsof -u oracle
または
 [ root@svr-db-test ~]# lsof -u 0
  1. プロセスを印刷するだけで、シェルスクリプトの呼び出しに便利です

[ root@svr-db-test ~]# lsof -tc sshd
3101
4545

注意:

プロセスデバッグコマンド:truss、strace、ltrace

プロセスを開始できない、ソフトウェアの実行速度が突然遅くなる、プログラムの「SegmentFault」などはすべてUnixシステムユーザーにとって頭痛の種です。これらの問題は、truss、strace、ltraceの3つの一般的なデバッグツールを使用することで解決できます。ソフトウェアの「難治性疾患」を迅速に診断します。

Recommended Posts

CentOSは、ファイルを削除した後、スペースを解放しません