web-dev-qa-db-ja.com

小さいSDカードにクローンを作成するdd

私のRaspberryPiの1つは、ルート/ブートファイルシステムに4GBのSDカードを使用しています。

別のシステムにマウントしたときに見られるように:

Disk /dev/sdc: 3904 MB, 3904897024 bytes
121 heads, 62 sectors/track, 1016 cylinders
Units = cylinders of 7502 * 512 = 3841024 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000714e9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               2          17       57344    c  W95 FAT32 (LBA)
/dev/sdc2              17         800     2938880   83  Linux

これは、私が利用可能な4GBのうち3GBのみを(そして意図的に)使用しており、使用中のサイクリンダーが最初に配置されていることを示しています(フラッシュメモリがそのように機能する場合)。

以前は、cpコマンドを使用して、既存のファイルシステムをより小さな(既にフォーマットされた)ターゲットファイルシステムに移行しましたが、ddコマンドの単純さを好みます。

Q1:ddを安全に使用して、このディスクを別の少し小さい(正確には44MB小さい)4GB SDカードに複製できますか?

ソースディスクに残りのディスクスペース全体を埋める2番目のパーティションがあり、ファイルシステムが部分的にしか使用されていない場合、時間の経過とともに、パーティションの終わり近くでもファイルのビットが散在する可能性があると確信しています。 (物理ターゲットディスクの境界を上書きする可能性があります)。

Q2a:パーティションの終わりが未使用であることを確認するために実行できるmove-files-to-beginning-kinda-defragコマンドはありますか?

Q2b:パーティションの終わりが未使用であることがわかっている場合、ddを使用してパーティションをより小さなターゲットディスクに安全に切り捨て、後で単純なfsckを使用してミスアライメントを修正できますか?

4
captcha

最後のパーティションの終わりがターゲットドライブに収まることが絶対に確実な場合は、ドライブを卸売りでコピーできます。 dd を使用しないでください。これは遅く(追加のオプションで使用されない限り、常にそうとは限りません)、エラーが発生しやすくなります。単にcatを使用してください。

cat /dev/sdc >/dev/sdz

/dev/sdzを、上書きするドライブへの適切なパスに置き換えます。 1文字のタイプミスでシステムが一掃される可能性があるため、正しく理解してください。通常、エントリ/dev/disk/by-id/または/dev/disk/by-path/を介してディスクにアクセスできます。この名前には、ディスクモデルとドライブの接続方法が示されています。これにより、エラーのリスクが大幅に軽減されます。

fdiskまたは他の任意のツールを使用して)新しいディスクにパーティションテーブルを作成し、ターゲットパーティションのサイズがソースパーティションと同じ(またはそれ以上)であることを確認することで、エラーが発生しにくくなります。 、次に各パーティションをコピーします。例: (同じパーティション番号を保持している場合)

cat /dev/sdc1 >/dev/sdz1
cat /dev/sdc2 >/dev/sdz2

パーティション(より正確には、ファイルシステム— 一般的なLinuxシステムにはどのマウントポイントが存在しますか? 少し背景があります)がいっぱいではないからといって、パーティションの先頭をコピーできるわけではありません。終わりを省きます。ファイルがどこに到達するかを予測することはできず、ファイルシステムには制御データが含まれています。切り捨てられたファイルシステムをコピーすると、ファイルシステムが壊れます(それを修正するためにfsckを当てにしないでください。何か使えるものになるかもしれませんが、コピーされた部分の外にコンテンツが含まれているファイルを復元することはできません)。

パーティションをコピーまたは小さなスペースに移動する場合、または単にパーティションを縮小する場合は、最初に、パーティションに含まれるファイルシステムを縮小します。たとえば、ext2/ext3/ext4ファイルシステムの場合、resize2fsを実行してファイルシステムを縮小します。ファイルシステムの縮小は、必要な「ファイルの開始から開始までのデフラグ」操作です。次に、fdiskなどのツールを使用してパーティションを縮小するか、ファイルシステムをより小さなパーティションにコピーします。パーティションのサイズがファイルシステムよりも大きいことを確認してください。 GNU partedは、ファイルシステムとそれを含むパーティションを一度に縮小できる場合があります(ファイルシステムとパーティションタイプによって異なります)。

ddを使用して、すべてのデバイスではなく、パーティションのコピーを作成できます。

dd if=/dev/sad1 of=/tmp/boot.img
dd if=/dev/sad2 of=/tmp/root.img

Q2b

私はこれを数回行いましたが、問題はありませんでしたが、それでもお勧めできません。

1
Rabin