問題タブ [inode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - MEM_SHARED、mmap、およびハードリンク
共有メモリの鍵はファイル名なのかiノードなのか疑問に思っています。
.lastという名前のファイルがあります。これは、YYYYMMDDHHMMSSという名前のファイルへのハードリンクです。
ディレクトリは次のようになります。
.lastは、20110101143000へのハードリンクです。
しばらくして、新しいファイルが作成されます
次に、.lastを削除し、新しいファイルを参照するように再作成します。
これらの更新中に継続的に実行されている当社のソフトウェアは、MAP_SHAREDを使用して.lastファイルをmmapします。ファイルの処理が完了すると、ソフトウェアはファイルのマップを解除するのではなく、数分間キャッシュする場合があります。物理サーバーでは、ソフトウェアのインスタンスが12〜24個同時に実行されています。多くの場合、異なるインスタンスがほぼ同時に同じファイルをmmapします。私の質問は:
Linuxはファイル名を使用して共有メモリにキー入力しますか、それともiノードを使用しますか?
このシナリオを考えると:
- proc A mmaps .lastであり、マップを解除しません
- 新しいファイルが書き込まれ、.lastが削除され、新しい.lastが作成されて新しいファイルがリンクされます
- proc Bは新しい.lastをmmapし、マップを解除しません
Linuxがiノードを使用した場合、proc AとBは、異なるファイルにマップされた異なるメモリブロックを認識します。これは私たちが望んでいることです。Linuxがファイル名を使用する場合、AとBの両方が新しいファイルにマップされた同じメモリブロックを参照します。Bは問題ありませんが、シャードブロックのメモリが変更されるとAがクラッシュします。
誰もがそれが実際にどのように機能するか知っていますか?私はテストするつもりですが、それが名前ベースであることが判明した場合、誰かがトリックを知らない限り、私は失敗します。
ありがとう!
c - Linux デバイス ドライバー プログラミングで構造体 inode と構造体ファイルを使用してデータを渡す理由
Linux Device Drivers, 3rd editionの Chapter 3.5 を勉強しています。struct inode *inode
このセクションでは、 open 関数で独自に定義したカスタム構造を取得する方法を紹介します。
私の理解では、デバイスが開かれている間、デバイスをstruct inode *inode
表す が に渡されscull_open
ます。次に、カスタム構造dev
が抽出されて に渡されfilp->private_data
、 などの他のメソッドがscull_read
それを使用できるようになります。
herestruct scull_dev *dev
に during initialization が既にあることに気付くまで、これは私には問題ないように思えます。scull_setup_cdev
struct scull_dev *dev
グローバル変数を作成できると思っていたので、かなり混乱しています。他のメソッドは、 andscull_read
を使用してすべてのパスを通過することなく、最終的にそれにアクセスできます。inode
file
私の質問は、それをグローバル変数にしないのはなぜですか?
このメソッドを使用してデータを渡す実用的な例を誰かが提供できますか?
php - iノード-回避策?
そのため、私のホスティングサービスには、サーバー(インデックスノード)でのINODESの制限があります。各ディレクトリ/ファイル=1iノード。Webサイトにファイル共有を実装したいので、これは将来問題になる可能性があります。理論的には、ファイルのデータをMySQLデータベースに保存し、ユーザーがダウンロードを要求したときにデータをプルすることはできませんか?これが可能な場合、PHPでこれを行うにはどうすればよいですか?
MySQLスケルトン:
linux - プロセスの実行中に Linux procfs の inode 番号が変更された
Linux用のセキュリティソフト(SW)をやっています。SW が行うことの 1 つは、何らかのプロセスが開始されると、SW がプロセスの /proc/ エントリを stat() し、エントリの inode 番号を記憶することです。後でプロセスがまだ実行中であること (および再起動されていないこと) を確認する必要がある場合、SW はプロセスの inode を再度検索し、記憶されているものと比較します。最近まで、特定のアプリケーション (Opera ブラウザー 11.10beta) について誤ったアラートを受け取るようになるまで、すべてが順調でした。基本的に、Opera の実行中に、その /proc/PID エントリの inode 番号が変更されたように見えますが、これは不可能であると考えられていました。これは、SW のセキュリティ概念の動作においてかなり大きな問題です。プロセスが実行されている間、その /proc/ エントリの i ノードが変更されないという事実に大きく依存しています。
なぜそのような行動が見られるのか、どなたか教えてください。ありがとう。
linux - マウントされた共有のディレクトリの inode は、変更時間に変更がないにもかかわらず変更されます
Ubuntu 10.4 を実行しており、cifs を使用してドライブをマウントしています。私が使用しているコマンドは次のとおりです。
'sudo mount -t cifs -o workgroup="workgroup",username="username",noserverino,ro //"drive" "mount_dir"' (明らかに、実際の値は "" 値に置き換えられます)
次に、コマンド ls -i を実行すると、次のようになります: 394070 2 回目の実行: 12103522782806018
inode 値が変更されると予想される理由はありますか? ls -i --full-time を実行しても、変更時間に変化はありません。
unix - なぜ'。' Unixのハードリンク?
UnixベースのOSで空のディレクトリのリンク数が1ではなく2である理由について、多くの説明を見てきました。それらはすべて、「。」が原因であると言っています。ディレクトリ。すべてのディレクトリがそれ自体を指し示しています。なぜ「。」の概念があるのか理解しています。相対パスを指定するのに役立ちますが、ファイルシステムレベルで実装することで何が得られますか?パスをとるシェルやシステムコールに、それを解釈する方法を知ってもらいませんか?
その「..」は実際のリンクであり、私にははるかに理にかなっています。ファイルシステムは、親ディレクトリに移動するために、親ディレクトリへのポインタを格納する必要があります。しかし、なぜ「。」かわかりません。本当のリンクであることが必要です。また、実装の醜い特殊なケースにつながるようです。リンク数が1未満のiノードが使用するスペースしか解放できないと思いますが、ディレクトリの場合は、実際に確認する必要があります。リンク数が2未満です。なぜ不整合なのですか?
c - 「inode番号」がわかっている場合のinode構造の取得方法
minix の API を読みましたが、まだ混乱しており、inode 番号だけで「実際の」inode 構造を取得できませんでした。
「stat」構造でしか「inode番号」を取得できませんでしたよね?しかし、その番号を取得した後、対応する inode 構造を取得する方法はありますか?
linux - Linuxルートファイルシステムでinode番号はどのように分散されていますか?
Linux ファイルシステムで inode 番号がどのように使用されているかについていくつか質問があります。これらの質問は関連している可能性がありますが、明確にするために、1つずつ質問します。
Q1: EXT2/3 を例にとると、「第 2 拡張ファイルシステムの設計と実装」から、ブロック グループに i ノード テーブルがあることは知っています。また、i ノードがファイルを提示することも知っています。十分ではありませんか?私の最善の推測は、すべての inode 番号が使い果たされた場合、ファイルシステムは何もしないということです。また、後で一部のファイルが削除された場合、その inode が再利用される可能性があります。
Q2: Linux サーバーで「df -i」を実行すると、次のようになります。
各ファイルシステムには独自の inode 数があり、これらのファイルシステム (devtmpfs や tmpfs など) はすべてroot file systemにマウントされていることがわかります。各ファイルシステムには独自の inode テーブルがあると思いますが、ルートファイルシステムが [0, N] で tmpfs が [N+1, M] のように、異なるファイルシステムの inode 番号は異なる範囲に分散されていますか?
異なるファイルシステムの inode 番号が異なる範囲にある場合 (私はそうは思いません)、ファイルシステムはどのようにして範囲分割について合意を形成するのでしょうか?
異なるファイルシステムの inode 番号が同じ規則 (すべて 0 から始まるなど) に基づいて生成される場合、それらを一緒にマウントすると、異なるファイルシステムが競合する可能性はありますか? 私が知っているように、inode は実行中の OS にファイルを表示します。ルート ファイルシステムのファイルの inode 番号が N で、別のファイル システム (tmpfs など) の別のファイルも inode 番号が N の場合、OS はどうしますか?
PS。私は Linux の初心者で、英語圏の国から来たわけではありません。明確な表現ができていなかったら申し訳ありません。前もって感謝します。
linux - 64 ビット inode を作成するには?
ファイル IO API の 64 ビット バージョンをテストする必要があります (open、create stat など)。このプロセスでは、内部の 64 ビット データ構造/変数と API がテストされるように、64 ビット i ノードを持つファイルを作成する必要があります。64 ビットの inode を作成するにはどうすればよいですか?
各ディレクトリに1024個のファイルを持つネストされたディレクトリの配列を作成しようとしているスクリプトを作成しました。スクリプトの実行には膨大な時間がかかり、突然終了します。先に進むことができません。それを達成する他の方法はありますか?
java - JDK NIO が非常に多くの anon_inode ファイル記述子を使用するのはなぜですか?
私は Sun の JDK 1.6.0_26 と NIO (Netty を使用) を使用しており、lsof には次のような数百のファイル記述子が表示されますanon_inode
。
匿名 inode とは何かについての明確な説明を見つけることができませんでしfs/anon_inodes.c
た。Linux カーネルのソース ツリーを調べたところ、おそらくepoll
それを使用しているように見えますが、なぜそんなに多くの i ノードが必要なのかわかりません。複数の「epoll ループ」とタイマー スレッドがありますが、私の数ほどではありませんanon_inode
。