web-dev-qa-db-ja.com

フルイメージ用のスペースを持たずに、NTFSパーティションをより小さなディスクにパートクローンする方法

時々、私は次の問題を抱えています:

ディスクに障害が発生し、交換用ディスクが小さくなります。多くの場合、データは小さいディスクに簡単に収まりますが、partcloneは、小さいパーティションサイズに一致するようにファイルシステムを縮小しません。

ディスク全体を一時ドライブにイメージしてから縮小するだけです。しかし、十分なスペースがない場合はどうなりますか?

1
JPT

ポイント16以降はまだ機能しません。削除しなかった古いループデバイスがあったためかもしれません。

partcloneスパースイメージへの生のダンプ

このソリューションはデータにとって危険です。自分が何をしているかを理解し、ddとデバイスに精通している場合にのみ試してください。データの損失については責任を負いません。

始める前に:

  • 物理的に損傷しているディスクをミラーリングするためにこの手順を使用しないでください。

    • partcloneが機能するには、正常なファイルシステムが必要です

    • この手順は、ddを実行するよりもはるかに複雑であるため、成功するまで数回繰り返す必要があります。壊れたディスクにより多くの負担がかかります。

    • 壊れたディスクの場合、safecopyは不良セクタで異常終了するため、代わりにddを使用する必要があります

  • 一時ドライブには、最大2 xデータサイズの空き領域が必要です。

  • コマンドのカスタマイズを忘れた場合にデータを破壊する可能性のあるコマンドには、sdXXを入力します。これはループを処理しないため、貴重なデータを誤って上書きしないように、次のプロセスでは他のループデバイスを使用しないでください

  • どこかで失敗してイメージを削除した場合は、必ず最初にそれを指しているものをアンマウントしてから、ループデバイスを削除してください:kpartx -dv <image>間違ったループデバイスを使用すると大きな問題が発生する可能性があります!私の問題は古いループデバイスが原因であると思います...

  • この回答の最後にある一般的な問題の修正を見つけてください。

行こう

  1. ソースディスクのディスクサイズを取得します

    Sudo fdisk -l /dev/sda
    output: Disk /dev/sda: 465,8 GiB, 500107862016 bytes, 976773168 sectors
    
  2. 元のパーティションレイアウトをイメージに読み込む

    Sudo dd if=/dev/sda of=sparse.img bs=1M count=1
    
  3. 上記のサイズまで「何もない」で画像を埋めます。 -これはディスク上のスペースを取りません

    Sudo dd if=/dev/zero of=sparse.img bs=1 count=0 seek=500107862016
    
  4. 他にアクティブなループデバイスがないことを確認してください-出力が空でない場合は、トラブルシューティングのセクションを参照してください

    losetup -l -a 
    
  5. パーティションのレイアウトがソースドライブと同じかどうかを確認します

    fdisk -l sparse.img
    
  6. イメージ内のパーティションにアクセスするためのループデバイスを作成します

    Sudo kpartx -av sparse.img 
    output: add map loop0p1 (253:0): 0 976771072 linear 7:2 2048
    
  7. partcloneを使用して画像にデータを読み込みます-これにより、「データサイズ」と「オーバーヘッド」の合計でスペース使用量が増加します。

    Sudo partclone.ntfs -s /dev/sda1 -o /dev/mapper/loop0p1 -b -L sparse.log
    
  8. ソースドライブを削除して保存します

  9. gpartedを使用して縮小する-ターゲットドライブより少なくとも10%小さくする必要があります

    • gpartedkpartxが作成した開発者を理解しないため、リンクを作成します。

      ln -s /dev/mapper/loop0p1 sparse.img1
      
    • gpartedを使用してパーティションを縮小します

      Sudo gparted sparse.img
      
  10. または、ntfsresizeを使用して縮小することもできますが、後でパーティションも縮小する必要があります。

    • 最小サイズを取得

      Sudo ntfsresize -i /dev/mapper/loop0p1
      
    • サイズ変更のテスト

      Sudo ntfsresize -n -s 100G /dev/mapper/loop0p1
      
    • 実際のサイズ変更-これにより、スペース使用量が最大「データサイズ」まで増加します

      Sudo ntfsresize -s 100G /dev/mapper/loop0p1
      
    • TODO:パーティションを縮小する

  11. (縮小されて拡大されていないため不要ですか?)パーティションサイズが変更されたため、ループデバイスを削除して再作成します

    Sudo kpartx -dv sparse.img 
    Sudo kpartx -av sparse.img 
    
  12. (オプション)TODO画像を切り捨てる

  13. ntfsresizeを使用して確認してください-私にとってこれはOKの答えを与えます

    Sudo ntfsresize -i /dev/mapper/loop0p1
    
  14. ターゲットドライブを挿入します-正しいドライブを挿入したことを再確認します

  15. ntfsresizeがfsをダーティとマークしたため、機能しません)partclone新しいドライブへのイメージ

    Sudo partclone.ntfs -o /dev/sdXX -s /dev/mapper/loop0p1 -b -L restore.log
    
  16. 代わりに、dd新しいドライブへのイメージ-サイズを指定しないか、縮小されたパーティションサイズを10%上回ります

    Sudo dd if=sparse.img of=/dev/sdXX
    
  17. ntfsresize-FAILSを使用して確認してください。画像に問題がなく、画像の同一のコピーを作成したため、これは発生しないはずです!!!

    Sudo ntfsresize -i /dev/sda1
    
  18. ループデバイスを削除する

    Sudo kpartx -dv sparse.img
    
  19. 完全に削除されなかったループデバイスを削除します-それでも問題が解決しない場合は、再起動するか、これでWebを検索します。

    Sudo losetup -D 
    
  20. 最後に、ディスクを起動してから、Windows chkdsk / fを実行する必要があります。その後、gpartedを使用して、パーティションをフルサイズに拡張します。

トラブルシューティング:

  • ntfsresizeまたはgpartedがイメージにアクセスできない場合:ソースディスク上のウィンドウからexec chkdsk /fntfsfixは使用しないでください。 Linux用のNTFSチェッカーはありますか?

  • kpartxがループデバイスを作成できない場合:losetupで確認し、未使用のデバイスを削除します。

  • 廃止されたループデバイスを削除したい場合は、Sudo losetup -dで削除するか、Webを検索してください。

3
JPT