পার্টিশন টেবিলের সাহায্যে একটি পার্টিশনের চিত্রকে ডিস্কের চিত্রে রূপান্তর করুন


20

আমার সাথে বিদ্যমান একটি পার্টিশনের চিত্র রয়েছে dd if=/dev/sdXN of=image.bin। এখন আমি এই চিত্রটি ভার্চুয়াল মেশিনের ভিত্তি হিসাবে ব্যবহার করতে চাই। আমি জানি কীভাবে চিত্রটি ভার্চুয়ালবক্স ব্যবহার করতে পারে এমন ফর্ম্যাটে রূপান্তর করতে।

সমস্যাটি হ'ল "ডিস্ক" চিত্রটি আসলে একটি পার্টিশনের চিত্র এবং সুতরাং এতে একটি এমবিআর বা একটি পার্টিশন সারণী থাকে না। এটি ভিএম বুট করা খুব কঠিন করে তোলে।

পার্টিশন টেবিল সহ সঠিক ডিস্ক চিত্র তৈরি করার জন্য কোনও পার্টিশনের একটি চিত্র দেওয়া কি সহজ উপায়?

উত্তর:


13

আপনি হোস্ট মেশিনে এটি করতে পারেন। বেশিরভাগ সরঞ্জামের মতো fdiskফাইলগুলি অপারেট করে kpartxএবং একটি ফাইলের পার্টিশনে অ্যাক্সেস দেয়।

  1. একটি নতুন ফাঁকা 100GiB স্পার্স চিত্র তৈরি করুন (এটি পার্টিশন চিত্রের আকারের চেয়ে কিছুটা বড় করুন)

    dd if=/dev/zero of=myvm.img bs=1G count=0 seek=100
    
  2. ইমেজ ফাইলটি দিয়ে পার্টিশন করুন fdisk

    fdisk myvm.img
    
  3. ইমেজ ফাইলটিতে পার্টিশনগুলি উপলভ্য করুন পৃথক ডিভাইস

    sudo kpartx -a myvm.img
    
  4. পার্টিশনটিতে পার্টিশন চিত্রটি অনুলিপি করুন

    sudo cp image.bin /dev/mapper/loop0p1
    
  5. পুরো পার্টিশনটি পূরণ করার জন্য ফাইল সিস্টেমটি প্রসারিত করুন

    sudo resize2fs /dev/mapper/loop0p1
    
  6. পার্টিশন বন্ধ করুন

    sudo kpartx -d myvm.img
    
  7. লুপব্যাক ডিভাইসটি বাতিল করুন

    sudo losetup -D
    

এটি কি চিত্রের তৈরি করা পার্টিশনটিকে চিত্রিত পার্টিশনের দৈর্ঘ্যের সাথে "মেলে না" তৈরি করে না? এবং যে সমাধান করার কোন উপায় আছে? এবং, কোনও "স্মার্ট যথেষ্ট" ফাইল সিস্টেম ম্যানেজার কি বলতে সক্ষম হবেন যে এটি পুরো পার্টিশনের আকার ব্যবহার করছে না এবং ফিট করার জন্য নিজেকে প্রসারিত করবে?
হত্যাকারী

@ কিলারমিস্ট আপডেট উত্তর।
ম্যাগগ্রোভেন

এটি একটি ভাল উত্তর। প্রক্রিয়াতে পুরো জিনিসটি অনুলিপি করা এড়ানোর কোনও উপায় কি আপনি জানেন?
মিকা ফিশার

@ মিকা ফিশার দুর্ভাগ্যক্রমে নয়, কারণ পার্টিশনের পূর্বে পার্টিশন টেবিলের উপস্থিতি থাকা দরকার এবং কোনও ফাইলে ডেটা প্রিপেন্ড করার কোনও ব্যবস্থা সম্পর্কে আমি জানি না।
ম্যাগগ্রোভেন

আমি মনে করি হারুনের উত্তর আরও ভাল কারণ এটি করা সহজ এবং স্ক্রিপ্ট করা যায়।
ফিলাকলবর্ণ

9

আমি নিশ্চিত যে আসল সমস্যাটি অনেক আগেই সমাধান হয়ে গেছে তবে একই ধরণের সমস্যার কারও জন্য:

পুরো চিত্রটি অনুলিপি করা এড়ানোর একটি উপায় হ'ল .vmdk ফর্ম্যাট চিত্র তৈরি করা যা পার্টিশন টেবিল এবং পার্টিশন সামগ্রীগুলির জন্য পৃথক পরিমাণের ফাইলগুলি বোঝায়।

আমার এই স্নিপেটটি কিছুক্ষণ আগে করা একটি পরীক্ষা থেকে .vmdk ফাইলে পড়ে আছে:

RW 63 FLAT "parttable.bin" 0
RW 585937489 FLAT "partition-image.bin" 63

এর অর্থ হ'ল অফসেট 0 থেকে শুরু হওয়া 63 টি সেক্টর কাঁচা ফাইল "পার্টেটেবল.বিন" থেকে পড়া হয়, তবে সেক্টর 63 এবং তারপরের দিকে কাঁচা পার্টিশন ডাম্প "পার্টিশন-ইমেজ.বিন" থেকে আসে। (অবশ্যই, প্রথম পার্টিশনের প্রকৃত অফসেটের সাথে 63 টি প্রতিস্থাপন করুন, সাধারণত এই দিনগুলিতে 2048)।

শেষ ফলাফলটি হ'ল, ভিবিক্সের ভিতরে থেকে মনে হচ্ছে আপনি দীর্ঘ কপির অপারেশন না করে পার্টিশন ইমেজের সামনের দিকে পার্টিশন টেবিলটি চাপিয়ে দিয়েছেন।

ভিএম এর মধ্যে থেকে ড্রাইভটি পার্টিশন করুন এবং আপনি যদি আপনার অফসেটগুলি ডান পেয়ে থাকেন তবে সদ্য নির্মিত পার্টিশনের অভ্যন্তরে আপনার পার্টিশন চিত্রের সামগ্রী দেখতে হবে see


2
আমি মনে করি পার্টিশন-ইমেজ.বিন একটি পার্টিশন চিত্র হলে দ্বিতীয় লাইনের '63' 0 হওয়া দরকার। আমি সবেমাত্র এরকম কিছু করেছি এবং পার্টিশন ইমেজ ফাইলটিতে এই অফসেটটি শূন্যে সেট করা দরকার। philatwarrimoo.blogspot.com.au/2014/01/…
ফিলাকলবর্ণ


জিনিয়াস। লিনাক্স হোস্টের ভিএম এর জন্য উইন্ডোজ পার্টিশনটি ব্যবহার করার জন্য আমাকে কেবল এই কাজটি করতে হয়েছিল এবং এটিই কেবল কাজ করেছিল, @ ফিলাকলবর্ন থেকে প্রাপ্ত পদক্ষেপগুলি ব্যবহার করে: superuser.com/a/804396/93066
bmaupin

Vmdk ফাইলের বাকী অংশে কী হওয়া উচিত?
gozzilli

1
@gozzilli ফাইলটির বাকী ফাইলগুলি ফাইলের সংস্করণ নম্বর, ডিস্ক অ্যাডাপ্টারের ধরণ, uuids এবং ডিস্ক জ্যামিতির মতো বিশদ বিবরণ। আমি জানি না কিভাবে এই বিট লিখতে হয়। আমি ডিস্ক ইমেজের দিকে ইঙ্গিত করে একটি ভিএমডিকি তৈরির জন্য কেবল একটি সরঞ্জাম ব্যবহার করার পরামর্শ দেব এবং তারপরে অতিরিক্ত পার্টিশন শিরোনামটি কোথা থেকে পাওয়া যাবে সে সম্পর্কে বর্ণিত কেবলমাত্র লাইনগুলি সংশোধন করব।
হারুন

3

আকর্ষণীয় সমস্যা। আমি এখানে কি করব:

  1. যথাযথভাবে বড় ডিস্ক সহ ভিএম তৈরি করুন এবং এটি পুনরুদ্ধারের সিডি থেকে বুট করুন।
  2. আপনার বিদ্যমান ডিস্ক চিত্রটিতে কোনওভাবে অ্যাক্সেস পান (এনএফএস, সিআইএফ, ইত্যাদি)।
  3. ভিএম এর স্থানীয় ডিস্কে আপনার প্রয়োজনীয় পার্টিশনগুলি তৈরি করুন।
  4. পার্টিশনের চিত্রটি vm ডিস্কের পার্টিশনে লিখতে dd ব্যবহার করুন।

এটি সম্পন্ন করার পরে আপনাকে আপনার বুট লোডার আপডেট করতে হবে। ধরে নিই যে আপনি GRUB ব্যবহার করছেন, নতুন লিখিত পার্টিশনটি মাউন্ট করুন তারপরে এটি chroot করুন এবং চালান update-grub(যদিও সাবধান হন, এটির সঠিকরূপে কাজ করার আগে আপনাকে এর কনফিগারেশন ফাইলগুলি সামঞ্জস্য করতে হতে পারে)।

শুভকামনা!


2

আপনি জিপিআর্টেড সহ ফাইল সিস্টেমে পুনরায় আকার দিতে পারেন।

পরীক্ষার চিত্রটি তৈরি করুন:

dd if=/dev/zero of=extfs bs=1M count=20
mkfs.ext4 extfs

আমি রিসাইজ 2 এফ ব্যবহার করছি না, কারণ এটি ফাঁকা জায়গা ছাড়াই ফাইলটির আকার পরিবর্তন করে।

sudo losetup /dev/loop0 extfs
sudo ln -s /dev/loop0 /dev/loop0p1 # needed for GParted to be able to resize it
gksudo gparted /dev/loop0

শুরুতে ফ্রি 1 এমবি করুন MB

sudo rm /dev/loop0p1
sudo losetup -d /dev/loop0

অবশেষে, পার্টিশন সারণী তৈরি করুন।

fdisk extfs

প্রথম সেক্টরটি 2048 এ সেট করুন (2048 সেক্টর * 512 বি / সেক্টর = 1 এমবি), শেষ সেক্টরটি ডিফল্ট (অর্থাত্ চিত্রের শেষ)।


1

আমি ব্যক্তিগতভাবে ব্যবহার করে সংযোজন করতে পছন্দ করি dd

আমি এখানে 512-বাইট সেক্টর ধরে নিচ্ছি। 2048-বাইট সেক্টরের ক্ষেত্রে কোনও মামলা থাকতে পারে, তাই কেবল অঙ্কগুলি স্যুপে করুন এবং গণিতগুলি করুন।

প্রতিটি ক্ষেত্রে আমি একটি 512MB পরীক্ষার ফাইল ব্যবহার করছি উদাহরণস্বরূপ:

dd if=/dev/zero of=testfs.img bs=512 count=1M mkfs.ext4 testfs.img

উপস্থিত MBR

ছবিটি রচনা করছেন

আমি ব্যক্তিগতভাবে প্রথম এমবি (2048 সেক্টর) এর শুরুতে যুক্ত করতে পছন্দ করি:

dd if=testfs.img skip=2048 bs=512 of=full.img

অবশেষে বিভাজন সারণী তৈরি করতে fdisk চালান (বা নিজের কপি করুন), আমি ডিফল্ট মান ব্যবহার করে 1 পার্টিশন তৈরি করেছি।

যাচাইকরণ

যাচাই করতে, লুপ পার্টিশন এবং স্বয়ংক্রিয়করণ তৈরি করুন:

sudo losetup -fP full.img

এবং fileফলস্বরূপ পার্টিশনযুক্ত লুপব্যাক ডিভাইসটি চালান :

sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)

GPT

ছবিটি রচনা করছেন

আমি ব্যক্তিগতভাবে প্রথম এমবি সংযুক্ত করতে পছন্দ করি (2048 সেক্টর, gdisk এই সংখ্যায় ডিফল্ট হবে কারণ এটি 1 এমবি প্রান্তিকিত) শুরুতে এমবিআর এবং 34 টি সেক্টর তার শেষ দিকে (বা 2048 সম্পূর্ণ এমবিতে) শেষ হবে জিপিটি (শেষের ক্ষেত্রটি আলাদা হতে পারে)। শেষ জিপিটি ছাড়াই আপনার ডেটা হারাতে পারে:

dd if=testfs.img skip=2048 bs=512 of=full.img dd if=/dev/zero seek=1050624 bs=512 of=full.img count=34

অবশেষে পার্টিশন টেবিল তৈরি করতে gdisk চালান (বা আপনার নিজের অনুলিপি করুন), আমি ডিফল্ট মান ব্যবহার করে 1 পার্টিশন তৈরি করেছি।

যাচাইকরণ

যাচাই করতে, লুপ পার্টিশন এবং স্বয়ংক্রিয়করণ তৈরি করুন:

sudo losetup -fP full.img

এবং fileফলস্বরূপ পার্টিশনযুক্ত লুপব্যাক ডিভাইসটি চালান :

sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files) এই পদ্ধতিটি অনুমান, আকার পরিবর্তন বা ম্যানুয়ালি সারিবদ্ধকরণ নিশ্চিত করে।


আপনি জিপিটিতে চিত্রের শেষ ক্ষেত্রটি কীভাবে খুঁজে পাবেন
আনোয়ার

আমি এই চালানোর সময় আমি sudo file -s /dev/loop11p1পেয়েছিলাম /dev/loop11p1: data। যা পূর্বে একটি ext4 ফাইল সিস্টেম ছিল। এবং ফলাফল পূর্ণ.আইএমজি আরও ছোট। আমি মনে করি আপনি সমাধানটি বিপরীত পেয়েছেন।
আনোয়ার

আমি মনে করি আপনার seek=2048এই আদেশটি ডিডি বলতে চাইলে if = testfs.img এড়িয়ে যান = 2048 বিএস = 512 এর = পূর্ণ.আইএমজি
আনোয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.