問題タブ [sparse-file]
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 - スパースファイルのゼロ化されたブロックをどのように回収しますか?
ファイルの一部に 1 が書き込まれたスパース ファイルを考えてみましょう。
スパース ファイルのその部分が不要になったため、これらの 1 のディスク上の実際のスペースを再利用したいと考えています。これらの 1 を含むファイルの部分は、1 自体が書き込まれる前と同様に「穴」になるはずです。
これを行うために、リージョンを 0 にクリアしました。これは、ディスク上のブロックを再利用しません。
スパースファイルを実際にスパースにするにはどうすればよいですか?
この質問はこれと似ていますが、その質問に対する受け入れられた回答はありません。
ストック Linux サーバーで実行される次の一連のイベントを考えてみましょう。
編集 -
ファイルを書き換えたり、ファイルをコピーしたりしたくないことをさらに限定させてください。以前に割り当てられたブロックを in situで何らかの形で解放できない場合は、それで構いませんが、それが実際に可能かどうかを判断したいと思います。いいえ。この時点で「いや、そうじゃない」みたいな。私はsys_punchhole
Linux を探していると思います (私がたまたま見つけた議論)。
python - Pythonでのスパースファイルの使用
私は次のようにPythonでスパースファイルを作成しています:
ファイルが完成すると、ディスク容量は0になりますが、iノードサイズは切り捨てられた値(1000K)に設定されます。
Python内でファイルの実際のスペース使用量(割り当てられたサイズ)を取得するにはどうすればよいですか?呼び出しはファイルのstat
見かけのサイズを返しますが、ファイル全体を読み取る以外に実際の使用法を取得する方法がわかりません(ファイルがかなり大きくなる可能性があります)
windows - NTFSでスパースファイルを作成するにはどうすればよいですか?
スパースファイルをテストしています。しかし、私のテストコードはうまく機能しません。
java - ファイルをスパースにする方法は?
多くのゼロを含む大きなファイルがある場合、どうすればそれをスパースファイルにすることができますか?
ファイル全体(スパースに保存される可能性のあるすべてのゼロを含む)を読み取り、ゼロ領域をスキップするシークを使用して新しいファイルに再書き込みする唯一の可能性はありますか?
または、既存のファイル(File.setSparse(long start、long end)など)でこれを作成する可能性はありますか?
JavaまたはいくつかのLinuxコマンドで解決策を探しています。ファイルシステムはext3または同様のものになります。
c - (スパース) ファイルから読み取ったチャンクがすべてゼロかどうかをすばやく判断する方法はありますか?
ファイルから読み取った (4KB-16MB) チャンクがすべてゼロかどうかをすばやく判断する方法はありますか?
各バイトをチェックして、チャンクを反復処理できます。明らかな最適化がありますが、O(N) のままです。
私のユースケースはスパースファイルです。私が読んだばかりのチャンクがどのディスクストレージにも支えられていない場合 (つまり、それが穴である場合)、true を返すような部分的な解決策があれば、私は完全に満足しています。
ヒントはありますか?
android - android - ファイルをダウンロードする前に、ファイルのスペースを事前に割り当てます
Androidで事前に割り当てられたファイルを作成するにはどうすればよいですか? スパースファイルのようなもの?
大きなファイルをダウンロードするアプリケーションを作成する必要があり、ダウンロードの開始中に容量不足エラーが発生するのを避けたいと考えています。私のソリューションは、内部ストレージと外部ストレージの両方への再開と書き込みをサポートする必要があります。
私はここに書かれていることを試しました: Javaで指定されたサイズのファイルを作成します が、何らかの理由で、これらのソリューションはどれも機能しませんでした。
linux - 1TB のスパース ファイルのコピー
Linuxで実際に32MBのデータを保存する1TBのスパースファイルを取得しました。
スパースファイルを格納するパッケージを「効率的に」作成することは可能ですか? パッケージは、別のコンピューターで 1 TB のスパース ファイルに展開する必要があります。理想的には、「パッケージ」は約 32MB にする必要があります。
注: 考えられる解決策は、「tar」を使用することです: https://wiki.archlinux.org/index.php/Sparse_file#Archiving_with_.60tar.27
ただし、1TB のスパース ファイルの場合、tar ボールは小さいかもしれませんが、スパース ファイルのアーカイブには時間がかかりすぎます。
編集 1
tar と gzip をテストした結果は次のとおりです (このスパース ファイルには 0 バイトのデータが含まれていることに注意してください)。
0 バイトのデータを含む 1TB のファイル sparse-1 は、「tar」によって 10KB の tar ボールにアーカイブするか、gzip によって ~1GB のファイルに圧縮できます。gzip は、tar が使用する時間の約 2 倍の時間を要します。
比較すると、「tar」は gzip よりも優れているようです。
ただし、0 バイトのデータを含むスパース ファイルには 96 分は長すぎます。
編集 2
rsync
ファイルのコピーtar
が より長く、より短い時間で終了したようですgzip
:
したがって、この非常にまばらなファイルでは、 tar
+ cp
orscp
を直接使用するよりも高速にする必要があります。rsync
編集 3
新しいカーネルの SEEK_HOLE 機能を指摘してくれた @mvp に感謝します。(以前は 2.6.32 Linux カーネルで作業していました)。
注: bsdtar バージョン >=3.0.4 が必要です (ここを確認してください: http://ask.fclose.com/4/how-to-効率的にアーカイブ-a-very-large-sparse-file?show=299#c299 )。
新しいカーネルと Fedora リリース (17) では、スパース ファイルを非常に効率的tar
に処理します。cp
3.6.5 カーネルを使用しています。
windows - 「スパース ゼロ」を (BYTE)0x00 以外の値に設定できますか?
テキストを正しく理解していれば、Platform SDKには次のような暗示が含まれています。
スパース ファイルのデフォルトのデータ値はゼロです。ただし、他の値に設定できます。
FSCTL
ただし、関連するテキストをくまなく調べても、スパースなゼロ値を設定または取得できる対応する s の兆候はまったくありませんでした。では、導入に誤りがあるのでしょうか、それとも文書化されていない FS 制御コードがあるのでしょうか?
c++ - スパースファイルでデータブロックの長さを見つける
あるオフセットから始まるスパースファイル内のゼロ以外のデータブロックの長さを見つけるにはどうすればよいですか?ファイルを読み取らせる必要がありますか、それともOSがキャッシュ可能なメタデータからその情報を読み取ることができますか?WindowsOSとVisualStudioC++を使用しています。
java - GetCompressedFileSizeに相当するJavaはありますか?
Javaでスパースファイルの正確な(つまり、ディスク上の実際のサイズであり、すべての0を含む通常のサイズではない)測定値を取得しようとしています。
Windows上のC++では、を使用しますGetCompressedFileSize
。私はまだJavaでそれを行う方法に出くわしていませんか?
直接同等のものがない場合、すべてのゼロを含むサイズではなく、スパースファイル内のデータを測定するにはどうすればよいですか?
明確にするために、Linux OSとWindowsの両方でスパースファイル測定を実行するためにこれを探していますが、2つの別々のアプリケーションをコーディングしてもかまいません!