問題タブ [block-device]
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 - Linux で bio 構造体からバッファ データにアクセスする
ローカル ディスクに書き込む直前にデータをチェックする必要がある Linux カーネル モジュールに取り組んでいます。書き込むデータは、リモート ディスクからフェッチされます。したがって、フェッチからのデータがページ キャッシュに格納されていることがわかります。また、Linux には、実行中のブロック I/O 要求を管理する bio 構造体と呼ばれるデータ構造があることも知っています。
bio 構造体には、bio_vecs と呼ばれる構造体のリストが含まれています。
メモリ内のブロック表現は物理的に連続していない可能性があるため、これらのリストがあります。私がやりたいことは、bio_vecs のリストを使用してバッファーの各部分を取得し、それらを 1 つにまとめて、ブロックの MD5 ハッシュを取得できるようにすることです。ページへのポインター、バッファーの長さ、およびそのオフセットを使用して、バッファー内の生データを取得するにはどうすればよいですか? これには既に関数がありますか、それとも自分で作成する必要がありますか?
caching - D ステートのユーザー プロセスにより、Linux 2.6.24 とアーム プロセッサを使用してウォッチドッグ リセットが発生する
ユニットが約 3 ~ 4 日間実行された後、ほとんどのユーザー空間プロセスは D 状態になります。ユニットは ARM プロセッサで実行されています。上部の o/p から、D 状態のプロセスがシステム コール「page_fault」および「squashfs_readpage」を待機していることがわかります。最終的に、これはウォッチドッグのリセットにつながります。D-sate に入るプロセスは、回復するのに非常に長い時間がかかります。
以下は、システムに問題が発生した場合のトップ o/p です。
もう 1 つの興味深い観察結果は、システムがこの問題に陥ると、"mtdblockd" プロセスが最上位の o/p で実行されていることを一貫して確認できることです。このユニットではスワップを無効にしています。ユニットに明らかなメモリ リークはありません。
考えられる理由は何か、プロセスが D ステートでスタックしているという考えはありますか?
linux-kernel - make_request の submit_bio の wait_for_completion が返されない
Linuxカーネルとmake_requestルーチンでカスタムブロックドライバーを作成しています。書き込み時に、新しいデータを書き込む前に、バイオの指定されたセクターのデータを(物理ドライブから)読み取る必要があります。以下の抜粋は、私が達成しようとしていることのほとんどを示していますが、何らかの理由で、wait_for_completion から返されることはありません。ブロックデバイスに対して I/O が実行されると。submit_bio の後にハングし、続行しません。120 秒ごとに、タスクがどのようにブロックされているかを示すスタック ダンプとメッセージが表示されます。何か案は?考え?
python - パイプやブロック デバイスなどの Python を使用して特殊ファイルを複製するにはどうすればよいですか?
私の仕事は、Python を使用して大量のファイルをコピーすることです。現在、私はすべてを設定しており、ディレクトリツリー全体をコピーしても問題なく動作します。しかし、パイプとブロックファイルの複製に行き詰まりました。Python のみを使用してそのようなファイルを複製するにはどうすればよいですか? それは可能ですか?
linux - デバイスのブロックからファイル システム タイプを認識する
問題は、デバイス (LUN) をマウントできないが、デバイス上の任意の LBA にアクセス (読み取り) できる場合に、デバイス (LUN) に存在するファイル システムの種類を認識する方法です。
私は次のようなものを探しています: NTFS はファイル システム タイプを LBA numberX
に保持し、ext3 はファイル システム タイプを LBA number に保持しますY
。
私が疑問に思っている主な FS は、NTFS、ext3、ext4、および VMFS です。
dd
環境は、コマンドを使用してデバイスからブロックにアクセスできる Linux ボックスです。
助けてくれてありがとう。
linux - bio struct - 書き込み時に変更される bi_sector
Linux ネットワーク ブロック デバイス ドライバー (/drivers/block/nbd.c) を理解し、変更しようとしています。
デバイスが読み取り要求を受け取ると、この要求の一部である bio 構造体の「bi_sector」をログに記録しています。
たとえば、バイオ構造体のセクター番号として 7860224 を取得しています。bio struct に関するドキュメントを読むと、このセクター番号は、この bio が操作を開始するハードウェア開始セクター番号であることがわかります。この略歴の単一の bio_vec の単一の物理ページに含まれるデータも印刷しています。実際に読んでいるファイルの内容を見ることができます。
現在、ファイル内のいくつかの文字を置き換えてから、ファイルを保存しています。書き込み要求がドライバーに送信され、書き込み bio 構造体の bi_sector をログに記録したいと考えています。以前のもの - 7860224 と同じであることを期待していますが、そうではありません。セクター番号を 7880704 として取得しています。ファイルを再度読み取ると、セクター番号として 7880704 が取得されます。何が起こっているのかわかりません。私の理解では、読んだのと同じブロックを書いている場合、バイオ構造体に同じセクター番号が表示されるはずです。この理解は間違っていますか?