কিভাবে superuser অধিকার ছাড়াই ext2 ইমেজ তৈরি করতে?


5

আমি বিভিন্ন ext2 ইমেজ জেনারেট করতে হবে। এটি করার সুস্পষ্ট উপায় হল একটি চিত্র তৈরি করা, এটি মাউন্ট করুন & amp; কন্টেন্ট কপি। তবে এটি রুট অনুমতিগুলির দুবার প্রয়োজন (ফাইলগুলি চাউন এবং ছবিটি মাউন্ট করতে)। এছাড়াও চিত্রগুলি জেনারেট করার জন্য আমি দুটি সরঞ্জাম খুঁজে পেয়েছি: e2fsimage & amp; genext2fs।

  • genext2fs ইমেজ তৈরির সময় RAM তে ছবি রাখে তবে আমার ছবির আকারের আকার ~ 30GiB।

  • e2fsimage ইমেজ আকারের কিছু মান সঙ্গে ক্র্যাশ।

তাহলে আমি কিভাবে আমার ছবি তৈরি করতে পারি? টুল ইমেজ আকার নিজেই গণনা করা হবে যদি এটা চমৎকার হবে।

উত্তর:


2

কেন figured আউট e2fsimage বিপর্যস্ত। যখন এটির আকার 4 জিআইবি থেকে বেশি হয় তখন এটি int32 ওভারফ্লো দ্বারা সৃষ্ট হয়। সুতরাং সমাধান প্রয়োজনীয় ব্লক গণনা করা হয় & amp; inodes, লুপ ফাইল তৈরি করুন ( truncate এবং; mke2fs ) এবং তারপর ব্যবহার করুন e2fsimage সঙ্গে -n যুক্তি (তাই এটি লুপফিল তৈরি করবে না কিন্তু ইতিমধ্যে তৈরি করা একটি ব্যবহার করবে)


1
আপনি কি এর জন্য একটি বাগ রিপোর্ট এবং / অথবা প্যাচ পাঠিয়েছিলেন?
— Toby Speight

আমি সন্দেহ করেছি আমি করেছি। দুঃখিত।
— Equidamoid

1

ইমেজ তৈরি রুট বিশেষাধিকার প্রয়োজন হয় না। একটি ext2 চিত্র তৈরি করার জন্য এখানে একটি উদাহরণ দেওয়া হল:

dd if=/dev/zero of=./MyDisk.ext2 bs=512 count=20480
mkfs.ext2 ./MyDisk.ext2

কিন্তু ডিভাইসটি মাউন্ট করার জন্য রুট বিশেষাধিকার প্রয়োজন:

mkdir MyDisk
sudo mount ./MyDisk.ext2 MyDisk

1

mke2fs -d ছাড়া কম রানযোগ্য উদাহরণ sudo

mke2fs e2fsprogs প্যাকেজ অংশ। বিখ্যাত লিনাক্স কার্নেল ফাইল সিস্টেম বিকাশকারী থিওডোর টি'ও ২018 সালের মতো গুগল এ লিখিত রয়েছে এবং উৎস আপস্ট্রিম kernel.org এর আওতায় রয়েছে: https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs অতএব, যে সংগ্রহস্থলটি ext ফাইল সিস্টেম ক্রিয়াকলাপগুলির একটি রেফারেন্স ইউজারল্যান্ড বাস্তবায়ন হিসাবে বিবেচিত হতে পারে:

#!/usr/bin/env bash
set -eu

root_dir=root
img_file=img.ext2

# Create a test directory to convert to ext2.
mkdir -p "$root_dir"
echo asdf > "${root_dir}/qwer"

# Create a 32M ext2 without sudo.
# If 32M is not enough for the contents of the directory,
# it will fail.
rm -f "$img_file"
mke2fs \
  -L '' \
  -N 0 \
  -O ^64bit \
  -d "$root_dir" \
  -m 5 \
  -r 1 \
  -t ext2 \
  "$img_file" \
  32M \
;

# Test the ext2 by mounting it with sudo.
# sudo is only used for testing.
mountpoint=mnt
mkdir -p "$mountpoint"
sudo mount "$img_file" "$mountpoint"
sudo ls -l "$mountpoint"
sudo cmp "${mountpoint}/qwer" "${root_dir}/qwer"
sudo umount "$mountpoint"

GitHub আপস্ট্রিম ।

কী বিকল্প -d, যা চিত্রের জন্য কোন ডিরেক্টরি ব্যবহার করে তা নির্বাচন করে, এবং এটি v1.43 এর মধ্যে তুলনামূলকভাবে নতুন সংযোজন 0d4deba22e2aa95ad958b44972dc933fd0ebbc59

তাই এটি বক্সের বাইরে উবুন্টু 18.04 এ কাজ করে, যার e2fsprogs 1.44.1-1 আছে, কিন্তু উবুন্টু 16.04 নয়, যা 1.4২.13।

যাইহোক, আমরা Buildroot এর মতই এবং উবুন্টু 16.04 এ সহজেই উৎস থেকে এটি কম্পাইল করতে পারি:

git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
cd e2fsprogs
git checkout v1.44.4
./configure
make -j`nproc`
./misc/mke2fs -h

যদি mke2fs সঙ্গে ব্যর্থ হয়:

__populate_fs: Operation not supported while setting xattrs for "qwer"
mke2fs: Operation not supported while populating file system

যখন বিকল্প যোগ করুন:

-E no_copy_xattrs

উদাহরণস্বরূপ এটি যখন রুট ডিরেক্টরি NFS বা হয় tmpfs পরিবর্তে ফাইল সিস্টেম হিসাবে এক্সএক্সএক্স প্রসারিত বৈশিষ্ট্য আছে বলে মনে হচ্ছে না ।

mke2fs প্রায়ই symlinked হয় mkfs.extX, এবং man mke2fs বলে যে যদি আপনি যেমন symlink সঙ্গে কল ব্যবহার করুন -t বোঝানো হয়।

কিভাবে আমি এটি খুঁজে বের করেছি এবং ভবিষ্যতে কোন সমস্যা সমাধান করব? Buildroot sudo ছাড়া ext2 ইমেজ জেনারেটর এখানে দেখানো হিসাবে , তাই আমি শুধু সঙ্গে বিল্ড দৌড়ে V=1 এবং ইমেজ প্রজন্মের অংশ থেকে কমান্ড বের করে যা শেষ পর্যন্ত শেষ হয়। ভাল পুরাতন কপি পেস্ট আমাকে ব্যর্থ হয়েছে।

TODO: নিম্নলিখিত সমস্যার সমাধান কিভাবে বর্ণনা করে:

এক ইমেজ ফাইল একাধিক পার্টিশন

এটা দেখ: https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-image-without-root-privileges/52850819#52850819

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