Giriş
PC bölümleri olan bir sürücü için (çoğu USB bellekte bulacağınız şey), önyükleyici sürücünün en başında küçük bir kısımdan oluşur (sürücünün önyükleme sektöründe 1. aşama önyükleyici) ve bir başka bir yerde (bir dosyada 2. aşama önyükleyici). Aşama 1 verileri, aşama 2'nin fiziksel konumunu içerir. Tüm cihazı (denediğinizi dd
) kopyalarsanız, aşama 1 kısmı aynı fiziksel konumdadır ve çubuk çalışır, ancak yeni çubuğun en azından orijinal olarak büyük. Bölümleri yeniden oluşturup dosyaları kopyalarsanız, dosya olmadığı için 1. aşamayı kaçırırsınız.
Aşama 2'nin ilk (FAT32) bölümünde olduğunu düşünüyorum (ama kontrol etmedim). Öyleyse, bu bölüm toptancısını kopyalayabilir ve önyükleme kesimini de kopyalayabilir, ardından ikinci bölümü tam olarak kalan alanı kaplayacak şekilde bölüm tablosunu düzenleyebilir ve ikinci bölümdeki dosyaları kopyalayabilirsiniz. Önyükleme sektörünün ve ilk bölümün ham görüntüsünü sabit diskteki bir dosyada da saklayabilirsiniz (ancak bunları bir USB çubuğundan da klonlayabilirsiniz).
Farklı boyutta bir klon yapmak
Aşağıda orijinal çubuğu /dev/sdb
içeren cihazı ve klonu içeren cihazı arayacağım /dev/sdc
; isimleri gerektiği gibi değiştirin. Gerekirse bağlama noktaları oluşturun. FAT32 bölümünün (diskin başında) 1 ve ext3 bölümünün 2 numaralı olduğunu varsayıyorum; gerekirse farklı numaralar kullanın.
İlk kısım, bir çubuktan klonlanıyorsa:
head -c 512 </dev/sdb >/dev/sdc
partprobe /dev/sdc
cat </dev/sdb1 >/dev/sdc1
İlk bölüm, eğer resim dosyalarından klonlanıyorsa:
cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1
partprobe
Çekirdeğin bölüm tablosunu diskten yeniden yükleyebilmesi için çağrı gereklidir (önyükleme kesimindedir ve yukarıdaki senaryolarda ilk komut önyükleme kesimini değiştirir). Bunu atlarsanız, ya hata alırsınız ya da çekirdek sessizce çubuğa çöp yazar.
Görüntü dosyalarını yapmak için:
head -c 512 </dev/sdb >boot_sector.img
cat /dev/sdb1 >first_partition.img
Önyükleme sektörünü ve ilk bölümü aldıktan sonra, ikinci bölümü yeniden boyutlandırmak için bölüm tablosunu yeniden düzenlemeniz gerekir. Doğru girişi besleyerek bunu otomatik olarak yapabilirsiniz fdisk
. Uyarı, bu son derece hata eğilimli ve ben test etmedim. Bu parça ile tamamen rahat hissetmiyorsanız, elle yapın.
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
Son olarak bölüm tablosunu yeniden yükleyin, bir ext3 dosya sistemi oluşturun ve dosyaları oraya kopyalayın.
partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2
Daha büyük bir klon yapmak için basitleştirilmiş yöntem
İsterseniz, tüm çubuğun bir görüntüsünü saklayabilirsiniz. Bu görüntüyü en azından büyük olan herhangi bir çubukta doğrudan kullanabilirsiniz: bölüm tablosunu yeniden okumak için bu görüntüyü yeni çubuğa kopyalayın cat <whole.img >/dev/sdc
, ardından çalıştırın partprobe /dev/sdc
(veya çubuğu çıkarın ve tekrar takın ).
Sonra, isterseniz, klonu büyütebilirsiniz. Bu sırayla:
- Bölümü büyütün. Ne yazık ki, bunu basit bir şekilde nasıl yapacağımı bilmiyorum.
parted
bunu move
komutla yapabilir (değil resize
, dosya sistemini yeniden boyutlandırır), ancak doğru bağımsız değişkenleri bulmanız gerekir - unit s
yuvarlama hatalarını önlemek için sektörlere ( ) geçin.
- Dosya sistemini büyütün. Bu bölüm kolaydır:
resize2fs /dev/sdc2
Dosya sisteminin tüm bölüm boyutunu kullanmasını sağlamak için çalıştırın .
Gerekenden daha büyük bir çubuktan başlıyorsanız, yukarıdaki adımları ters sırayla takip ederek küçültebilirsiniz (önce dosya sistemini küçültün resize2fs
, sonra bölümü küçültün parted
).
Alternatif olarak, önce çubuğu bir görüntü dosyasına kopyalayabilir, ardından bu görüntü dosyası üzerinde çalışabilirsiniz. Bölümlere erişmek için , özellikle dosyanın bir bölümünü bir diske ilişkilendiren bir döngü aygıtı kullanın . Görüntüyü daraltmak istiyorsanız (uyarı, test edilmemiş, dikkatlice ilerleyin ve matematiği iki kez kontrol edin) adımların bir taslağını burada bulabilirsiniz.
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