Linux ディスク領域解放問題の概要

Linux ディスク領域解放問題の概要

IDC のサーバーの /partition 使用率がいっぱいです。 100% に到達しました!確認したところ、1 つのファイルが大きすぎる (80G) ことがわかったので、関係する同僚に確認した後、rm -f を使用してファイルを思い切って削除しました。しかし、ファイルを削除した後、/ パーティションのディスク領域がまったく解放されず、使用率がまだ 100% のままであることがわかりました。これはなぜでしょうか? ?

[root@linux-node1 ~]# df -hファイルシステム サイズ 使用済み 空き 使用率 マウント先/dev/mapper/VolGroup00-LogVol00 58G 7.8G 47G 100% /tmpfs 1.9G 0 1.9G 0% /dev/shm/dev/vda1 190M 72M 108M 40% /boot

原因分析

Linux システムでは、rm またはファイル マネージャーを使用してファイルを削除すると、ファイル システムのディレクトリ構造からのリンクが解除されるだけです。つまり、ファイルとシステム ディレクトリ構造間のリンクのみが削除されます。ファイルが削除されるときにファイルが開いている場合 (プロセスがファイルを使用している、プロセスがファイルをロックしている、プロセスがファイルにデータを書き込んでいるなど)、プロセスは引き続きファイルを読み取ることができます。つまり、ファイルは削除されません。読み取り状態であるため、ディスク領域は常に占有されます。

ファイルは、データ部分とポインタ部分の 2 つの部分でファイルシステムに保存されます。ポインタは、ファイルシステムのメタデータにあります。データが削除されると、ポインタはメタデータからクリアされ、データ部分はディスクに保存されます。データに対応するポインタがメタデータからクリアされると、ファイルデータ部分が占めていたスペースを上書きして、新しいコンテンツを書き込むことができます。ファイルが削除された後もスペースが解放されないのは、ファイルにコンテンツを書き込んでいるプロセスがまだあるためです。その結果、ファイルは削除されても、プロセスがロックされているため、ファイルに対応するポインタ部分はメタデータからクリアされません。ポインタが削除されないため、システムカーネルはファイルが削除されていないと認識します。したがって、df コマンドで照会したときにスペースが解放されていないのは当然のことです。

解決策はいくつかあります:

1. lsof|grep removed コマンドを使用して、削除されたがアプリケーションによってまだ使用されているファイルのリストを取得し、削除されたファイルをまだ使用しているプロセスを強制終了します。削除されたファイルを使用しているプロセスが多数ある場合、最初の方法を使用してプロセスを強制終了するのは少し面倒でリスクがあることに注意してください。 kill プロセスは proc ファイル システム内のファイルを切り捨てるため、使用中の割り当てられたファイルをシステムに強制的に再利用させることができます。使用する前に、実行中のプロセスに影響がないことを確認する必要があります。アプリケーションはこの方法を十分にサポートしていません。使用中のファイルが切り捨てられると、予期しない問題が発生する可能性があります。

2. 削除されたファイルを使用するアプリケーションを停止または再起動して、OS が自動的にディスク領域を再利用できるようにします。

3. オペレーティング システムを再起動することもできますが、これは最善の方法ではありません。4. ファイルにログを書き込み続けるこのようなプロセスの場合、ファイルが占有しているディスク領域を解放する最善の方法は、ファイルをオンラインでクリアすることです。この方法では、ディスク領域をすぐに解放できるだけでなく、プロセスはファイルにログを書き込み続けることもできます。

オンラインでファイルを消去する方法(/home/wangshibo.log など):

# echo " " > /home/wangshibo.logb)# cat /dev/null > /home/wangshibo.logc)# > /home/wangshibo.log

ディスク領域の使用率の問題には、別の現象もあります。df -h コマンドで確認すると、ディスク領域の使用率は高くなく、空き領域がまだたくさんあります。しかし、ファイルを作成したりデータを書き込んだりすると、ディスクがいっぱいであることを示すエラー メッセージが表示されます: 「デバイスに空き領域がありません」!

通常、この問題は、パーティション ディレクトリ内のリソース スペースが削除された後も実際には解放されないために発生します。具体的な処理フローは次のとおりです。

1. まず、df -lh を実行してディスクの使用状況を確認します。/data パーティションの下の使用済み領域が非常に大きいことがわかりますが、実際にはそれほど多くの領域を占有しているわけではありません。 2. /data パーティションなど、削除されたファイルが配置されているパーティションを見つけます。 3. 削除されたすべてのファイルを確認します: lsof -n /data |grep removed 4. これらのファイルの削除プロセスを強制終了して、領域を解放します: lsof -n /data |grep removed|awk '{print $2}'|xargs kill -95。 次に、lsof -n /data |grep delete を再度実行すると、結果がなくなるはずです。 6. 注意: 削除されたプロセスを強制終了する場合は、df -h を使用して /data パーティションを確認してください。使用済みスペースが一時的に大きすぎる場合がありますが、削除されたプロセスが強制終了されると、リソースが徐々に解放され、/data パーティションの下の使用済みスペースが徐々に減少し、使用可能スペースが徐々に増加します。

ほとんどのファイル システムでは、緊急時 (たとえば、ハード ディスクがいっぱいになったとき) に備えて、いくらかのスペースが確保されています。これにより、ハード ディスクがいっぱいになったときに、一部の重要なアプリケーション (データベースなど) にいくらかのスペースが確保され、アプリケーションがすぐにクラッシュすることがなくなり、監視システムと管理者が気づく時間ができます。ただし、この予約済みのハードディスク領域は、使用されない場合は少し無駄になることがあります。

Linux システムでは、ext2、ext3、ext4 ファイル システムでは通常、ディスク領域の 5% がデフォルトで予約されています。たとえば、ディスクが 2TB の場合、100GB の領域が予約されることになります。これは少し無駄に思えませんか?デフォルト設定の 5% は、「tune2fs」コマンドを使用して、たとえば 2% のスペースのみを予約するように変更できます。ただし、実際の環境では安全ではないため、0% に設定することはお勧めしません。

#DF -TFILESSTEM TYPE 1K -BLOCKS使用可能な使用%dev /vda1 ext4 41151808 4962148 34076228 13% /devtmpfs devtmpfs 41204 652 1940552 1%/runtmpfs tmpfs 1941204 0 1941204 0%/sys/fs/cgrouptmpfs tmpfs 388244 0 % /devtmpfs 1.9g 0 1.9g 0% /devtmpfs 1.9g 0 1.9g 0% /dev /shmtmpfs 1.9g 620k 1.9g 1% /runtmpfs 1.9g 0 1.9g 0% /sys /fs /cgrouptmpfs 380m 0

たとえば、上記の「/」パーティションは ext4 ファイル システムであり、デフォルトのシステムでは 5%、つまり 2G のスペースが予約されています。これで、「tune2fs」コマンドを使用して、システム予約領域を 2% に変更できます。

# tune2fs -m 2 /dev/vda1tune2fs 1.42.9 (2013 年 12 月 28 日)予約ブロックの割合を 2% (209704 ブロック) に設定

実行後、「/」パーティションで 1G のスペースが解放され、システム予約スペースが 2% になったことがわかります。

/dev/shmtmpfs 1.9g 620k 1.9g 1%/runtmpfs 1.9g 0 1.9g 0%/sys/fs/cgrouptmpfs 380m 0 380m 0%/user/0 [root@ssstiserver〜]#df -hfilesems size 1.9g 0% /devtmpfs 1.9g 0 1.9g 0% /dev /shmtmpfs 1.9g 620k 1.9g 1% /runtmpfs 1.9g 0 1.9g 0% /sys /fs /cgrouptmpfs 380m 0 380m 0% /run /user /0

Linux ディスク容量解放に関するこの記事はこれで終わりです。Linux ディスク容量解放に関する詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  統計量に対するmySql SQLクエリ操作

>>:  CSSでカスタムフォント(font-face)を導入する方法の詳細な説明

推薦する

MySQL 5.7.10 インストール ドキュメント チュートリアル

1. 依存パッケージをインストールする yum -y インストール gcc-c++ ncurses-...

Vueコンポーネントの7つの通信方法についての深い理解

目次1. props/$emit導入コードサンプル2.Vスロット導入コードサンプル3.$refs/ ...

Vue ルーティングフォールバックに最適なソリューション (vue-route-manager)

目次ルーティングマネージャー背景はじめる問題を解決する方法要約するルーティングマネージャー各ジャンプ...

Vueデータ割り当て問題の解決

私が長い間遭遇してきた問題を要約してみましょう。プロジェクトでは、フロントエンドをレンダリングするた...

WIN10 に複数のデータベースがインストールされている場合にコンピュータの速度低下を防ぐ方法

必要なときにサービスを有効にし、必要がないときは無効にします。データベース サービスを管理する方法:...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

知らないかもしれない実用的なTypeScriptのヒント

目次序文関数のオーバーロードマッピングタイプ部分的、読み取り専用、Null 可能、必須選択、記録除外...

HTMLの表のtbodyは上下左右にスライドできます

テーブル ヘッダーが固定されている場合は、それを 2 つのテーブルに分割する必要があります。1 つの...

iptables および firewalld ツールを使用して Linux ファイアウォール接続ルールを管理する

ファイアウォールファイアウォールは一連のルールです。パケットが保護されたネットワーク空間に出入りする...

MySQLインデックスを追加する3つの原則を簡単に理解する

1. インデックスの重要性インデックスは、列に特定の値を持つ行をすばやく見つけるために使用されます。...

docker ベースの redis-sentinel クラスターの構築例

1. 概要Redis Cluster は、Redis ノードのグループ間での高可用性とシャーディング...

フロントエンドの状態管理(パート2)

目次1. 再出発1.1. ストア(司書) 1.2. 状態(書籍) 1.3. アクション(図書貸出リス...

Redhat 8.0 システムのインストール方法に関するグラフィック チュートリアル (初心者には必須)

目次1. はじめに2. インストール01. 新しい仮想マシンを作成する02. システムをインストール...

JS のオブジェクトリテラルの詳細な説明

目次序文1. オブジェクト構築にプロトタイプを設定する1.1 __proto__ の使用における特殊...

MySql クライアントが数秒で終了する問題を解決する (my.ini が見つからない)

問題の説明 (環境: windows7、MySql8.0)今日、MySql をインストールした後、M...