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統計テーブルのサイズを説明する例

各データベース内の各テーブルのサイズをカウントすることは、データ ガバナンスの最も単純な要件の 1 ...

CentOS8 でローカル yum ソースを構成するための詳細なチュートリアル

centos8 ディストリビューションは、BaseOS および AppStream リポジトリを通じ...

js での typeof の使い方を理解するための記事

目次ベース戻り値の型文字列とブール値数値とbigintシンボル未定義関数物体他のよくある質問参照エラ...

Mac 向け MySQL のインストールと設定のチュートリアル

この記事では、MacでのMySQLインストールチュートリアルを参考までに紹介します。具体的な内容は次...

Vue は携帯電話の認証コードによるログインを実装します

この記事では、携帯電話認証コードログインを実装するためのVueの具体的なコードを参考までに共有します...

MySQL のロック待機とデッドロック問題の分析

目次序文: 1. ロック待機とデッドロックを理解する2. 現象の再発と治療要約:序文: MySQL ...

MySQL の DOS ウィンドウの文字化け問題を解決する方法

文字化けしたコードの問題は次のとおりです。 この問題の原因は非常に単純です。コマンドラインのエンコー...

フラッシュコンテンツの表示に使用される OBJECT タグと EMBED タグの違いの紹介

1. はじめに:ウェブページにフラッシュ コンテンツを正常に表示したい場合は、ページ上のフラッシュ ...

iframeを指すaタグのターゲットの名前とIDの違い

コードをコピーコードは次のとおりです。 <iframe id="myFrameId&...

Dockerカスタムネットワーク実装

目次1. コンテナ相互接続を実現するためにネットワークをカスタマイズする2. ネットワーク接続1. ...

JS ES 新機能テンプレート文字列

目次1. テンプレート文字列とは何ですか? 2. 複数行のテンプレート文字列2.1 式付きテンプレー...

Vueは秒殺しのカウントダウンコンポーネントを実装する

この記事では、2番目のキルカウントダウンコンポーネントを実装するためのVueの具体的なコードを参考ま...

MySQL における 8 つの一般的な SQL 使用例

序文MySQL は、2016 年もデータベースの人気において力強い成長傾向を維持し続けました。 My...

フォーム送信時に追加のパラメータを渡すためのいくつかの一般的な方法

フォームを送信するときに、送信前に追加のパラメータが追加される状況が発生する場合があります。この問題...

MySQL 5.5.56 インストール不要版の設定方法

MySQL 5.5.56無料インストール版の設定方法をテキストコードで詳しく説明します。具体的な内容...