কিভাবে 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.