এসডি কার্ডে লেখার আগে একটি চিত্র ফাইলকে কীভাবে পুনরায় আকার দিন?


13

আমি একটি আলাদা কার্নেল (সিএএন সমর্থন সহ) এবং পাইথন ৩.৩ ইনস্টল করে একটি নতুন রাস্পবিয়ান চিত্র তৈরি করার চেষ্টা করছি। রাস্পবেরি পাইতে এগুলি করার পরিবর্তে, আমি ভেবেছিলাম পরিবর্তে কম্পিউটারে এটি করা আকর্ষণীয় হবে ( এই নির্দেশাবলী অনুসরণ করে )। যাইহোক, একবার আমি চিত্রটি মাউন্ট এবং যেতে প্রস্তুত পেয়েছিলাম, আমি দ্রুত ডিস্কের জায়গার বাইরে চলে গেল। আমি অনুমান করি কারণ চিত্রটি কেবলমাত্র এসডি কার্ডে লিখিত হয়ে গেলে ফাইল-সিস্টেমটিকে পুনরায় আকার দেবে এই প্রত্যাশার সাথে চিত্রটি কেবলমাত্র যথেষ্ট বড় আকারের হয়।

এসডি কার্ডে লেখার আগে চিত্র এবং ফাইল-সিস্টেমকে পুনরায় আকার দেওয়া কি সম্ভব হবে যাতে আমি স্থান ছাড়িয়ে না গিয়ে আরও কাস্টমাইজেশন করতে পারি?


এই প্রশ্নটি সম্ভবত আপনাকে সাহায্য করবে।
জিভিংস

1
@ জিভিংস: এসডি কার্ডে লিখিত হওয়ার পরে এই সমস্ত উত্তর চিত্রটি কীভাবে আকার পরিবর্তন করতে পারে তা বর্ণনা করে । আমি জানি যে কিভাবে করতে হয়; আমি এসডি কার্ডে লেখার আগে চিত্রটি কীভাবে পুনরায় আকার দেবে সে বিষয়ে আগ্রহী ।
DrAl

উত্তর:


8

কাঁচা চিত্রের ফাইলটি এইভাবে আকার পরিবর্তন করতে হয়। আমি জানি এটি নির্বোধ সরল মনে হলেও এটি কার্যকর হবে।

আপনি মূলটি প্রসারিত করতে চান এমন আকারের একটি ফাঁকা চিত্র তৈরি করুন (আমার উদাহরণে আমি 5 জিবি ব্যবহার করি);

dd if=/dev/zero of=/path/to/temp_image bs=1 count=1 seek=5G

এটি মূল চিত্রটিতে যুক্ত করুন:

cat /path/to/temp_image >> /path/to/rasperrypi.img

ডিস্কের শেষে যে ফাইল সিস্টেমটি থাকে তা পুনরায় আকার দিন (সাধারণত এটিই আপনি বড় চান):

resize2fs -f /path/to/rasperrypi.img

সম্পন্ন! আপনার ডিস্কটি এখন 5 গিগাবাইট বড় হওয়া উচিত!


এটি নিখুঁত শোনায়, আপনাকে ধন্যবাদ: আমি আজ রাতে এই পরীক্ষা করব।
DrAl

5
আমি কেবল এটি চেষ্টা করেছি এবং যখন আমি পুনরায় আকার 2fs পর্যায়ে পৌঁছলাম (ফাইলে 1GB যুক্ত করার পরে), আমি "2012-10-16-হুইজি-রাস্পবিয়ান.আইএমজি খোলার চেষ্টা করতে গিয়ে সুপার-ব্লকে খারাপ জাদু নম্বর পেয়েছি ' টি বৈধ ফাইল সিস্টেম সুপারব্লকটি আবিষ্কার করে না। " আমি কী ভুল করছি সে সম্পর্কে কোনও পরামর্শ?
DrAl

এটি আমার কাছে মনে হচ্ছে এটি একটি সমস্যা যে আমি পার্টিশনের পরিবর্তে পুরো চিত্রটিকে (/ dev / sda এর সমতুল্য) আকার দিতে চাইছি (/ dev / sda2 এর সমতুল্য) সাথে পুনরায় আকার দেওয়ার চেষ্টা করছি। তবে, আমি ভুল হতে পারি এবং আমি সাফল্য ব্যতীত আরও কয়েকটি জিনিস চেষ্টা করেছি (যেমন fdisk দিয়ে পার্টিশনের আকার পরিবর্তন করা, যা কাজ করে বলে মনে হয় তবে ফাইল সিস্টেমের আকার পরিবর্তন করতে আমাকে সহায়তা করে না)।
ডাঃআল

3
ঠিক আছে, আমি কিছুটা গুগল করে শেষ বিটের উত্তর খুঁজে পেয়েছি: আমার একটি লুপ ডিভাইস তৈরি করতে ইমেজের পার্টিশনের দিকে নির্দেশ করা দরকার needed আমি এর পরে দ্বিতীয় পার্টিশনের শুরু সেক্টরটি পেয়েছিলাম fdisk -l file.img(এটি ছিল 122880) এবং তারপরে losetup --offset $((122880 * 512)) /dev/loop0 file.img। আমি তখন ব্যবহার করতে পারে resize2fsউপর /dev/loop0এবং আপ পরিপাটি losetup -d /dev/loop0। আপনি যদি এই উত্তর অন্তর্ভুক্ত করতে আপনার উত্তর আপডেট করেন তবে আমি এটিকে স্বীকৃত উত্তর হিসাবে চিহ্নিত করব। আমাকে সঠিক দিকে নির্দেশ করার জন্য ধন্যবাদ।
DrAl

1
@ ডিআরএল, হ্যালো, আমি আপনার সমাধানটি ব্যবহার resize2fsকরে চেষ্টা করেছি /dev/loop0কিন্তু সুপারব্লকের আকার এবং পার্টিশনের আকার মেলে না বলে বুটে একটি কর্নেল আতঙ্ক পেয়েছি: The filesystem size (according to the superblock) is 483840 blocks The physical size of the device is 458240 blocksআপনি কি এরকম কিছু পেয়েছেন?
গাইসফট

4

এটি উপরের এবং অন্যত্র যে উত্তরগুলি আমার পক্ষে কাজ করেছিল তার সংশ্লেষণ - আপনার কোনও ভুল হলে আপনার চিত্রটির ব্যাক আপ দিন:

প্রথমে চিত্র ফাইলটি আরও বড় করুন (এখানে আমরা শেষ পর্যন্ত 1 জিবি যুক্ত করছি):

truncate -s +1G ./image.img

পরবর্তী চিত্রটিকে লুপ ডিভাইস হিসাবে পুরো ম্যাপ করুন যাতে আমরা পার্টিশন টেবিলে ঝাঁকুনি পারি

sudo losetup /dev/loop0 ./image.img

ভবিষ্যতের রেফারেন্সের জন্য এটি এড়িয়ে দিতে দেয়:

sudo fdisk -l /dev/loop0

আউটপুট দেখে মনে হচ্ছে:

Disk /dev/loop0: 2962 MB, 2962227200 bytes
255 heads, 63 sectors/track, 360 cylinders, total 5785600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c4661

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/loop0p2          122880     5785599     2831360   83  Linux

এখন আমরা এটিকে মোছার মধ্য দিয়ে শেষ পার্টিশনটি পুনরায় তৈরি করব, তারপরে এটি আবার একই সূচনার স্থানে, একই ধরণের তবে ভিন্ন প্রান্তের স্থানে পুনরায় তৈরি করব। সুতরাং loop0p2 (পার্টিশন 2 - লিনাক্স পার্টিশন) এর জন্য "শুরু" কলামটি নোট করুন - আমরা এটি পরে ব্যবহার করব - এটি এখানে 122880।

sudo fdisk /dev/loop0

নিম্নলিখিত লিখুন - এগুলি প্রবেশের জন্য নিরাপদ - আপনি আমার ব্যাখ্যাটি নীচে না পড়লে স্থায়ী কিছুই ঘটে না:

  1. p
  2. d
  3. 2
  4. n
  5. p
  6. 2
  7. 122880
  8. ডিফল্ট গ্রহণ করতে কেবল এন্টার চাপুন
  9. p

পদক্ষেপ 1 - বর্তমান সারণী মুদ্রণ করুন। পদক্ষেপ 2-3 - বিভাজন মুছুন 2, পদক্ষেপ 4-8 - পার্টিশন 2 পুনরায় তৈরি করুন নতুন সমাপ্তি বিন্দু (ডিফল্ট চিত্রের শেষ), পদক্ষেপ 9 - নতুন টেবিলটি মুদ্রণ করুন।

ধরে নেওয়া আপনার সদ্য মুদ্রিত সারণীটি শেষ মান এবং ব্লক মান (অর্থাত্ আকার পরিবর্তন হয়েছে) ব্যতীত মূল টেবিলের সাথে সমান is আপনি প্রতিশ্রুতিবদ্ধ।

লিখুন wআপনার পরিবর্তন কমিট, তারপর লিখুন qপ্রস্থান করার জন্য।

আপনি সেই লুপব্যাক ডিভাইসটি মুছতে পারেন, আমরা দ্বিতীয় বিভাজনের জন্য অন্যটি তৈরি করব। আপনি উল্লিখিত এবং উপরে ব্যবহৃত অফসেট মনে রাখবেন - আমরা এটি আবার ব্যবহার করব:

sudo losetup -d /dev/loop0     # delete the old loop setup
sudo losetup -o $((122880*512)) /dev/loop0 ./image.img

এটি /dev/loop0কেবলমাত্র পার্টিশন 2 এ নির্দেশ করে একটি নতুন ম্যাপিং তৈরি করবে - রেফারেন্সের জন্য 512 হল প্রথম fdiskআউটপুটে আপনি দেখতে পাচ্ছেন এমন খাত-আকার ।

উপলভ্য স্থান পূরণ করতে পার্টিশনের আকার পরিবর্তন করুন:

sudo e2fsck -f /dev/loop0
sudo resize2fs /dev/loop0

সম্পন্ন - এখন পরিষ্কার করুন:

sudo losetup -d /dev/loop0

ধন্যবাদ ... উপরোক্ত নির্দেশাবলী আমার পক্ষে কার্যকর হয়নি তবে এটি কার্যকর হয়েছিল। পার্টিশন টেবিল লেখার সময় আমি কিছু সতর্কতা পেয়েছিলাম: `` `কমান্ড (সহায়তার জন্য এম): w পার্টিশন টেবিলটি পরিবর্তন করা হয়েছে। পার্টিশন টেবিলটি পুনরায় পড়তে ioctl () কল করা হচ্ছে। পার্টিশন টেবিলটি পুনরায় পড়া ব্যর্থ হয়েছে: অবৈধ যুক্তি কার্নেলটি এখনও পুরানো টেবিলটি ব্যবহার করে। নতুন টেবিলটি পরবর্তী পুনরায় বুট করা হবে বা আপনি পার্টপ্রোব (8) বা কেপার্টেক্স (8) চালানোর পরে ব্যবহার করা হবে। Just `` আমি এটিকে কেবল উপেক্ষা করেছি এবং এটি ভাল ছিল।
স্টাফস

অসাধারণ! আপনিই একমাত্র সঠিক উত্তর দিয়েছেন! ধন্যবাদ।
yusulx

3

যাদের ওরাকল ভিএম ভার্চুয়ালবক্স চলছে তাদের পক্ষে এটি বেশ সহজ।

উইন্ডোজ মেশিনে জিনিসগুলি নীচে চলে:

input.imgএখানে কোন চিত্রটি হ্রাস করা উচিত এবং output.imgএটিই চূড়ান্ত চিত্র - এই উদাহরণটিতে 7000 এমবি বৃহত্তর হিসাবে সংজ্ঞায়িত করা হয়েছে।

ECHO "========================================================================="
ECHO "input.img => output.img"

ECHO "========================================================================="

DEL  input.vdi

DEL  output.vdi

DEL  output.img

ECHO "========================================================================="
"C:\Program Files\Oracle\VirtualBox\VBoxManage" convertfromraw input.img input.vdi -format VDI --variant Standard

ECHO =========================================================================
"C:\Program Files\Oracle\VirtualBox\VBoxManage" createhd --filename output.vdi --size 7000 --format VDI --variant Standard

ECHO =========================================================================
"C:\Program Files\Oracle\VirtualBox\VBoxManage" clonehd input.vdi output.vdi --existing

ECHO =========================================================================
"C:\Program Files\Oracle\VirtualBox\VBoxManage" clonehd output.vdi output.img --format RAW

আশা করি এটা কিছুটা সাহায্য করবে।


এই সমাধানের জন্য ধন্যবাদ, খুব চতুর। এটি কেবলমাত্র আমি খুঁজে পেয়েছি যা বিনামূল্যে এবং উইন্ডোজে পুরোপুরি কাজ করে। আমার 16 জিবি কার্ড নিয়ে কিছু সমস্যা ছিল যা একেবারে একই আকারের ছিল না এবং আমার চিত্রটিকে পুনরায় আকার দেওয়ার প্রয়োজন ছিল।
জোশ

আমি কার্নেল প্যানিক ত্রুটি পেয়েছি। Kernel panic - not syncing: VFS: Unable to mount rootfs on unknown-block(179,2)
JPX

মনে রাখবেন এটি চিত্রটি ছাঁটাই করছে - যদি 7000MB চিহ্নের অতীত থাকে তবে আপনি ডেটা হারাবেন - আদেশগুলি সতর্কতা বা অভিযোগ করবে না।
মাইক রেড্রোব

2

কাঁচা চিত্রের ফাইলটি এইভাবে আকার পরিবর্তন করতে হয়। আমি জানি এটি নির্বোধ সরল মনে হলেও এটি কার্যকর হবে।

আপনি মূলটি প্রসারিত করতে চান এমন আকারের একটি ফাঁকা চিত্র তৈরি করুন (আমার উদাহরণে আমি 5 জিবি ব্যবহার করি);

dd if=/dev/zero of=/path/to/temp_image bs=1 count=1 seek=5G

এটি মূল চিত্রটিতে যুক্ত করুন:

cat /path/to/temp_image >> /path/to/rpi.img

এরপরে পার্টিশন এবং ফাইল সিস্টেমের আকার পরিবর্তন করা হচ্ছে। প্রথমে পার্টিশনের অফসেট পান;

fdisk -l /path/to/rpi.img

এর মতো সারণীতে ফলাফল:

Device    Boot   Start      End   Sectors   Size  Id  Type
rpi.img1          8192   122879    114688    56M   c  W95 FAT32 (LBA)
rpi.img2       1122880  8447999   8325120     4G  83  Linux

দ্বিতীয় বিভাজনের প্রারম্ভের অফসেটটি নোট করুন

losetup --offset $((122880 * 512)) /dev/loop0 /path/to/rpi.img
e2fsck -f /dev/loop0
resize2fs -f /dev/loop0

শেষ অবধি আনমাউন্ট / দেব / লুপ

losetup -d /dev/loop0

সম্পন্ন! আপনার ডিস্কটি এখন 5 গিগাবাইট বড় হওয়া উচিত!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.