2015 সম্পাদনা করুন
ইউজন-লিনাক্স ২.২৫ হিসাবে লিনাক্সে fallocate
ইউটিলিটির পক্ষে একটি -d
/ --dig-hole
বিকল্প রয়েছে।
fallocate -d the-file
ফাইলের জিরো পূর্ণ প্রতিটি ব্লকের জন্য একটি গর্ত খনন করবে
পুরানো সিস্টেমে, আপনি এটি হাত দ্বারা করতে পারেন:
লিনাক্সের একটি FALLOC_FL_PUNCH_HOLE
বিকল্প রয়েছে যা fallocate
এটি করতে পারে। আমি একটি উদাহরণ সহ গিথুবে একটি স্ক্রিপ্ট পেয়েছি:
পাইথন থেকে FALLOC_FL_PUNCH_HOLE ব্যবহার করা
আপনি যা বলেছিলেন তা করার জন্য আমি এটি কিছুটা সংশোধন করেছি - শূন্যে ভরা ফাইলগুলির অঞ্চলে পাঞ্চ গর্ত। এটা এখানে:
পাইথন থেকে FALLOC_FL_PUNCH_HOLE ব্যবহার করে ফাইলগুলিতে ছিদ্র করতে পারে
usage: punch.py [-h] [-v VERBOSE] FILE [FILE ...]
Punch out the empty areas in a file, making it sparse
positional arguments:
FILE file(s) to modify in-place
optional arguments:
-h, --help show this help message and exit
-v VERBOSE, --verbose VERBOSE
be verbose
উদাহরণ:
# create a file with some data, a hole, and some more data
$ dd if=/dev/urandom of=test1 bs=4096 count=1 seek=0
$ dd if=/dev/urandom of=test1 bs=4096 count=1 seek=2
# see that it has holes
$ du --block-size=1 --apparent-size test1
12288 test1
$ du --block-size=1 test1
8192 test1
# copy it, ignoring the hole
$ cat test1 > test2
$ du --block-size=1 --apparent-size test2
12288 test2
$ du --block-size=1 test2
12288 test2
# punch holes again
$ ./punch.py test2
$ du --block-size=1 --apparent-size test2
12288 test2
$ du --block-size=1 test2
8192 test2
# verify
$ cmp test1 test2 && echo "files are the same"
files are the same
নোট করুন যে punch.py
মুষ্ট্যাঘাতের জন্য কেবল 4096 বাইটের ব্লকগুলি সন্ধান করে, সুতরাং এটি শুরু করার সময় এটি কোনও ফাইলকে ঠিক তেমন বিরল তৈরি করতে পারে না। এটি অবশ্যই স্মার্ট তৈরি করা যেতে পারে। এছাড়াও, এটি কেবলমাত্র হালকাভাবে পরীক্ষা করা হয়েছে , সুতরাং এটির উপর নির্ভর করার আগে সাবধান এবং ব্যাকআপগুলি তৈরি করুন !