আমার কাছে একটি 4 জিডি এসডি কার্ডের একটি ডিডি চিত্র রয়েছে যার দুটি পার্টিশন রয়েছে, এই দুটি পার্টিশনটি প্রায় 800 এমবি ব্যবহার করছে এবং যেমন আমি ইমগ ফাইয়ের আকার হ্রাস করতে চাই।
Img ফাইল থেকে "ফ্রি স্পেস" সরিয়ে ফেলার কোনও উপায় কি কেউ জানেন?
আমার কাছে একটি 4 জিডি এসডি কার্ডের একটি ডিডি চিত্র রয়েছে যার দুটি পার্টিশন রয়েছে, এই দুটি পার্টিশনটি প্রায় 800 এমবি ব্যবহার করছে এবং যেমন আমি ইমগ ফাইয়ের আকার হ্রাস করতে চাই।
Img ফাইল থেকে "ফ্রি স্পেস" সরিয়ে ফেলার কোনও উপায় কি কেউ জানেন?
উত্তর:
প্রথমে নিশ্চিত করুন যে খালি জায়গাটি আসলে ফাঁকা এবং এতে মুছে ফেলা ফাইলগুলির অবশিষ্টাংশ নেই। এটি অর্জনের সবচেয়ে সহজ উপায় হ'ল ডিস্কে একটি বিশাল ফাইল তৈরি করা, যার মধ্যে কেবল নাল বাইট থাকে, তারপরে এটি মুছুন।
# losetup --find --partscan foo.img
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 4096M 0 loop
├─loop0p1 259:0 0 2048M 0 loop
└─loop0p2 259:1 0 2048M 0 loop
# for part in /dev/loop0p*; do
mount $part /mnt
dd if=/dev/zero of=/mnt/filler conv=fsync bs=1M
rm /mnt/filler
umount /mnt
done
dd: error writing ‘/mnt/filler’: No space left on device
dd: error writing ‘/mnt/filler’: No space left on device
# losetup --detach /dev/loop0
তারপরে gzip
বা এর মতো কোনও সরঞ্জাম দিয়ে এটি সংকুচিত করুন xz
। এমনকি সর্বনিম্ন সংক্ষেপণের স্তরেও, একটি দীর্ঘ সিরিজের জিরো ভালভাবে সংকোচিত হবে:
# ls -s
4096M foo.img
# gzip foo.img
# ls -s
11M foo.img.gz
মনে রাখবেন যে ডিস্কে আবার লেখার সময় আপনাকে অবশ্যই চিত্রটি সঙ্কুচিত করতে হবে। এটি এটি 'লাইভ' সঙ্কুচিত করবে:
# cat foo.img.gz | gunzip | dd of=/dev/sda
নোট করুন যে আউটপুট ডিভাইস (এসডিএ) অবশ্যই মূল চিত্রের ফিট করার জন্য পর্যাপ্ত আকারের হতে হবে , অন্যথায় ডেটা হারিয়ে যাবে বা ক্ষতিগ্রস্থ হবে।
একটি বিকল্প পদ্ধতি, যদি আপনি চিত্রটি ব্যবহার করে চালিয়ে যেতে চান - যেমন ভার্চুয়াল মেশিনের সাহায্যে - কাঁচা চিত্রটি ভার্চুয়ালাইজেশন সফ্টওয়্যার দ্বারা ব্যবহৃত কোনও চিত্র বিন্যাসে রূপান্তর করা; উদাহরণস্বরূপ Qemu এর qQ2, ভার্চুয়ালবক্সের জন্য ভিডিআই, বা ভিএমওয়্যারের জন্য VMDK।
মনে রাখবেন যে এরপরেও আপনাকে উপরের পদ্ধতিটি ব্যবহার করে খালি জায়গাটি পরিষ্কার করে চিত্রটি প্রস্তুত করা প্রয়োজন।
# qemu-img convert -f raw -O qcow2 foo.img foo.qcow
# qemu-img convert -f raw -O vmdk foo.img foo.vmdk
তবে যদি এটি আবার একটি বাস্তব ডিস্কে লেখা যায়, আপনাকে এটিকে আবার কোনও কাঁচা চিত্রে রূপান্তর করতে হবে।
resize2fs
বা ntfsresize
(লিনাক্সের FAT এর কোনও সরঞ্জাম নেই), এটি ছোট ডিভাইসে লেখার আগে, বা একটি নতুন ফাইল সিস্টেম তৈরি করে এবং কেবলমাত্র ফাইলগুলিতে অনুলিপি করে।
ব্যবহার resize2fs
করা অনেক সহজ
resize2fs -M xxx.img
আপনাকে প্রথমে e2fsck করতে বলা হবে - সুতরাং:
e2fsck -f -y xxx.img
(চিত্র অবশ্যই মাউন্ট করা উচিত নয়!)
দ্রষ্টব্য: এটি কেবল তখনই কাজ করবে যদি চিত্রটি একক বিভাজনের হয়, যদি এটি একাধিক পার্টিশনযুক্ত পুরো ব্লক ডিভাইসটি উপরের উত্তরটি দেখে ...
losetup --find --partscan xxx.img
লুপ ডিভাইস হিসাবে চিত্র ফাইল সেটআপ করতে ব্যবহার করুন। তারপরে lsblk
লুপ ডিভাইসের পার্টিশনগুলি অনুসন্ধান করতে দৌড়াতে পারেন।
resize2fs
এটি কেবল extN
টাইপ পার্টিশনের জন্য। অন্যান্য ধরণের পার্টিশনের জন্য অন্যান্য সরঞ্জামের প্রয়োজন হবে।
আমি এটি কেমু-ইমগ দিয়েও চেষ্টা করেছি এবং এটি একটি কবজির মতো কাজ করেছে:
qemu-img resize test.img 2G
আমরা test.img
এটি 2 জি (2 জিবি) তৈরির জন্য আকার পরিবর্তন করছি ।
আমার জন্য নির্দোষ কাজ করেছেন।
df -h
আসল আকারটি দেখায়। এটা কিভাবে সম্ভব?
আমি আমার উবুন্টু 16.10 কম্পিউটারের সাথে জিপিআর্ট পদ্ধতির ব্যবহার করেছি:
1) losetup
উপরের হিসাবে আগের পোস্টগুলিতে বর্ণিত হিসাবে পরবর্তী উপলব্ধ লুপ বিভাজনের সাথে img ফাইলটি মানচিত্র করুন
2) সাথে চেক করুন lsblk
আপনার চিত্রের ফাইলটি কোন লুপ ড্রাইভের ম্যাপ করা হয়েছে তা পরীক্ষা করুন eg/dev/loop0
3) কার্যকর করুন sudo gparted /dev/loop0
4) লুপ পার্টিশন (গুলি) যথাযথ হিসাবে বিবেচনা করুন সঙ্কুচিত করুন; দয়া করে এই পার্টিশনগুলি আনমাউন্ট করা আছে কিনা তা নিশ্চিত করুন।
5) এক্সিকিউট করুন fdisk /dev/loop0
, তারপরে প্রবেশ করুনp
, এটি আপনাকে বিভিন্ন পার্টিশনের ব্লক আকার এবং শেষের ব্লক নম্বরটি দেখায়।
6) সম্পাদন dd if=/dev/loop0 of=shrunk_image_file.img
, যে কমান্ড অপশন প্রয়োগ bs=[BlockSize]
এবং count=[EndBlockNumberOfLastLoopPartition+1]
এবং আপনি একটি সঙ্কুচিত এবং rightsized ইমেজ ফাইল থাকবে।