最初に提案された「チャレンジ」は難しいように見えるかもしれませんが、実行可能ではないか、一部の人がコメントしているように単純ではありませんが、そうではありません。ddを使用してより大きなディスクからより小さなディスクに移行することの背後にある主なアイデアは、完全に問題なく、データの移行に利点があります。もちろん、占有データが宛先ディスクに収まるように十分な空き領域を確保することは必要な要件です。
アイデアは、最初に提案されたように、一度にディスク全体ではなく、各パーティションを個別にdd'dすることです。さらに多くのことを達成できます:切り捨てられるパーティションは、ファイルシステムのサイズ変更ツールを少し助けて安全に移行することもできます。実際、そのような種類の移行は、ファイルシステム層ではなくファイルシステム層で動作するcp、rsync、paxなどのツールでは簡単にコピーできないファイルシステムmatadataおよび拡張ファイル属性を保持するために興味深いものです。ddを使用すると、SELinuxの問題を回避するために、OSを再インストールしたり、FSのラベルを付け直したりする必要がなくなります。
以下は、同様のタスクを達成するために私が通常行うことです。
1)最初に、影響を受けるパーティション内の切り捨てられるファイルシステムを減らします。これには、resize2fsツールを使用します(ext2 / ext3 / ext4 fsについて話していると仮定します-他の最新のFSにも同じ目的でサイズ変更ツールがあります)。-明らかな理由で-ファイルシステムは、それが存在するパーティションより大きくすることはできませんが、安全に小さくできることに注意してください。ここでの安全上の秘Theは、「必要以上」を減らすことです。たとえば、500ギガバイトのドライブに移行したい1TBのファイルシステムがあるとします。この場合、fsを450ギガバイトに減らすことをお勧めします(もちろん、これに十分な空き領域が必要です。つまり、このファイルシステムで現在占有されている領域は450ギガバイトを超えることはできません)。明らかに無駄になった50ギガのスペースは、データ移行後に修正されます。
2)スペースの制約を考慮して、適切なジオメトリで宛先ディスクをパーティション分割します。
3)ディスクデバイスではなくパーティションデバイスを使用してデータをddします(つまり、を使用するdd if=/dev/sda# of=/dev/sdb#
代わりに各パーティションに使用しますif=/dev/sda of=/dev/sdb
)。注:ここでのsdaとsdbは単なる例です。重要な注意:大きいパーティションデバイスから小さいパーティションデバイスにdd 'するとき、ddはブロックデバイスの最後にポストを書き込もうとすると文句を言います。ファイルシステムデータはそのポイントに到達する前に完全にコピーされるので大丈夫です。このようなエラーメッセージを回避するには、縮小ファイルシステムのサイズに一致するようにbs=
とcount=
パラメータを使用してコピーのサイズを指定できますが、これにはある程度の(単純な)計算が必要ですが、誤って行うとデータが危険にさらされる可能性があります。
4)データをdd 'した後、resize2fsを使用して、宛先パーティション内の各ファイルシステムのサイズを再度変更します。今回は、新しいファイルシステムのサイズを指定しないでください。サイズを指定せずに実行すると、resize2fsはファイルシステムを拡張して最大許容サイズを占有するため、この場合、450 Gigファイルシステムは再び成長して500 Gigパーティション全体を占有し、バイトは無駄になりません。(「必要以上に削減する」アプローチにより、誤ってサイズを誤って指定してデータを危険にさらすことを回避できます。GBとGiBの単位は注意が必要です。)
より複雑な操作に関する注意:一緒にコピーするブートマネージャーがある場合(これがよくあるケースです)、パーティションデバイスの代わりにディスクデバイスを使用して、ディスクの最初の数KBをddできます( dd if=/dev/sda of=/dev/sdb bs=4096 count=5
)、次に/ dev / sdbのジオメトリを再構成します(これには、一時的に新しいドライブの無効なジオメトリが含まれますが、完全で有効なブートマネージャが含まれます)。最後に、パーティションを一度にdd 'するために上記のパーティションデバイスを使用して続行します。このような操作を何度も行いました。ごく最近、MacMini6,2でMacOSXとLinuxのインストールが混在するHDDから小さなSDDにアップグレードするときに、複雑な移行を正常に実行しました。この場合、外部ドライブからLinuxをブートし、ブートマネージャーをddし、gdiskを実行して新しいディスクのGPTを修正し、最後に縮小したファイルシステムを含む各パーティションをddしなければなりませんでした。(GPTパーティションスキームは、パーティションテーブルの2つのコピーを保持します。1つはディスクの最初に、もう1つはディスクの最後にあります。gdiskは、PTの2番目のコピーを見つけることができず、パーティションがディスクサイズを超えるため、多くの苦情を訴えますが、ディスクジオメトリを再定義した後、PTコピーの問題を正しく修正します。これははるかに複雑なケースでしたが、この種の操作も完全に実行可能であることを示すため、言及する価値があります。
幸運を!...そして最も重要なことは、この種の操作の前にすべての重要なデータをバックアップすることを忘れないでください。間違いとあなたは間違いなくあなたのデータを回復不能に損傷する可能性があります。
念のため、移行前にデータをバックアップしてください。:)
dd
、最適なブロックサイズを計算することは有用である