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)を導入する方法の詳細な説明

推薦する

Vueドロップダウンメニューのコンポーネント開発の詳細説明

この記事の例では、Vueドロップダウンメニューのコンポーネント開発の具体的なコードを参考までに共有し...

MySQL 8.x msi バージョンのインストール チュートリアル (画像とテキスト付き)

1. MySQLをダウンロードする公式サイトのダウンロードアドレス https://dev.mys...

HTMLテキストの一般的なイベントとメソッドの詳細な説明

イベントの説明onactivate: オブジェクトがアクティブ要素として設定されたときに発生します。...

SQL Server の完全バックアップに関する珍しいエラーと解決策

1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...

CentOS7環境にMySQL5.5データベースをインストールする

目次1. 現在のシステムにMySQLがインストールされているかどうかを確認する2. インストールされ...

Tomcat で JNDI データ ソースを構成する 3 つの方法

これまでの仕事では、開発サーバーは一般的にTomcatでした。データソースは、多くの場合、appli...

MySQL ストアド プロシージャの原理と使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...

React.Childrenの詳しい使い方

目次1. React.Children.map 2. React.Children.forEach ...

全文検索とキーワードスコアリング方式のMySQL実装例

1. はじめに今日、同僚から、MySQL を使用して ElasticSearch に似た全文検索機能...

jsはCanvasを使用して複数の画像を1つの実装コードにマージします

解決 関数 mergeImgs(リスト) { const imgDom = document.cre...

MySQL 5.7.18 アーカイブ圧縮版のインストールチュートリアル

この記事では、MySQL 5.7.18アーカイブ圧縮版をインストールする具体的な方法を参考までに紹介...

iframeノードの初期化の問題に関する議論

今日、ふとリッチテキストエディタの制作原理を見直してみようと思いました。それで、彼は何も言わずにそれ...

ウェブデザイナーが注意すべき 43 のウェブデザインの間違い

これはウェブサイトのユーザビリティに関する記事です。著者は自身の経験に基づいて、ウェブサイトのデザイ...

MySQL の簡単な分析 - MVCC

バージョンチェーンInnoDB エンジン テーブルでは、クラスター化インデックス レコードに 2 つ...