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


11

ハードウェア:2つの8GB USBフラッシュドライブ
DISTRO:Mint 9 Xfce永続的なライブCD

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


目標:そのUSBフラッシュドライブの複製を作成したいのは、もう一度最初からインストールして構成する時間を使いたくないからです。


経験:1)ddフラッシュドライブのサイズが1 MB異なる場合もあるため、このジョブでは機能しないことがわかりました。

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

私は自分の作業スティックを保持し、そのコピーを作成して、友​​人のためにスティックを構成したいだけです。このようにして別のスティックを間違えた場合、ベーススティックは常に待機しているだけです。


どのブートローダーを使用していますか(syslinux?)。あなたの投稿からその暴言を削除することを検討してください、それはあなたの質問に何の価値も追加しません。
マット

私はミントライブUSBインストーラーを使用したので、すべて自動でした。クローン作成プロセスがブートローダーでの作業を回避し、現在のブートローダー設定をコピーすることを願っています
Joshua Robison

回答:


5

前書き

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(またはスティックを取り外して元に戻す)して、パーティションテーブルを再度読み取ります。

その後、必要に応じてクローンを拡大できます。この順序で:

  1. パーティションを拡大します。残念ながら、私はこれを簡単な方法で行う方法を知りません。partedでそれを行うことができますmove(ないコマンドresizeファイルシステムのサイズを変更し、)、しかし、あなたは右の引数を把握する必要があり-部門への切り替え(unit 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

うーん。headを使用して、2番目のパーティションの最初の300 MB程度をimgファイルにコピーすることはできませんか?それはファイルの終わりにあるすべての空のスペース/空のブロックを切り取っていませんか?
ジョシュアロビソン2011年

1
@ジョシュア:いいえ、すべてのファイルデータが最初の300MBになる理由はなく、たとえそうであっても、そのようなファイルシステムに参加することはできません。適切なサイズの有効なファイルシステムを作成する必要があります。また、適切なサイズのパーティションが必要です。パーティションのサイズはブートセクターに格納されます。最小サイズの画像から始めて、必要に応じて拡大したい場合は、答えにその方法を追加しました。
Gilles「SO-邪悪なことをやめる」

うーん。以前にファイルをコピーしようとしましたが、何らかの理由ですべてがコピーされませんでした。私もsudoでrsyncを試しました。そして、私はsu rootを試して、それもやったと思います....それは私にとってはうまくいきません。ドライブはマウントされていなかったと思います...とにかく。私はドライブをgpartedで縮小し、そこからimgファイルを作成して、より小さなディスクに復元することにしました。gpartedでの事前縮小は、私が見つけた唯一の簡単な解決策でした。あなたの助けをありがとう。
ジョシュアロビソン2011年

あなたの答えはおそらく正しいでしょう、そしておそらく私が求めていることをするでしょう。複雑すぎます。それで、私はgpartedプレシュリンク法を使いました。
ジョシュアロビソン2011年

この行にタイプミスはありhead -c 512 </dev/sdb >/bev/sdcますか?
antonio 2013年

3

〜$:sudo apt-get install gddrescue ddrescue

〜$:ddrescue / dev / sda / dev / sdb -v

;

構文:utility / source / drive / destination / drive --verbose

コメント:進行状況とエラーチェックを表示するので、問題がないか、どこかでハングアップしています。また、任意のサイズのブロックをb =に追加することもできます。「gddrescue」は「ddrescue」のGUIベースバージョンですが、問題なく動作するため、上記のddrescueのみを使用しています。


2
適切な形式であることに注意してくださいddrescue -v /dev/sda /dev/sdb(オプションは、デバイス/ファイルの名前の前に最初に来る)。このツールを指摘してくれてありがとう!使用するよりもはるかに簡単ddです!
xmnboy 2016年

0

私は最近、Kaliライブ暗号化永続性を16GBから64GB 3.0 USBにクローンしました。私のホストOSはWindows 10 Proです。Linuxディストリビューションを使用してクローン作成を試みたことはありませんでした。上記の答えはあなたが必要とするものであると確信していますが、どのWindowsユーザーにとってもです。AOMEIディスクパーティションアシスタントを使っていました。使い方は非常に簡単で、Ubuntuに合うようにSSDをパーティション分割するために使用しましたが、余談です。

クローン先のUSBがライブブート用に既にフォーマットされていることを確認する必要がありました。USBの両方を接続し、8GBドライブを右クリックするだけ。クリックしcopyて64GBドライブを選択すると、「これが適切なドライブであることを確認してください。すべてが消去されます」などの一連のジャズが表示されます。それを読んで、すべてが適切であることを確認してください。実際に多くを行う必要はありません。

プロセスが完了するのを待つだけで、準備は完了です。テスト済みはUSBと言ったすべてがうまくいった!

これが少なくとも私にとって最も簡単な方法であることがわかりました。USBからUSBにライブディストリビューションをクローンします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.