স্ক্র্যাচ থেকে ফর্ম্যাট করা পার্টিশন চিত্র ফাইলটি কীভাবে তৈরি করবেন?


16

আমার কিছুই নয় ( /dev/zero) থেকে কেবল একটি পার্টিশন দিয়ে ফাইল সিস্টেম তৈরি করতে হবে । আমি আদেশগুলির এই ক্রমটি চেষ্টা করেছি:

dd if=/dev/zero of=mountedImage.img bs=512 count=131072
fdisk mountedImage.img
    n
    p 
    2048
    131072

মূলত, আমাকে জিরো দিয়ে ভরাট 64MB চিত্র ফাইল তৈরি করতে হবে। তারপরে আমি fdiskনতুন ফাইল সিস্টেমের জন্য একটি নতুন পার্টিশন যুক্ত করতে (যা অবশেষে FAT32 হওয়া উচিত) সেক্টর থেকে শুরু করে 2048এবং সমস্ত অবশিষ্ট সেক্টর ব্যবহার করে ব্যবহার করব।

losetup /dev/loop1 mountedImage.img
mkfs -t vfat /dev/loop1

তবে এখানে আমি সমস্যাগুলি মারছি। যদি আমি কোনও loopডিভাইস সেট আপ করি এবং এটি ব্যবহার করে ফর্ম্যাট করি তবে mkfs -t vfatপার্টিশন টেবিলটি ওভাররাইট করা হবে এবং ফাইল সিস্টেম (FAT32) ডিস্কে স্থাপন করা হবে। আমার FAT32 দিয়ে ফর্ম্যাট করা পুরো ডিস্কের দরকার নেই, আমার প্রাথমিক পার্টিশনটি এমন হওয়া দরকার।

কেউ কি জানেন যে আমি কীভাবে কাঁচা ডিস্ক চিত্রের একমাত্র পার্টিশনটিকে পুরো চিত্রটি ফর্ম্যাট করতে পারি?


লুপ ডিভাইস সেট আপ করে আপনার সম্পূর্ণ mkfsকল পোস্ট করে আপনি কী বোঝাতে চাইছেন দয়া করে তা স্পষ্ট করুন। আপনার সমস্যাটি বুঝতে আমাকে 3 বার পড়তে হয়েছিল। আমি আপনাকে সহায়তা করতে না পারার পরে, আপনি কেন একটি চিত্র ফাইল (!) তৈরি করেন তা নিয়ে আমি ইন্টারেস্টেড তবে এখনও প্রথম এন "সেক্টর" অব্যবহৃত রাখতে চাই।
বনাঙ্গুইন

ঠিক আছে, এটি সম্পাদিত। আমি প্রথম এন সেক্টরগুলি (সেক্টরগুলির সাথে কী সমস্যা?) অব্যাহত রাখতে চাই, কারণ আমার বুটলোডারগুলি অন্য কোথাও রাখার দরকার রয়েছে।
ব্যবহারকারী 35443


@ মিশেলমরোজেক এমন কিছু বিবেচনা রয়েছে যা কিছু লিনাক্স ডিস্ট্রিবিউশনের ক্ষেত্রে প্রযোজ্য তবে উবুন্টু নয় (এটি loopকোনও মডিউল বা কার্নেলের মধ্যে অন্তর্নির্মিত কিনা তা বিবেচনা করে) তাই আমি মনে করি প্রতিটি সাইটের পক্ষে তার সংস্করণটির প্রশ্নের সংস্করণ থাকতে হবে এবং আমি আবার খুলতে ভোট দিয়েছি।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

@ মিশেলমরোজক ব্যক্তিগতভাবে, আমি অনুভব করি যে ইউনিক্স এবং লিনাক্সের তুলনায় আস্কউবুন্টু আরও নির্দিষ্ট, তাই যদি এখানে কোনও প্রশ্ন বন্ধ করার নির্দিষ্ট কারণ না থাকে তবে এটি আসকউবুন্টু-তে একটি যে ক্রস-পোস্ট হিসাবে বন্ধ করা উচিত একে একে "প্রথম" যেখানে পোস্ট করা হয়েছিল তা নির্বিশেষে একে অপরের সাথে কাছাকাছি পোস্ট করা হয়েছে (সম্ভবত এখানে উবুন্টু / নন-উবুন্টু উত্তরগুলির উল্লেখ সহ)। এখানে এটির একটি স্বীকৃত উত্তর রয়েছে, যা আস্কউবুন্টুতে উত্তর দেয় না, যা এইটিকে খোলা আইএমও রাখার পক্ষে জোরালোভাবে সমর্থন করে। আসকউবুন্টু বন্ধ করার জন্য আমার কাছে ভোট দেওয়ার মতো প্রতিনিধি নেই তবে প্রশ্নটি এখানে আবার খুলতে ভোট দিচ্ছি।
একটি সিভিএন

উত্তর:


20

যদি লিনাক্সে থাকে, loopমডিউলটি লোড করার সময় , আপনি max_partমডিউলটিতে একটি বিকল্প পাস করেছেন তা নিশ্চিত করুন যাতে লুপ ডিভাইসগুলি পার্টিশনযোগ্য হয়।

বর্তমান মান পরীক্ষা করুন:

cat /sys/module/loop/parameters/max_part

যদি এটি 0:

modprobe -r loop # unload the module
modprobe loop max_part=31

এই সেটিংটি অবিরাম রাখতে, আপনার সিস্টেমে ডিরেক্টরিটি বিদ্যমান থাকলে নিম্নলিখিত লাইনটি /etc/modprobe.confবা কোনও ফাইলে যুক্ত /etc/modprobe.dকরুন:

options loop max_part=31

যদি modprobe -r loopব্যর্থ হয় কারণ "মডিউল লুপটি অন্তর্নির্মিত", আপনাকে loop.max_part=31আপনার কার্নেল কমান্ড লাইনে যুক্ত করতে হবে এবং পুনরায় বুট করতে হবে। আপনার বুট-লোডার Grub2 হয়, তাহলে এর মান থেকে এটি যোগ GRUB_CMDLINE_LINUXমধ্যে etc/default/grub

এখন, আপনি একটি পার্টিশনযোগ্য লুপ ডিভাইস তৈরি করতে পারেন:

truncate -s64M file # no need to fill it with zeros, just make it sparse
fdisk file # create partitions
losetup /dev/loop0 file
mkfs.vfat /dev/loop0p1 # for the first partition.
mount /dev/loop0p1 /mnt/

(নোট করুন যে আপনার লিনাক্সের তুলনামূলক সাম্প্রতিক সংস্করণ প্রয়োজন)।


ফ্যাটাল: মডিউল লুপটি অন্তর্নির্মিত, এটি কি উবুন্টুর সর্বশেষতম সংস্করণটি ইনস্টল করা সমাধান করা যাবে (আমার কাছে 12.04 আছে)?
ব্যবহারকারী 35443

যদি মডিপ্রোবাইয়ের প্রয়োজন না loop.max_part=31হয় তবে কার্নেল কমান্ড লাইনে পাস করুন
অ্যালেক্স

1
আহ আমি দেখছি, যদি আপনি সাম্প্রতিক কার্নেল হয়ে থাকেন এবং আপনি অফসেটটি সর্বাধিক পার্টটি পাস করেন এবং সিলিমিটের কোনও প্রয়োজন হয় না
অ্যালেক্স

হুম, কার্নেল কমান্ড লাইন আমার পক্ষে খুব কঠিন। তবুও ধন্যবাদ, গ্রহণ।
ব্যবহারকারী 35443

এটি loop.maxpart=31বা loop.max_part=31কার্নেল কমান্ড লাইনে?
ক্রিশ্চিয়ান সিউপিতু

4

losetup /dev/loop0 file -o 1048576 --sizelimit limit

অফসেট নির্দিষ্ট করা বাইটে হওয়া উচিত (1048576 = 2048 সেক্টর * সেক্টর প্রতি 512 বাইট)।

mount -o loop,offset=1048576,sizelimit=limit

আরও তথ্যের জন্য দেখুন losetup এবং মাউন্ট


হুম, অফসেট, এটি কাজ করা উচিত। এবং যদি আমার এতে আরও পার্টিশন থাকে?
ব্যবহারকারী 35443

আমি অনুমান করি একটি লুপ = একটি বিভাজন = একটি অফসেট।
অ্যালেক্স

আহ, এবং আকারটিও নির্দিষ্ট করার একটি বিকল্প আছে, তাই আমি এটি সীমাবদ্ধ করতে এবং আরও পার্টিশন রাখতে পারি?
ব্যবহারকারী 35443

আংশিক সমাধান সহ নতুন উত্তর তৈরি করার জন্য আমার দোষ, সঠিক উত্তরটি @ "স্টিফেন চ্যাজেলাস" থেকে এসেছে, তিনি কেবল অফসেট এবং সিজিলিমিট বিকল্পগুলি যোগ করতে পারেন (তারপরে আমি আমার মুছে ফেলব)
অ্যালেক্স

এটি এখানে না থাকুক, বা আমার +1 কোথাও যাবে না।
ব্যবহারকারী 35443

2

নিম্নলিখিত পদ্ধতিগুলি আপনাকে চিত্রের পার্টিশনগুলি এগুলি সংশোধন করার জন্য মাউন্ট করতে দেয়।

হারান 2.2 -P বিকল্প

losetup -P -f --show my.img

/dev/loopXpYপার্টিশন প্রতি একটি তৈরি করে ।

সুবিধা: কার্যকর করা অনেকগুলি ডিস্ট্রোতে (ইউজার-লিনাক্স প্যাকেজ) প্রাক-ইনস্টল করা।

অসুবিধা: বেশ সাম্প্রতিক বিকল্প, উবুন্টুতে উপস্থিত নেই 14.04।

losetup -P স্বয়ংক্রিয়তা

ব্যবহার:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

সূত্র:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    sudo mkdir -p "$dst"
    sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)

kpartx

sudo apt-get install kpartx
losetup -fs my.raw
sudo kpartx -a my.img
ls /dev/mapper

আউটপুট:

/dev/mapper/loop0
/dev/mapper/loop0p1

loop0p1প্রথম বিভাজনটি কোথায় , তাই আমরা এটি করতে পারি:

mkdir -p d
sudo mount /dev/mapper/loop0p1 d

এই পদ্ধতির সুবিধা: রিবুট না করে উবুন্টু 14.04 এ কাজ করে।

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