परिचय
पीसी विभाजन के साथ एक ड्राइव के लिए (जो कि आपको अधिकांश यूएसबी स्टिक्स पर मिलेगा), बूट लोडर ड्राइव के बहुत शुरुआत में एक छोटे हिस्से में होता है (ड्राइव के बूट सेक्टर में चरण 1 बूटलोडर) और एक बड़ा हिस्सा कहीं और (चरण 2 बूटलोडर, एक फ़ाइल में)। चरण 1 डेटा में चरण 2 का भौतिक स्थान होता है। यदि आप पूरे डिवाइस (आपने जो प्रयास किया है dd
) की प्रतिलिपि बनाते हैं , तो चरण 1 भाग एक ही भौतिक स्थान में होता है और छड़ी काम करती है, लेकिन नई छड़ी को कम से कम होना चाहिए मूल जितना बड़ा। यदि आप विभाजन को फिर से बनाते हैं और फ़ाइलों को कॉपी करते हैं, तो आप चरण 1 को याद कर रहे हैं क्योंकि यह फ़ाइल नहीं है।
मुझे लगता है (लेकिन मैंने जाँच नहीं की है) कि स्टेज 2 पहले (FAT32) पार्टीशन में है। यदि ऐसा है, तो आप उस विभाजन को थोक में कॉपी कर सकते हैं, और बूट सेक्टर को भी कॉपी कर सकते हैं, फिर विभाजन तालिका को संपादित कर सकते हैं, ताकि दूसरा विभाजन ठीक उसी स्थान पर रह जाए, जो दूसरे विभाजन पर फ़ाइलों को कॉपी करता है। आप बूट सेक्टर की कच्ची छवि और हार्ड डिस्क पर फ़ाइल में पहले विभाजन को रख सकते हैं (लेकिन आप उन्हें 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
अब आपको बूट सेक्टर और पहला विभाजन मिल जाने के बाद, दूसरे विभाजन का आकार बदलने के लिए, आपको फिर से विभाजन तालिका को संपादित करना होगा। आप इसे सही इनपुट फ़ीड करके स्वचालित रूप से कर सकते हैं 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