起動可能なUSBスティックを異なるサイズのスティックに複製する

起動可能なUSBスティックを異なるサイズのスティックに複製する

ハードウェア:2 x 8GB USBフラッシュドライブ
ディストリビューション:Mint 9 Xfce永久ライブCD

USBフラッシュドライブには2つのパーティションがあります:
1)FAT32 700MB Mint 9パーティション
2)ext3 7.3GBcasper-rwパーティション

目的:
インストールと設定を最初からやり直したくないので、このUSBフラッシュドライブをコピーしたいと思います。

経験:1)私のフラッシュドライブの1つのサイズが1 MBであっても異なる場合(時にはそうだった)、コピーが破損する可能性があるため、これはうまくいきませんでした
dd

gparted2)最初のドライブと同じように、2番目のドライブを使用して事前フォーマットしてから、rsync各パーティションを個別に実行すると、何らかの理由で一部のファイルがコピーされず、ドライブがまだ起動しないため、機能しないことがわかりました。

私は仕事用のスティックを維持し、それらをコピーして友達のためにスティックを整理したいと思います。これにより、他のスティックを台無しにしても、ベーススティックが常にそこに座って待っているはずです。

ベストアンサー1

紹介する

PCパーティション(ほとんどのUSBスティックにある)があるドライブの場合、ブートローダはドライブの最初の小さなセクション(ドライブのブートセクタにある1段階のブートローダ)と他のセクションのより大きなセクションで構成されています。 (第2段階のブートローダ、ファイル内)。フェーズ1データにはフェーズ2の物理的な場所が含まれています。デバイス全体(使用したいdd)をコピーする場合、ステップ1の部品は同じ物理的位置にあり、スティックは機能しますが、新しいスティックは少なくとも元のものよりも大きくなければなりません。パーティションを再作成してファイルをコピーすると、ファイルではないため、最初のステップが失われます。

2番目のステップは最初の(FAT32)パーティションにあると考えられています(ただし確認していません)。その場合は、パーティションを一括コピーし、ブートセクタをコピーしてから、2番目のパーティションが残りの領域を正確に占めるようにパーティションテーブルを編集してから、2番目のパーティションにファイルをコピーできます。ブートセクタと最初のパーティションの元のイメージをハードドライブファイルに保存することもできます(ただし、USBスティックから複製することもできます)。

様々なサイズのクローンを作る

/dev/sdb以下では、元のスティックを含むデバイスと複製されたスティックを含むデバイスを参照し、/dev/sdc必要に応じて名前を変更します。必要に応じてマウントポイントを作成します。 FAT32パーティション(ディスクの先頭)の番号は1、ext3パーティションの番号は2であるとします。必要に応じて別の番号に置き換えます。

最初の部分(スティックから複製する場合):

head -c 512 </dev/sdb >/dev/sdc
partprobe /dev/sdc
cat </dev/sdb1 >/dev/sdc1

最初の部分(画像ファイルから複製する場合):

cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1

カーネルがディスクからパーティションテーブルを再ロードするように呼び出す必要がありますpartprobe(ブートセクタにあり、上記の両方の場合、最初のコマンドはブートセクタを変更します)。省略すると、エラーが発生するか、カーネルが自動的にスティックにガベージを書き込みます。

画像ファイルを作成します。

head -c 512 </dev/sdb >boot_sector.img 
cat /dev/sdb1 >first_partition.img

ブートセクタと最初のパーティションがある場合は、パーティションテーブルを再編集して2番目のパーティションのサイズを変更する必要があります。に正しい入力を提供することでこれを自動化できますfdisk。警告:これはエラーが発生しやすく、テストしたことがありません。この部分が気に入らない場合は、手動で実行してください。

sed -e 's/ *#.*//' <<EOF | tr -s ' ' '\n' | tr -d _ | fdisk /dev/sdc
d 2         # delete partition 2
n p 2       # new primary partition 2...
_ _         # ... using all available space
w q         # write and quit
EOF

最後に、パーティションテーブルを再ロードしてext3ファイルシステムを作成し、そこにファイルをコピーします。

partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2

より大きなクローンを作る簡単な方法

必要に応じて、スティック全体の画像を保存できます。少なくともそのサイズと同じ大きさのすべてのスティックで画像を直接使用できます。を使用してイメージを新しいスティックにコピーし、cat <whole.img >/dev/sdc実行partprobe /dev/sdc(またはスティックを抜いて再接続)してパーティションテーブルをもう一度読みます。

その後、必要に応じてレプリカを拡大できます。この順序で:

  1. ゾーニングを拡張します。残念ながら私はこの簡単な方法を知りません。これはコマンドを使用して実行できますが(いいえ、ファイルシステムのサイズを変更します)、parted正しいパラメータを見つける必要があります。丸めエラーを防ぐには、セクタ()に切り替えます。moveresizeunit s
  2. ファイルシステムを拡張します。この部分は簡単です。resize2fs /dev/sdc2ファイルシステムが完全なパーティションサイズを使用するように実行するだけです。

必要以上に大きなスティックで始める場合は、上記の手順を逆の順序で実行してサイズを小さくすることができます(最初にファイルシステムの縮小を使用し、resize2fsパーティションの縮小を使用parted)。

または、まずスティックをイメージファイルにコピーしてから、そのイメージファイルを処理することもできます。パーティションにアクセスするには、次のようにします。循環装置具体的にファイルの一部をディスクに接続する。画像を縮小したい場合は、次の手順のスケッチをご覧ください。 (警告、テストされていませんので、慎重に進めて数学を再確認してください。)

fdisk -lu whole.img  # note starting sector of partition 2: $S
losetup -fs -o $(($S * 512)) whole.img
# Let $D be the desired size of partition 2, in kB
resize2fs /dev/loop0 $  # replace /dev/loop0 by whatever losetup prints
losetup -d /dev/loop0
parted whole.img
# Use parted to resize the second partition
dd if=/dev/null of=/file/to/truncate seek=1 bs=$(($S/2+$D+1))k

おすすめ記事