ভূমিকা
পিসি পার্টিশনযুক্ত ড্রাইভের জন্য (যা আপনি বেশিরভাগ ইউএসবি স্টিকের মধ্যে দেখতে পাবেন) ড্রাইভের প্রথম দিকে বুটলোডার একটি ছোট্ট অংশে থাকে (প্রথম ধাপের বুটলোডার, ড্রাইভের বুট সেক্টরে) এবং একটি অন্য কোথাও বড় অংশ (একটি ফাইলে 2 মঞ্চের বুটলোডার) পর্যায় 1 এর ডেটাতে পর্যায় 2 এর শারীরিক অবস্থান থাকে 2 আপনি যদি পুরো ডিভাইসটি অনুলিপি করেন (যা দিয়ে আপনি চেষ্টা করেছেন dd
), মঞ্চ 1 অংশটি একই শারীরিক অবস্থানে থাকে এবং কাঠিটি কাজ করে তবে নতুন কাঠিটি কমপক্ষে অন্তত থাকতে হবে মূল হিসাবে বড় আপনি যদি পার্টিশনগুলি পুনরায় তৈরি করেন এবং ফাইলগুলি অনুলিপি করেন তবে আপনি ফাইলটি না হওয়ার কারণে আপনি মঞ্চ 1 অনুপস্থিত।
আমি মনে করি (তবে আমি পরীক্ষা করে দেখিনি) যে মঞ্চ 2টি প্রথম (FAT32) পার্টিশনে রয়েছে। যদি তা হয়, তবে আপনি এই পার্টিশনটি পাইকারিভাবে অনুলিপি করতে পারেন, এবং বুট সেক্টরটিও অনুলিপি করতে পারেন, তারপরে পার্টিশন টেবিলটি সম্পাদনা করুন যাতে দ্বিতীয় পার্টিশনটি অবশিষ্ট স্থানটি ঠিক রাখে এবং দ্বিতীয় পার্টিশনে ফাইলগুলি অনুলিপি করে। আপনি সেইসাথে বুট সেক্টরের এবং প্রথম পার্টিশনের একটি কাঁচা চিত্র একটি হার্ড ডিস্কের কোনও ফাইলে রাখতে পারেন (তবে আপনি এটি ইউএসবি স্টিক থেকেও ক্লোন করতে পারেন)।
ভিন্ন আকারের একটি ক্লোন তৈরি করা
নীচে আমি মূল স্টিকযুক্ত /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
অবশেষে আবার পার্টিশন টেবিলটি পুনরায় লোড করুন, একটি এক্সট 3 ফাইল সিস্টেম তৈরি করুন এবং ফাইলগুলি এখানে অনুলিপি করুন।
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