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

推薦する

Webpack パッケージング CSS 背景画像パスの問題に対する完璧なソリューション

vue コンポーネントのスタイル タグ内には、背景画像を使用する次の CSS コードがあります。 背...

ゲームの Node.JS バージョンを作成する方法

目次概要ビルドプロセス関連APIリードライン基本的な使い方チョーククリア手順に関する追加情報完全なコ...

docker redis5.0 clusterの実装 クラスタ構築

システム環境: Ubuntu 16.04LTSこの記事では、6 つの Docker コンテナを使用し...

MySQL マルチインスタンス構成ソリューション

1.1 MySQL マルチインスタンスとは何ですか?簡単に言うと、MySQL マルチインスタンスとは...

VMware15 の Deepin インストール詳細チュートリアル (画像とテキスト)

序文Deepin のユーザー インターフェイスは、使用時に非常に見栄えがします。インターフェイス効果...

Firefox で Webdings フォントをサポートする方法

Firefox、Opera、その他のブラウザは Webdings フォントをサポートしていません。回...

Linux システムのデュアル ネットワーク カード バインディング構成の実装

システムバージョン [root@ ~]# cat /etc/redhat-release CentO...

MySQL データの集約とグループ化

多くの場合、データを実際に取得せずに要約する必要があり、 MySQLこの目的のために特別な関数を提供...

VueプロジェクトでReactを書く方法の詳細

jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...

dockerエラーの原因分析 終了しました (1) 4分前

Dockerエラー1. 原因を確認するdocker ログ ネクサス2. エラーの原因OpenJDK ...

Docker で Node プロジェクトをビルドしてデプロイする方法

目次DockerとはクライアントサイドDocker基本的なDocker操作画像名画像をプルするその他...

MySQL はリレーショナルデータベースですか?

MySQL はリレーショナル データベース管理システムです。リレーショナル データベースは、すべて...

ブラウザタブの左端に表示されるウェブサイトのアイコンを設定します

この文の目的は何ですか?コードをコピーコードは次のとおりです。 <link rel="...

大規模なMySQLデータベース用のマスタースレーブシステムを構築するアイデアを共有する

今週は戦争のように忙しかったです。他人に操られているような気がします。毎日朝早く出勤して夜遅く帰り、...

Docker コンテナのタイムゾーン エラーの問題

目次背景質問問題分析と解決策新たな問題問題分析と解決策背景node-schedule スケジュール ...