web-dev-qa-db-ja.com

ddを使用してパーティションデータを右に移動します

パーティションをブロック単位で右に移動する dd コマンドラインを取得するには、いくつかの助けが必要です。

ツールを使用していくつかのPCをイメージ化するときにエラーが発生したため、データを失うことなくそれらのマシンを再パーティション化する必要があります。これはgparted0.18.0でかなりうまく機能します。そこで、79MBのオフセットで2番目のパーティションを右に移動します。次に、最初のパーティションを79MB拡張します。すべてが完璧に機能しています。しかし、約35台のマシンがあるので、それを実行するスクリプトを作成したいと思いました。

サイズ変更とすべてが非常に簡単です。頭に浮かばないのは、パーティションを右に移動することです。基本的に私はそれを行う dd コマンドラインが必要です。私の考えは、私は後ろから始めて、前に向かって進む必要があるということです。ので、私は考えました:

  • とofが同じパーティションの場合(オフセットデータに合わせて既に拡張されていることを思い出してください)/ dev/sda2
  • gpartedがベンチマークしたものであるため、bsは16MiBである可能性があります
  • データが上書きされないように右から左へのコピーを実現するパラメータは何でしょうか

私はgpartedのメンテナと話をしました、そして彼はddがこれを達成するために使われると言いました。しかし、私はその方法を理解することはできません。

2
Sebastian
  • データが上書きされないように、右から左へのコピーをアーカイブするパラメータは何でしょうか

存在しない、1つのコマンドにがないddソリューション

また、パーティションの移動にddを使用しないように警告します。何かが失敗した場合、その操作の前に行ったバックアップなしでデータを復元する機会がないためです。ただし、バックアップがある場合、操作は簡単です。つまり、免責事項でした。

今、楽しい方法です(あなたの質問は面白いと思います)。私はそうしませんでした、そのようにパーティションを移動しました、しかしそれはうまくいくかもしれません、それでテストファイルの概念実証:

Perl -e 'foreach $i (0..1023) { printf "%0.7i\n", $i; }' >test.dat

実験用のテストファイルを作成するだけ

pv command も必要です。これは、次の形式のデータのバッファーのように機能します:pv -B buffer_size_in_bytes

dd if=test.dat | pv -B 1024 | dd of=test.dat seek=2

デフォルトddブロックサイズは512バイトです-データを2 ddブロックシフトするため、1024バイトのバッファで十分です。

dd if=/div/sda bs=512*device block size* skip=111111*much blocks until sda2 begins*
| pv -B 90000000 *have_to_fit_shift size+*
| dd of=/div/sda seek=(blocks until sda2 begins + amount of blocks we shift that for)

その後、すべてがうまくいった場合は、パーティションテーブルを修正する必要があります。

しかし、おそらくもっと一般的な方法-ddチャンクごとにデータを移動することです

dd if=/div/sda bs=1M count=100 skip=PosToRead seek=PosToWrite
PosToRead -= dd_count
PosToWrite -= dd_count
repeat if not done

また そこに ddが反対方向に移動し、ddコマンドの処理とオフセットの決定に関心があります

2
MolbOrg

dd_rescue オプション-r方向を逆にするため。

使用例:

partition=/dev/vdc1
disk=/dev/vdc
sector_size=512
new_start_sector=4096
# opos is right after the new partition and given in bytes
opos=$(($new_start_sector * $sector_size + `blockdev --getsize64 $partition`))
dd_rescue -v -r -S $opos $partition $disk

その後、パーティションテーブルを更新することを忘れないでください。以前に更新しないでください!

0