時々、私は次の問題を抱えています:
ディスクに障害が発生し、交換用ディスクが小さくなります。多くの場合、データは小さいディスクに簡単に収まりますが、partcloneは、小さいパーティションサイズに一致するようにファイルシステムを縮小しません。
ディスク全体を一時ドライブにイメージしてから縮小するだけです。しかし、十分なスペースがない場合はどうなりますか?
ポイント16以降はまだ機能しません。削除しなかった古いループデバイスがあったためかもしれません。
partclone
スパースイメージへの生のダンプこのソリューションはデータにとって危険です。自分が何をしているかを理解し、dd
とデバイスに精通している場合にのみ試してください。データの損失については責任を負いません。
始める前に:
物理的に損傷しているディスクをミラーリングするためにこの手順を使用しないでください。
partclone
が機能するには、正常なファイルシステムが必要です
この手順は、dd
を実行するよりもはるかに複雑であるため、成功するまで数回繰り返す必要があります。壊れたディスクにより多くの負担がかかります。
壊れたディスクの場合、safecopy
は不良セクタで異常終了するため、代わりにdd
を使用する必要があります
一時ドライブには、最大2 xデータサイズの空き領域が必要です。
コマンドのカスタマイズを忘れた場合にデータを破壊する可能性のあるコマンドには、sdXX
を入力します。これはループを処理しないため、貴重なデータを誤って上書きしないように、次のプロセスでは他のループデバイスを使用しないでください。
どこかで失敗してイメージを削除した場合は、必ず最初にそれを指しているものをアンマウントしてから、ループデバイスを削除してください:kpartx -dv <image>
。 間違ったループデバイスを使用すると大きな問題が発生する可能性があります!私の問題は古いループデバイスが原因であると思います...
この回答の最後にある一般的な問題の修正を見つけてください。
行こう
ソースディスクのディスクサイズを取得します
Sudo fdisk -l /dev/sda
output: Disk /dev/sda: 465,8 GiB, 500107862016 bytes, 976773168 sectors
元のパーティションレイアウトをイメージに読み込む
Sudo dd if=/dev/sda of=sparse.img bs=1M count=1
上記のサイズまで「何もない」で画像を埋めます。 -これはディスク上のスペースを取りません。
Sudo dd if=/dev/zero of=sparse.img bs=1 count=0 seek=500107862016
他にアクティブなループデバイスがないことを確認してください-出力が空でない場合は、トラブルシューティングのセクションを参照してください
losetup -l -a
パーティションのレイアウトがソースドライブと同じかどうかを確認します
fdisk -l sparse.img
イメージ内のパーティションにアクセスするためのループデバイスを作成します
Sudo kpartx -av sparse.img
output: add map loop0p1 (253:0): 0 976771072 linear 7:2 2048
partclone
を使用して画像にデータを読み込みます-これにより、「データサイズ」と「オーバーヘッド」の合計でスペース使用量が増加します。
Sudo partclone.ntfs -s /dev/sda1 -o /dev/mapper/loop0p1 -b -L sparse.log
ソースドライブを削除して保存します
gparted
を使用して縮小する-ターゲットドライブより少なくとも10%小さくする必要があります
gparted
はkpartx
が作成した開発者を理解しないため、リンクを作成します。
ln -s /dev/mapper/loop0p1 sparse.img1
gparted
を使用してパーティションを縮小します
Sudo gparted sparse.img
または、ntfsresize
を使用して縮小することもできますが、後でパーティションも縮小する必要があります。
最小サイズを取得
Sudo ntfsresize -i /dev/mapper/loop0p1
サイズ変更のテスト
Sudo ntfsresize -n -s 100G /dev/mapper/loop0p1
実際のサイズ変更-これにより、スペース使用量が最大「データサイズ」まで増加します
Sudo ntfsresize -s 100G /dev/mapper/loop0p1
TODO:パーティションを縮小する
(縮小されて拡大されていないため不要ですか?)パーティションサイズが変更されたため、ループデバイスを削除して再作成します
Sudo kpartx -dv sparse.img
Sudo kpartx -av sparse.img
(オプション)TODO画像を切り捨てる
ntfsresize
を使用して確認してください-私にとってこれはOKの答えを与えます
Sudo ntfsresize -i /dev/mapper/loop0p1
ターゲットドライブを挿入します-正しいドライブを挿入したことを再確認します
(ntfsresize
がfsをダーティとマークしたため、機能しません)partclone
新しいドライブへのイメージ
Sudo partclone.ntfs -o /dev/sdXX -s /dev/mapper/loop0p1 -b -L restore.log
代わりに、dd
新しいドライブへのイメージ-サイズを指定しないか、縮小されたパーティションサイズを10%上回ります
Sudo dd if=sparse.img of=/dev/sdXX
ntfsresize
-FAILSを使用して確認してください。画像に問題がなく、画像の同一のコピーを作成したため、これは発生しないはずです!!!
Sudo ntfsresize -i /dev/sda1
ループデバイスを削除する
Sudo kpartx -dv sparse.img
完全に削除されなかったループデバイスを削除します-それでも問題が解決しない場合は、再起動するか、これでWebを検索します。
Sudo losetup -D
最後に、ディスクを起動してから、Windows chkdsk / f
を実行する必要があります。その後、gparted
を使用して、パーティションをフルサイズに拡張します。
ntfsresize
またはgparted
がイメージにアクセスできない場合:ソースディスク上のウィンドウからexec chkdsk /f
。 ntfsfix
は使用しないでください。 Linux用のNTFSチェッカーはありますか?
kpartx
がループデバイスを作成できない場合:losetup
で確認し、未使用のデバイスを削除します。
廃止されたループデバイスを削除したい場合は、Sudo losetup -d
で削除するか、Webを検索してください。