コマンドラインツールを使用してパーティションを右に移動

コマンドラインツールを使用してパーティションを右に移動

たとえば、190GBのパーティションがあり、その後に100GBのパーティション化されていないディスク空き容量があります。

分割されていない空き領域が左側になるように、このパーティションを100 GBの「右」(より高いセクタ番号に向かって)に移動したいと思います。

このパーティションは、次の理由でランダムにコピーできません。

  • これには、保存する必要がある暗号化されたデータ(ブロックレベル)が含まれています。
  • パーティションの古い場所と新しい場所が重なります。

私はGPartedがこの問題を処理できる必要があることを知っています。しかし、コマンドラインツールを使って自分でやりたいです。わかりましたsfdisk 何かがある次のようにパーティションを100M右に移動します。

echo '+100M,' | sfdisk --move-data /dev/sdc -N 1

私は2つを知りたいです:

  • 同様の(または他の)ツールを使用してデータを手動で移動するにはddどうすればよいですか?私はパーティションの終わりを始める前にコピーする必要があると思います。逆さまに読んでコピーするのと同じです(もちろんGPTパーティションテーブルも編集する必要があります)。
  • これを使用したい場合は、sfdiskディスクの反対側のパーティションに正しく「接触」するように、非常に正確なセクタ番号を移動するためにどのように使用できますか? (これにより、互いに隙間なく互いに隣り合うようになります。)

答え1

必要にsfdisk応じて、非常に正確なセクタ番号を移動してディスクの反対側のパーティションに正しく「接触」させるにはどうすればよいですか? (これを行うと、間隔なしで互いに隣り合うことになります。)

セクタ数を入力として提供することでこれを行うことができますsfdisk

echo '+NUM' | sfdisk --move-data /dev/sdc -N 1

最初のパーティションセクタをNUM右に移動します。
マニュアルに記載されているように

数値パラメータはデフォルトでセクタ番号として解釈されます。

NUM後に乗算サフィックス(Metc.など)が続く場合にのみバイト単位のサイズで処理されKiBます。sfdisk+50GiB


セクター数はどのようにわかりますか?非常に簡単で、sfdiskスイッチを通して報告されます-F

-F, --list-free [device...]
すべてまたは指定されたデバイスで分割されていない使用可能領域を一覧表示します。

サンプル出力(使用可能領域のセクタ数を太字で表示):

    開始および終了セクタサイズ
114369428 324084628  209715200   100グラム

NUMしたがって、最初のコマンドの数字を使用してください。

echo '+209715200' | sfdisk --move-data /dev/sdc -N 1

間隔を空けずに、最初のパーティションを次のパーティションの横に移動します。


記録のために2GB SDカードで実行した内容は次のとおりです(出力に関係のない部分を削除)。
4つのパーティションがあり、2番目のパーティションの後に空き領域があるように3番目のパーティションを削除しました。次に、Go を最後のパーティションに向かって移動します。まず、既存のパーティションをリストします。

sfdisk -l /dev/sdc  

[...]

Device    Boot   Start     End Sectors  Size Id Type
/dev/sdc1         2048 2099199 2097152    1G  c W95 FAT32 (LBA)
/dev/sdc2      2099200 2488319  389120  190M  c W95 FAT32 (LBA)
/dev/sdc4      2693120 3966975 1273856  622M  7 HPFS/NTFS/exFAT

sdc2移動したいパーティションはセクタで終わる2488319ため、空き領域はセクタで始まります2488320。次に、空き領域を一覧表示します。

sfdisk -F /dev/sdc

Unpartitioned space /dev/sdc: 101,5 MiB, 106430464 bytes, 207872 sectors
[...]

  Start     End Sectors  Size
2488320 2693119  204800  100M
3966976 3970047    3072  1,5M

空き領域には2つの領域があります。最初の領域が必要です。次から始まるセクタの数...その後、その番号をパーティション2の移動の入力として2488320使用します。204800sfdisk

echo "+204800" |マウサーsfdisk /dev/sdc -N 2 --データ移動
Checking that no-one is using this disk right now ... OK

[...]

Old situation:

Device    Boot   Start     End Sectors  Size Id Type
/dev/sdc1         2048 2099199 2097152    1G  c W95 FAT32 (LBA)
/dev/sdc2      2099200 2488319  389120  190M  c W95 FAT32 (LBA)
/dev/sdc4      2693120 3966975 1273856  622M  7 HPFS/NTFS/exFAT

New situation:

Device    Boot   Start     End Sectors  Size Id Type
/dev/sdc1         2048 2099199 2097152    1G  c W95 FAT32 (LBA)
/dev/sdc2      2304000 2693119  389120  190M  c W95 FAT32 (LBA)
/dev/sdc4      2693120 3966975 1273856  622M  7 HPFS/NTFS/exFAT

Data move:
  start sector: (from/to) 2099200 / 2304000
  sectors: 389120
  step size: 1048576 bytes

Moved 389120 from 389120 sectors (100%).

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

New situation:出力によると、2パーティション終了セクタは、2693119パーティション4開始セクタはです2693120。つまり、2 つの間にギャップはありません。

関連情報