ホームページ システムチュートリアル Linux Linux ファイル システムの仕組み: インデックス ノードとディレクトリ エントリ内のすべてがファイルです

Linux ファイル システムの仕組み: インデックス ノードとディレクトリ エントリ内のすべてがファイルです

Apr 03, 2024 am 09:16 AM
linux python 標準ライブラリ

Linux ファイル システムの仕組みインデックス ノードとディレクトリ エントリ

Linux ではすべてがファイルです。通常のファイル、ディレクトリ、ブロック デバイス、ソケット、パイプも、統一されたファイル システムを通じて管理する必要があります。

Linux は、インデックス ノードとディレクトリ エントリという 2 つのデータ構造を各ファイルに割り当てます。これらは主にファイルのメタ情報とディレクトリ構造を記録するために使用されます。

インデックス ノードは各ファイルの唯一の識別子です。ディレクトリ エントリはファイル システムのツリー構造を維持します。ディレクトリ エントリとインデックス ノードの関係は多対 1 です。これは次のように単純に理解できます。ファイルには複数の名前を付けることができます。

ハード リンクを介してファイルに対して作成されたエイリアスは、異なるディレクトリ エントリに対応します。このようなディレクトリ エントリは基本的に同じファイルにリンクされているため、インデックス ノードは同じです。

c ディスクの最小単位はトラック (512B) ですが、それぞれの読み取りと書き込みが非常に小さいため、効率が非常に低くなります。したがって、ファイルシステムでは、連続するトラックを論理ブロックにまとめ、そのたびに論理ブロックを最小単位としてデータを管理し、論理ブロックを最小単位としてデータを管理します。 4KB、8トラックの連続コンポーズで構成されています。

注意すべき 2 つのポイント:

linux 文件系统优化_优化文件系统的管理_优化文件系统NTFS的管理

仮想ファイル システム

ディレクトリ エントリ、インデックス ノード、論理ブロック、およびスーパー ブロックは、Linux ファイル システムの 4 つの主要な要素を構成します。さまざまなファイル システムをサポートするために、Linux ではユーザー プロセスとファイル システムの間に具体的な層、つまり仮想ファイル システム VFS を導入しています。

VFS は、すべてのファイル システムでサポートされる一連のデータ構造と標準ソケットを定義します。

ファイルシステムI/O

I/O 分類: バッファー付き I/O とバッファーなし I/O、直接 I/O と間接 I/O、ブロッキング I/O と非ブロッキング I/O、同期 I/O と非同期 I/O。

优化文件系统NTFS的管理_优化文件系统的管理_linux 文件系统优化

スペースが不足しています。DF が C ドライブを確認したところ、十分なスペースが残っていることがわかりました。

ファイル データだけでなくインデックス ノードも C ドライブの領域を占有しますが、次のコマンドを使用します。

df-i

i ノードが不足しており、C ドライブに十分なスペースがない場合は、小さなファイルが多すぎることが原因である可能性があります。この問題は、これらの小さなファイルを削除するか、十分なインデックス ノードを持つ他の C ドライブに接続することで解決できます。

カーネルは、スラブ メカニズムを使用して、ディレクトリ エントリとインデックス ノードのキャッシュを管理します。 /proc/meminfo はスラブ全体のサイズのみを示します。各スラブ キャッシュについては、/proc/slabinfo も確認する必要があります。

优化文件系统的管理_优化文件系统NTFS的管理_linux 文件系统优化

ストレージ システムの I/O 動作原理:

ストレージ システムの I/O は、通常、システム全体で最も遅いリンクです。したがって、Linux はさまざまなキャッシュ メカニズムを使用して I/O 効率を最適化します。たとえば、ファイル アクセスのパフォーマンスを最適化するために、ページ キャッシュ、インデックス ノード キャッシュ、ディレクトリ エントリ キャッシュなどのさまざまなキャッシュ メカニズムが使用され、上位層のブロック デバイスへの直接呼び出しが削減されます。同様に、ブロック デバイスのアクセス効率を最適化するために、バッファを使用してブロック デバイス データをキャッシュします。

c ドライブパフォーマンス指標

使用法では、I/O のサイズではなく、I/O があるかどうかのみが考慮されます。言い換えれば、使用率が 100% の場合でも、C ドライブは新しい I/O リクエストを受け入れることができます

特定の指標を単独で比較することはできませんが、データベースや大規模な環境などのランダムな状況では、読み取り/書き込み比率、I/O タイプ (ランダムまたは連続)、および I/O サイズを組み合わせて包括的に分析する必要があります。多くの読み取りと書き込みが行われる組み込み Linux シナリオでは、IOPS がシステム全体のパフォーマンスをより適切に反映できます。マルチメディアなど、多数のシーケンシャル読み取りと書き込みが行われるシナリオでは、スループットが全体のパフォーマンスをより適切に反映できます。システムのパフォーマンス

优化文件系统的管理_优化文件系统NTFS的管理_linux 文件系统优化

このような「異常なロギング」シナリオが発生した場合は、iostat、strace、lsof、およびその他のツールを使用してロギング プロセスを特定し、対応するログ ファイルを見つけて、アプリケーション インターフェイスを通じてログ レベルを調整できます。問題を解決します。アプリケーションがログ レベルを動的に調整できない場合は、アプリケーションの構成を変更し、構成を有効にするためにアプリケーションを再起動する必要がある場合もあります。

strace はこのプロセスを追跡するのに、書き込みシステム コールを検出しないのはなぜですか?

ファイルの書き込みは子スレッドによって実行されるため、すべての strace 追跡プロセスは write システム コールを認識しません。pstree を通じてプロセスのスレッド情報を表示し、strace を使用して追跡するか、strace を通じてすべてのスレッドを追跡できます。 fppid

スロークエリ分析

top と iostat は、システムの CPU と C ドライブの使用状況を分析し、C ドライブの I/O ジレンマを発見しました。次に、pidstat を使用したところ、問題の原因が mysqld であることがわかりました。その直後、strace と lsoflinux ファイル システム最適化を使用して、mysqld が読み取っていたファイルを見つけました。同時に、ファイルの名前とパスから、mysqld が操作しているデータベースとデータ テーブルがわかりました。この情報に基づいて、これはインデックスを使用していないことが原因でクエリが遅くなる問題であると判断しました。

优化文件系统的管理_优化文件系统NTFS的管理_linux 文件系统优化

データサービスを停止すると、IO の問題は解消されます。なぜですか?

ケースアプリケーションがアクセスするデータテーブルはMyISAMエンジンをベースにしており、MyISAMの特徴としてインデックスのみをビデオメモリにキャッシュし、データはキャッシュしません。したがって、クエリ文がインデックスを利用できない場合には、データベースファイルからデータテーブルをビデオメモリに読み込んで処理する必要がある。

Dataservice はファイル キャッシュを継続的に解放するため、mysql は C ドライブ キャッシュを使用しなくなります。

Redis low は、最初に top と iostat を使用してシステムの CPU、メモリ、および C ドライブの使用状況を分析しましたが、システム リソースにジレンマがないことがわかりました。さらに分析するには、システムとアプリケーションがどのように動作するかをある程度理解する必要があります。たとえば、明日のケースでは、C ディスク I/O にはジレンマはありませんが、Redis の原理によれば、キャッシュをクエリするときに多数の C ディスク I/O 書き込み操作が発生するべきではありません。この考え方に沿って、私たちは pidstat、strace、lsof、nsenter などの一連のツールを使用し続け、2 つの潜在的な問題を発見しました。1 つは Redis の不合理な構成で、もう 1 つは Python アプリケーションによる Redis の悪用でした。 I/Oベンチマークテストツール

fio(フレキシブルI/OTester)

I/Oパフォーマンスの最適化

アプリケーションの最適化

ランダム書き込みを追加書き込みに置き換えて、ポーリング費用を削減し、I/O 書き込み速度を向上させます。キャッシュされた I/OLinux ファイル システムの最適化を使用し、システム キャッシュを最大限に活用して、I/O 書き込み数を増やします。アプリケーション内部で独自のキャッシュを作成するか、Redis などの外部キャッシュ システムを使用します。このようにして、キャッシュされたデータとライフサイクルをアプリケーション内で制御できる一方で、キャッシュを使用する他のアプリケーション自体への影響を軽減することもできます。 C標準ライブラリが提供するfopenやfreadなどのライブラリ関数は、標準ライブラリのキャッシュを利用してCドライブの動作を軽減します。 open や read などのシステム コールを直接使用する場合、オペレーティング システムが提供するページ キャッシュとバッファのみを使用でき、ライブラリ関数のキャッシュは利用できません。同じ C ディスク領域を頻繁に読み書きする必要がある場合, read./write の代わりに mmap を使用して、ビデオ メモリのコピー数を減らすことができます。同期書き込みが必要なシナリオでは、各リクエストを C ドライブに同期的に書き込むのではなく、書き込みリクエストをマージしてみてください。 O_SYNC の代わりに fsync() を使用すると、複数のアプリケーションで同じファイルを共有できます。C ドライブで Linux メモリ管理を使用する場合、I/O がアプリケーションによって完全に占有されないようにするために、次のことをお勧めします。 cgroups の I/O サブシステムを使用して、プロセス/プロセス グループの IOPS とスループットを制限します。CFQ スケジューラを使用する場合、ionice を使用してプロセスの I/O スケジューリング優先度を調整し、特に I/O を改善できます。コアアプリケーションの優先順位。 ionice は、アイドル、ベストエフォート、リアルタイムの 3 つの優先クラスをサポートします。このうち、ベストエフォートとリアルタイムもそれぞれ 0 ~ 7 のレベルをサポートしており、値が小さいほど優先度が高くなります。

以上がLinux ファイル システムの仕組み: インデックス ノードとディレクトリ エントリ内のすべてがファイルですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Linuxでnginxを開始する方法 Linuxでnginxを開始する方法 Apr 14, 2025 pm 12:51 PM

Linuxでnginxを開始する手順:nginxがインストールされているかどうかを確認します。 systemctlを使用して、nginxを開始してnginxサービスを開始します。 SystemCTLを使用して、NGINXがシステムスタートアップでNGINXの自動起動を有効にすることができます。 SystemCTLステータスNGINXを使用して、スタートアップが成功していることを確認します。 Webブラウザのhttp:// localhostにアクセスして、デフォルトのウェルカムページを表示します。

Nginxが起動されているかどうかを確認する方法は? Nginxが起動されているかどうかを確認する方法は? Apr 14, 2025 pm 12:48 PM

Linuxでは、次のコマンドを使用して、nginxが起動されるかどうかを確認します。SystemCTLステータスNGINXコマンド出力に基づいて、「アクティブ:アクティブ(実行)」が表示された場合、NGINXが開始されます。 「アクティブ:非アクティブ(dead)」が表示されると、nginxが停止します。

nginx403エラーを解く方法 nginx403エラーを解く方法 Apr 14, 2025 pm 12:54 PM

サーバーには、要求されたリソースにアクセスする許可がなく、NGINX 403エラーが発生します。ソリューションには以下が含まれます。ファイル許可を確認します。 .htaccess構成を確認してください。 nginx構成を確認してください。 SELINUXアクセス許可を構成します。ファイアウォールルールを確認してください。ブラウザの問題、サーバーの障害、その他の可能なエラーなど、他の原因をトラブルシューティングします。

Nginxが開始されるかどうかを確認する方法 Nginxが開始されるかどうかを確認する方法 Apr 14, 2025 pm 01:03 PM

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

nginx403を解く方法 nginx403を解く方法 Apr 14, 2025 am 10:33 AM

Nginx 403禁止エラーを修正する方法は?ファイルまたはディレクトリの許可を確認します。 2。HTACCESSファイルを確認します。 3. nginx構成ファイルを確認します。 4。nginxを再起動します。他の考えられる原因には、ファイアウォールルール、Selinux設定、またはアプリケーションの問題が含まれます。

nginxサーバーを開始する方法 nginxサーバーを開始する方法 Apr 14, 2025 pm 12:27 PM

NGINXサーバーを起動するには、異なるオペレーティングシステムに従って異なる手順が必要です。Linux/UNIXシステム:NGINXパッケージをインストールします(たとえば、APT-GetまたはYumを使用)。 SystemCtlを使用して、NGINXサービスを開始します(たとえば、Sudo SystemCtl Start NGinx)。 Windowsシステム:Windowsバイナリファイルをダウンロードしてインストールします。 nginx.exe実行可能ファイルを使用してnginxを開始します(たとえば、nginx.exe -c conf \ nginx.conf)。どのオペレーティングシステムを使用しても、サーバーIPにアクセスできます

nginx304エラーを解く方法 nginx304エラーを解く方法 Apr 14, 2025 pm 12:45 PM

質問への回答:304変更されていないエラーは、ブラウザがクライアントリクエストの最新リソースバージョンをキャッシュしたことを示しています。解決策:1。ブラウザのキャッシュをクリアします。 2.ブラウザキャッシュを無効にします。 3.クライアントキャッシュを許可するようにnginxを構成します。 4.ファイル許可を確認します。 5.ファイルハッシュを確認します。 6. CDNまたは逆プロキシキャッシュを無効にします。 7。nginxを再起動します。

CentosとUbuntuの違い CentosとUbuntuの違い Apr 14, 2025 pm 09:09 PM

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

See all articles