Mengkloning stik USB yang dapat di-boot ke stik berukuran berbeda

11

HARDWARE: 2 8GB USB flash drive
DISTRO: Mint 9 Xfce Live Cd yang persisten

Satu USB flash drive memiliki dua partisi:
1) FAT32 700MB Mint 9 partisi
2) casper-rwpartisi ext3 7.3GB

TUJUAN:
Saya ingin membuat duplikat USB flash drive itu karena saya tidak ingin melalui waktu menginstal dan mengkonfigurasi dari awal lagi.

PENGALAMAN:
1) Saya menemukan bahwa ddini tidak berfungsi untuk pekerjaan ini karena jika salah satu flash drive saya berukuran 1MB, yang kadang-kadang berbeda, maka salinannya rusak.

2) Saya telah menemukan bahwa menggunakan gparteddan memformat ulang drive kedua seperti yang pertama dan kemudian rsyncsetiap partisi secara individual tidak berfungsi karena karena beberapa alasan beberapa file tidak dapat disalin dan drive tetap tidak dapat di-boot.

Saya ingin tetap menggunakan tongkat kerja saya dan membuat salinannya dan mengkonfigurasi tongkat untuk teman-teman saya. Dengan cara ini jika saya melakukan kesalahan pada tongkat lain saya akan selalu memiliki tongkat basis saya hanya duduk menunggu.

Joshua Robison
sumber
bootloader apa yang Anda gunakan (syslinux?). Harap pertimbangkan untuk menghapus kata-kata kasar itu dari posting Anda, itu tidak menambah nilai apa pun untuk pertanyaan Anda.
Mat
Saya menggunakan installer usb live mint, jadi semuanya otomatis. Saya berharap proses kloning akan menghindari bekerja dengan bootloader dan menyalin conf bootloader saya saat ini
Joshua Robison

Jawaban:

5

pengantar

Untuk drive dengan partisi PC (yang akan Anda temukan di sebagian besar stik USB), bootloader terdiri dari bagian kecil di awal drive (stage 1 bootloader, di sektor boot drive) dan bagian yang lebih besar di tempat lain (bootloader tahap 2, dalam file). Data tahap 1 berisi lokasi fisik tahap 2. Jika Anda menyalin seluruh perangkat (apa yang Anda coba dd), bagian tahap 1 berada di lokasi fisik yang sama dan tongkat berfungsi, tetapi tongkat baru harus setidaknya sama besar seperti aslinya. Jika Anda membuat ulang partisi dan menyalin file, Anda kehilangan tahap 1 karena itu bukan file.

Saya pikir (tapi saya belum memeriksa) bahwa tahap 2 ada di partisi (FAT32) pertama. Jika demikian, Anda dapat menyalin partisi tersebut secara grosir, dan menyalin sektor boot juga, kemudian mengedit tabel partisi sehingga partisi kedua menempati ruang yang tersisa, dan menyalin file di partisi kedua. Anda mungkin juga menyimpan gambar mentah dari sektor boot dan partisi pertama dalam file di hard disk (tetapi Anda juga dapat mengkloningnya dari stik USB).

Membuat klon dengan ukuran berbeda

Di bawah ini saya akan memanggil perangkat yang berisi tongkat asli /dev/sdbdan perangkat yang berisi klon /dev/sdc; ganti nama sesuai kebutuhan. Buat mount point jika perlu. Saya berasumsi bahwa partisi FAT32 (pada awal disk) diberi nomor 1 dan partisi ext3 diberi nomor 2; gantilah nomor yang berbeda jika diperlukan.

Bagian pertama, jika kloning dari tongkat:

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

Bagian pertama, jika kloning dari file gambar:

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

Panggilan ke partprobediperlukan agar kernel memuat ulang tabel partisi dari disk (itu di sektor boot, dan perintah pertama dalam salah satu skenario di atas memodifikasi sektor boot). Jika Anda menghilangkannya, Anda akan mendapatkan kesalahan atau kernel akan secara diam-diam menulis sampah ke tongkat.

Untuk membuat file gambar:

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

Sekarang setelah Anda mendapatkan sektor boot dan partisi pertama, Anda perlu mengedit tabel partisi lagi, untuk mengubah ukuran partisi kedua. Anda dapat melakukan ini secara otomatis dengan memasukkan input yang tepat fdisk. Peringatan, ini sangat rawan kesalahan, dan saya belum mengujinya. Jika Anda tidak merasa benar-benar nyaman dengan bagian ini, lakukan dengan tangan.

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

Terakhir memuat kembali tabel partisi, membuat sistem file ext3, dan menyalin file di sana.

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

Metode yang disederhanakan untuk membuat klon yang lebih besar

Jika suka, Anda dapat menyimpan gambar seluruh batang. Anda dapat menggunakan gambar itu secara langsung pada tongkat apa pun yang setidaknya sama besar: cukup salin gambar itu ke tongkat baru cat <whole.img >/dev/sdc, lalu jalankan partprobe /dev/sdc(atau cabut stik dan masukkan kembali) untuk membaca kembali tabel partisi.

Kemudian, jika mau, Anda bisa memperbesar klon. Dalam urutan ini:

  1. Perbesar partisi. Sayangnya, saya tidak tahu bagaimana melakukan ini dengan cara yang sederhana. parteddapat melakukannya dengan moveperintah (bukan resize, yang mengubah ukuran sistem file), tetapi Anda perlu mencari tahu argumen yang tepat - beralih ke sektor ( unit s) untuk menghindari kesalahan pembulatan.
  2. Perbesar sistem file. Bagian itu mudah: jalankan resize2fs /dev/sdc2untuk membuat filesystem menggunakan seluruh ukuran partisi.

Jika Anda mulai dari tongkat yang lebih besar dari yang diperlukan, Anda dapat mengecilkannya dengan mengikuti langkah-langkah di atas dalam urutan terbalik (pertama-tama menyusutkan sistem file dengan resize2fs, kemudian mengecilkan partisi dengan parted).

Atau, Anda dapat menyalin stik ke file gambar terlebih dahulu, kemudian mengerjakan file gambar itu. Untuk mengakses partisi, gunakan perangkat loop , secara khusus mengaitkan sebagian file ke disk . Berikut ini sketsa langkah-langkah jika Anda ingin mengecilkan gambar (peringatan, belum diuji, lanjutkan dengan hati-hati dan periksa ulang matematika).

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
Gilles 'SANGAT berhenti menjadi jahat'
sumber
hmm Tidak bisakah saya menggunakan kepala untuk hanya menyalin 300mb pertama atau lebih dari partisi kedua ke file img? Bukankah itu akan memotong semua ruang kosong / blok kosong di akhir file?
Joshua Robison
1
@ Yosua: Tidak, karena tidak ada alasan mengapa semua data file akan berada di 300MB pertama, dan bahkan jika itu Anda tidak bisa hanya mengambil bagian dari sistem file seperti itu. Anda perlu membuat sistem file yang valid dengan ukuran yang tepat. Anda juga perlu memiliki partisi dengan ukuran yang benar; ukuran partisi disimpan di sektor boot. Jika Anda memilih untuk memulai dari gambar berukuran minimum dan memperbesarnya jika diinginkan, saya telah menambahkan cara untuk melakukannya dalam jawaban saya.
Gilles 'SO- berhenti bersikap jahat'
hmm Saya mencoba menyalin file sebelumnya tetapi karena beberapa alasan semuanya tidak menyalin. Saya mencoba rsync juga dengan sudo. dan saya pikir saya sudah mencoba su root dan melakukannya juga .... Itu tidak bekerja untuk saya. Saya yakin drive tidak terpasang ... lagian. Saya memutuskan untuk mengecilkan drive dalam gparted dan kemudian membuat file img dari itu dan kemudian mengembalikannya ke disk yang lebih kecil. Pre-shrinking di gparted adalah satu-satunya solusi sederhana yang bisa saya temukan. Terima kasih atas bantuan Anda.
Joshua Robison
Jawaban Anda mungkin benar dan kemungkinan besar akan melakukan apa yang saya minta. Itu terlalu rumit untukku. Jadi saya pergi dengan metode pre shrink gparted.
Joshua Robison
apakah ada kesalahan ketik pada baris ini head -c 512 </dev/sdb >/bev/sdc?
antonio
3

~ $: sudo apt-get install gddrescue ddrescue

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

;

Sintaks: utilitas / sumber / drive / tujuan / drive --verbose

Komentar: menunjukkan pemeriksaan kemajuan dan kesalahan sehingga Anda tahu apakah itu dapat diterima atau menutup telepon di suatu tempat. Anda juga dapat menambahkan b = ukuran blok apa pun yang Anda inginkan. "gddrescue" adalah versi berbasis gui dari "ddrescue" tetapi saya hanya menggunakan ddrescue seperti yang tertulis di atas karena ia bekerja tanpa masalah.

SierraJuliet
sumber
2
Perhatikan bahwa format yang tepat adalah ddrescue -v /dev/sda /dev/sdb(opsi datang terlebih dahulu sebelum nama perangkat / file). Terima kasih telah menunjukkan alat ini! Jauh lebih mudah daripada menggunakan dd!
xmnboy
0

Saya baru-baru ini mengkloning kegigihan Kali live terenkripsi saya dari 16GB ke USB 64GB 3.0, OS host saya adalah windows 10 pro. Saya belum mencoba untuk mengkloning menggunakan distro Linux, saya yakin jawaban di atas adalah apa yang Anda butuhkan, tetapi untuk setiap pengguna windows; Saya telah menggunakan asisten partisi disk AOMEI. Sangat mudah digunakan, menggunakannya untuk mempartisi SSD saya agar sesuai dengan Ubuntu, tapi saya ngelantur.

Saya harus memastikan bahwa USB yang saya kloning sudah diformat untuk booting langsung. Terpasang di USB dan cukup diklik kanan pada drive 8GB; klik copykemudian pilih drive 64GB, itu akan menanyakan banyak hal seperti "apakah Anda yakin ini adalah drive yang tepat, semuanya akan terhapus" semua jazz itu. Baca saja dan pastikan semuanya beres, Anda benar-benar tidak perlu berbuat banyak.

Tunggu saja prosesnya selesai dan Anda sudah siap. Diuji mengatakan USB dan semuanya bekerja!

Saya menemukan ini menjadi cara termudah setidaknya bagi saya, kloning distro langsung dari USB ke USB.

Saya baru disini
sumber