GNU/Linux >> Linux の 問題 >  >> Linux

ディスク全体に dd しますが、空の部分は必要ありません

解決策 1:

昔、組み込みの Linux ディストリビューションで同様の問題に遭遇しました。イメージを圧縮する前に、ジャンクをすべて削除してください。

05 .死ぬまで待ってください。 asdf.txt を削除します。

デバイスのすべての空き領域にゼロを書き込みました。

ディスク イメージを取得し、gzip で実行します。出来上がり、まばらな画像です。

おそらくうまくスケーリングできず、実際にディスクに書き込む必要がある場合に問題が発生する可能性がありますが、ちょっと。

ディスクの rsync スナップショットを別のボリュームに取得し、そのボリュームをゼロにしてから、そのディスク イメージを取得できます。

注:SSD にとって危険な場合があります。ユーザーはこの操作をコミットする前に考慮する必要があります。

解決策 2:

13 を保存したいとします。 26 まで そしてあなたはルートです:

<オール>
  • 38

  • 44 を使用 あるいは単に:
    54
    未使用のブロックをゼロで埋めます。ファイルシステムが完全にいっぱいになるまで待ってから、次のようにします。
    62

  • dd で画像を取得し、 conv=sparse を使用してオンザフライでゼロをパンチします。
    79

  • 圧縮を使用したい場合は、ゼロブロックは非常に圧縮可能であるため、dd でゼロをパンチする必要はありません:

    dd if=/dev/sdxn | gz -c | dd of=/tgtfs/image.raw
    

    PS:大量の書き込みが発生するため、フラッシュ メモリ ベースのストレージ メディア (つまり、ソース ファイル システムが SSD) で定期的にこれ (ファイル システムをゼロで埋める) はお勧めできません。 SSD に接続し、その寿命を縮めます。 (ただし、たまにデータを転送する場合は問題ありません)

    解決策 3:

    count オプションを指定して dd を使用してください。

    あなたの場合は fdisk を使用していたので、そのアプローチを採用します。あなたの "sudo fdisk -l " が生成されます:

        Disk /dev/sda: 64.0 GB, 64023257088 bytes
        255 heads, 63 sectors/track, 7783 cylinders
        Units = cylinders of 16065 * 512 = 8225280 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disk identifier: 0x0000e4b5
    
        Device Boot      Start         End      Blocks   Id  System
        /dev/sda1   *           1          27      209920   83  Linux
        Partition 1 does not end on cylinder boundary.
        /dev/sda2              27         525     4000768    5  Extended
        Partition 2 does not end on cylinder boundary.
        /dev/sda5              27         353     2621440   83  Linux
        /dev/sda6             353         405      416768   83  Linux
        /dev/sda7             405         490      675840   83  Linux
        /dev/sda8             490         525      282624   83  Linux
    

    注意すべき 2 つの点は、1) ユニットのサイズ、および 2) "End" 列です。あなたの場合、8225280 バイトに等しいシリンダーがあります。 "End" 列では、sda8 は 525 で終了します (つまり、525[ユニット]*16065*512 =~4.3GB)

    dd は、オフセットの後に開始したり、特定のブロック数の後に停止したりするなど、多くのことを実行できます。 dd の count オプションを使用して後者を行います。コマンドは次のようになります:

        sudo dd if=/dev/sda of=/your_directory/image_name.iso bs=8225280 count=526
    

    ここで、-bs はブロック サイズ (fdisk が使用する単位を使用するのが最も簡単ですが、これらの単位で count オプションが宣言されている限り、どの単位でも使用できます)、count はコピーする単位の数です (注:最後のブロックをキャプチャするためにカウントを 1 増やします)。

    解決策 4:

    85 の間 free-disk-space を使用して 99 を使用します /101 数百 GB の 114 で実行されている空き領域のある巨大なディスクでは可能です。 ingは非常に遅いです-他の回答が指摘したように、 120 は言うまでもありません EOF まで SDD を呼び出します。

    この状況に遭遇したときに私がしたことは次のとおりです。

    • lubuntu ライブ CD では 134 を使用 ディスクを可能な限り最小のサイズに「縮小」し、残りのスペースを未割り当てのままにする

    • 使用済み
      141 高速圧縮イメージを作成します (言うまでもなく、生データを保存するのに十分なスペースがある場合 (または CPU の負荷を減らしたい場合) は、圧縮をスキップすることをお勧めします)

    • 使用済み
      152 データを別のディスクにコピーして戻す
    • 使用済み 167 もう一度パーティションを「拡張」します

    複数のパーティションで試したことはありませんが、宛先ディスクのパーティションテーブルが最初に作成され、パーティションに含まれるデータのみが 175 - 読み取り/書き込みオフセット (184 /193 206 のオプション 、それぞれ) が必要に応じて必要になります。

    解決策 5:

    できません。 216 は非常に低レベルのツールであり、ファイルと空のスペースを区別する手段がありません。

    一方、空のスペースは非常にうまく圧縮されるため、書き込み時間などではなく、ストレージ スペースのみを気にする場合は、gzip を介してパイプするだけです。


    Linux
    1. Linuxのシステム管理者は知りたがっています:私のディスクスペースはどこに行きましたか?

    2. ディレクトリを比較しますが、ファイルの内容は比較しませんか?

    3. コマンドShufファイル>ファイルは空のファイルを残しますが、同様のコマンドは残しませんか?

    1. Linux – `sync + Drop_caches`はキャッシュをドロップしませんか?

    2. コマンドはZshで見つかりませんが、Bashで見つかりましたか?

    3. コアがダンプされましたが、コア ファイルが現在のディレクトリにありませんか?

    1. RUNPATH ではなく RPATH を使用しますか?

    2. php.ini は変更されますが、ubuntu では効果がありません

    3. `ssh <host>` はログイン シェルですが、`ssh <host> <command>` は違いますか?