前書き
PCパーティションのあるドライブ(ほとんどのUSBスティックにあります)の場合、ブートローダーはドライブの最初の小さな部分(ドライブのブートセクターにあるステージ1ブートローダー)と他の部分(ファイル内のステージ2ブートローダー)。ステージ1のデータには、ステージ2の物理的な場所が含まれています。デバイス全体(試したものdd
)をコピーすると、ステージ1のパーツは同じ物理的な場所にあり、スティックは機能しますが、新しいスティックは少なくともオリジナルと同じ大きさ。パーティションを再作成してファイルをコピーすると、ステージ1はファイルではないため、失われます。
ステージ2は最初の(FAT32)パーティションにあると思います(ただし、チェックしていません)。その場合は、そのパーティションを大量にコピーし、ブートセクターもコピーしてから、パーティションテーブルを編集して、2番目のパーティションが残りのスペースを完全に占めるようにし、2番目のパーティションにファイルをコピーします。ブートセクタと最初のパーティションのrawイメージをハードディスク上のファイルに保存することもできます(ただし、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
(またはスティックを取り外して元に戻す)して、パーティションテーブルを再度読み取ります。
その後、必要に応じてクローンを拡大できます。この順序で:
- パーティションを拡大します。残念ながら、私はこれを簡単な方法で行う方法を知りません。
parted
でそれを行うことができますmove
(ないコマンドresize
ファイルシステムのサイズを変更し、)、しかし、あなたは右の引数を把握する必要があり-部門への切り替え(unit s
)丸め誤差を避けるために。
- ファイルシステムを拡大します。その部分は簡単です
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