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グローバルカスタム命令の実践 モーダルドラッグ

目次背景実装のアイデア成果を達成する背景最近取り組んでいるプロジェクトは、Vue2 で構築されたプロ...

Linux での syslogd および syslog.conf ファイルの解釈

1: syslog.conf の概要異なるタイプの Unix の場合、標準の UnixLog システ...

モバイル アプリのユーザー インターフェース設計に関する 10 のヒント

ヒント1: 集中力を保つ最高のモバイル アプリは、1 つのことを非常にうまく行うことに重点を置いてい...

LinuxにMySQLをインストールし、外部ネットワークアクセスを構成する例

設定手順1. DNSが設定されているかどうかを確認するDNSが設定されていない場合は、前の記事を参照...

クラウド サーバーを使用して CentOS システムに .NET 6.0 をインストールする

.NET SDK ダウンロード リンクhttps://dotnet.microsoft.com/do...

MySQL で結合を使用して SQL を最適化する方法の詳細な説明

0. 以下のテストに関連する表を準備する関連するテーブル作成ステートメントについては、https:/...

Linux シェル環境での Zabbix API の使用

Linux シェル環境で直接呼び出すことができます。公式 Web サイトによると、Zabbix のデ...

Idea で Tomcat のソースコードデバッグを開始し、デバッグのために Tomcat に入る方法

idea 開発ツールを使用してコードをデバッグする場合、Java Web プロジェクトで、Web コ...

LeetCode の SQL 実装 (196. 重複するメールボックスを削除する)

[LeetCode] 196.重複したメールを削除するSQL クエリを記述して、Person とい...

Apache、Tomcat、Nginx サーバーの詳細な理解と比較分析

質問1件会社のサーバーはApacheを使用しており、バックエンドはPHP、サーバーはLinux C/...

Linux で複数の mysql5.7.19 (tar.gz) ファイルをインストールする方法

LinuxでのMySQL-5.7.19バージョンの初心者向けの最初のインストールについては、前の記事...

HTML ページ出力で従うべきいくつかの原則の要約

1. DOCTYPE は必須です。ブラウザは宣言した DOCTYPE に基づいてページのレンダリング...

MySQL における ${param} と #{param} の違い

${param}によって渡されるパラメータは、テーブル名やフィールド名を渡すなど、SQL文の一部と...

Vue における ref と $refs の紹介と使用例

序文JavaScript では、document.querySelector("#demo...

MySQL でのワイルドカードを使用したファジークエリの実装に関する簡単な説明

MySQL データベースでは、あいまいクエリが必要な場合にワイルドカードを使用します。まず、演算子と...