dポイントプレゼントキャンペーン実施中!

ブロックデバイスの未使用部分をほぼ完全にゼロ化する方法はありますか?
また、ゼロなファイルを容量一杯広げるという方法はよく聞きますが、どの程度有効なのでしょうか。

A 回答 (4件)

基本的には存在するファイルを削除してもVTOC(Volume of TOp Contents)の情報が削除されるだけで実際にはファイルは存在しています。


こういった場合を想定してると思うのですが
この空き空間を"0"で埋めて削除する方法はありません。

ext3に特化した機能ですがジャーナル機能がある為、Windowsでの復元ポイントと同じような意味を持っています。


ファイルシステム作成時にはメンテナンスエリアも存在します。
主にroot用ですが(# mkfs -t ext3 -m 30MB /dev/sda1などのコマンドで30MB)
あと、容量確保エリアとは別に上記の通りVTOCも存在します。
VTOCはファイル名を保存するエリアです。

この3つのエリア毎に"0"で埋める事は不可能です。


それからメンテナンスエリアとVTOCはdfコマンドなどでは確認できません。
"0"で埋められていると確認する方法はないような気がします・・・。

この回答への補足

>この空き空間を"0"で埋めて削除する方法はありません。
VFSで直接的にこのような操作をする方法がないということですね。
分かりました、ありがとうございます。

>ext3に特化した機能ですがジャーナル機能がある為、Windowsでの復元ポイントと同じような意味を持っています。
ジャーナルデータは所謂「空き容量」として換算されているのですか?
つまり、dd if=/dev/zero of=file などでそのFSを満たしたとき、これは切り詰められるのですか?
因みに試験環境ではext3,ReiserFSを使用しています。

>ファイルシステム作成時にはメンテナンスエリアも存在します。
初めて知りました。これについて調べたいのですが、参考文献などありますでしょうか。恐縮ながら当該の資料を見つけられませんでした。

>それからメンテナンスエリアとVTOCはdfコマンドなどでは確認できません。
VTOCを確認する方法は(バイナリダンプ以外に)ありますか?

補足日時:2008/12/06 01:40
    • good
    • 0

>ジャーナルデータは所謂「空き容量」として換算されているのですか?


>つまり、dd if=/dev/zero of=file などでそのFSを満たしたとき、これは切り詰められるのですか?
はい。空き容量として換算されます。
ファイルシステム一杯まで切り詰めればジャーナル領域も枯渇しますよ。
http://sugi.nemui.org/wiki/ext3%A4%C8JBD


>初めて知りました。これについて調べたいのですが、参考文献などありますでしょうか。恐縮ながら当該の資料を見つけられませんでした。
すみません。少し勘違いしてたっぽいです。
ファイルシステム作成時にroot用(保守用?)領域として一般ユーザには使用できない領域を設けるという意味です。
デフォルトでは全体の5%となっています。
http://www.linux.or.jp/JM/html/e2fsprogs/man8/mk …

VTOCを確認する方法は(バイナリダンプ以外に)ありますか?
う~ん。調べてみたのですが・・・
確認できる方法が見つからないですねぇ・・・
確かSolarisではprtvtocってコマンドでVTOCを参照できたはずなんですよ。
同じコマンドはLinuxにはないみたいですね
ちなみにVTOCを編集するコマンドはfmthardです。

上記のコマンドをLinux互換で実行できるコマンドやパッチはあるかも知れないですが、今の所発見できていません。


追記します
VTOCについても間違えていたんで修正します。
正しくはVTOC(Volume Table of Contents)です。
    • good
    • 0
この回答へのお礼

補足質問にも答えて頂きありがとうございました。
質問から派生して色々勉強になりました。
直接的な解決法は無いようですが、とても参考になります。

やはり現実問題としてddが一番実用的ですね。
単純明快でありFSに依るところ少ないという事に因ります。

究極的には、今のところVFSからは不可能なので(取り入れられれば有難いですが)、各FSのユーティリティとしての実装は可能かと思います。実際これが実装されているfsprogsは無いと思いますけど(一般的に必要性が無い為)。

お礼日時:2008/12/06 16:26

ファイルシステムの空き領域を埋めるだけなら、



# dd if=/dev/urandom bs=1M count=1000 | split -a 8 -b 1M

とかでいいんじゃないでしょうか。/dev/urandom は お好みで /dev/zero でも。オプションの数値は適宜調節してください。
今ひとつ動機がわからないなので、何をもって「有効」と考えれば良いのかわかりませんが。

この回答への補足

>今ひとつ動機がわからないなので、何をもって「有効」と考えれば良いのかわかりませんが。
仮想ブロックデバイス(仮想マシンとかで使う奴です)において実際に確保する容量は仮想化されたデバイス容量よりも小さくすることができます。それは使用されない部分の情報を保持する必要がないからですが、そのとき使用されていないというのが、内容がゼロであるという事を以って実確保容量を解放できます。
そのイメージ容量を極限まで抑えたいとき取り得る方法が目的です。

このとき生成したファイルを削除して残る情報というのはFSにもよると思いますが、どの程度のものなのでしょうか。
ファイルの配置情報はただ個数に比例すると思いますが、ブロックの確保情報はファイルサイズに比例するような気がするんですが・・・

補足日時:2008/12/05 23:43
    • good
    • 0

おそらくデバイスファイルをまったくのゼロにすることは不可能です。


ファイルが存在しない場合ですらファイルシステムが存在します。

すべて空にすることはできますが・・・


ゼロなファイルとは容量が0バイトという意味ですか?

この回答への補足

>おそらくデバイスファイルをまったくのゼロにすることは不可能です。
>ファイルが存在しない場合ですらファイルシステムが存在します。
実際のファイルとファイルシステムを除いた部分、管理上データが意味を持たない部分を未使用部分と考えています。

>ゼロなファイルとは容量が0バイトという意味ですか?
すみません、中身のデータが全て0ということです。

補足日時:2008/12/05 23:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!