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/sdb
dan 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 partprobe
diperlukan 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:
- Perbesar partisi. Sayangnya, saya tidak tahu bagaimana melakukan ini dengan cara yang sederhana.
parted
dapat melakukannya dengan move
perintah (bukan resize
, yang mengubah ukuran sistem file), tetapi Anda perlu mencari tahu argumen yang tepat - beralih ke sektor ( unit s
) untuk menghindari kesalahan pembulatan.
- Perbesar sistem file. Bagian itu mudah: jalankan
resize2fs /dev/sdc2
untuk 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