প্রথমে আপনি এই ধরণের সমস্যা নিয়ে বিস্মিত হয়ে একা নন ।
এটি কেবল সীমাবদ্ধ নয় tmpfs
তবে এটি এনএফএসভি 4 এর সাথে উদ্ধৃত একটি উদ্বেগ
।
যদি কোনও অ্যাপ্লিকেশন একটি ছিদ্রযুক্ত ফাইলের 'ছিদ্র' পড়েন, ফাইল সিস্টেম শূন্য ব্লকগুলিকে জিরো ভরাট "রিয়েল" ব্লকে রূপান্তর করে এবং সেগুলিকে অ্যাপ্লিকেশনটিতে ফিরিয়ে দেয়।
যখন md5sum
কোনও ফাইল স্ক্যান করার চেষ্টা করা হয় তখন এটি স্পষ্টতই
অনুক্রমিক ক্রমে এটি করার জন্য চয়ন করে , যা এমডি 5সাম কী করার চেষ্টা করছে তার উপর ভিত্তি করে অনেক অর্থবোধ করে।
যেহেতু ফাইলটিতে মৌলিকভাবে "ছিদ্র" রয়েছে, এই ক্রমিক পাঠকটি (কিছু পরিস্থিতিতে) ফাইলটি পূরণ করার জন্য অপারেশনের মতো লেখার অনুলিপি তৈরি করতে চলেছে। এরপরে fallocate()
এটি ফাইলসিস্টেম সমর্থন হিসাবে প্রয়োগ করা হয়েছে কিনা তা আশেপাশের গভীর সমস্যার মধ্যে পড়ে FALLOC_FL_PUNCH_HOLE
।
ভাগ্যক্রমে, এটি কেবল tmpfs
সমর্থন করে না তবে গর্তগুলি আবার "খনন" করার ব্যবস্থা রয়েছে।
সিএলআই ইউটিলিটি ব্যবহার করে fallocate
আমরা সফলভাবে এই গর্তগুলি সনাক্ত করতে এবং পুনরায় খনন করতে পারি।
অনুসারে man 1 fallocate
:
-d, --dig-holes
Detect and dig holes. This makes the file sparse in-place, without
using extra disk space. The minimum size of the hole depends on
filesystem I/O block size (usually 4096 bytes). Also, when using
this option, --keep-size is implied. If no range is specified by
--offset and --length, then the entire file is analyzed for holes.
You can think of this option as doing a "cp --sparse" and then
renaming the destination file to the original, without the need for
extra disk space.
See --punch-hole for a list of supported filesystems.
fallocate
করে পরিচালিত ফাইল স্তর যদিও এবং আপনি দৌড়াচ্ছে md5sum
একটি বিরুদ্ধে ব্লক ডিভাইস (অনুরোধ অনুক্রমিক সার্চ) আপনি কিভাবে মধ্যে সঠিক ফাঁক আপ দ্রুতগামী করছি fallocate()
প্রাপ্ত syscall চালনা করা উচিত নয়। আমরা এটি কার্যকরভাবে দেখতে পারি:
ক্রিয়া হিসাবে, আপনার উদাহরণ ব্যবহার করে আমরা নিম্নলিখিতটি দেখতে পাই:
$ fs=$(mktemp -d)
$ echo ${fs}
/tmp/tmp.ONTGAS8L06
$ dd if=/dev/zero of=${fs}/sparse100M conv=sparse seek=$((100*2*1024-1)) count=1 2>/dev/null
$ echo "Before:" "$(ls ${fs}/sparse100M -s)"
Before: 0 /tmp/tmp.ONTGAS8L06/sparse100M
$ sudo losetup /dev/loop0 ${fs}/sparse100M
$ sudo md5sum /dev/loop0
2f282b84e7e608d5852449ed940bfc51 /dev/loop0
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 102400 /tmp/tmp.ONTGAS8L06/sparse100M
$ fallocate -d ${fs}/sparse100M
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 0 /tmp/tmp.ONTGAS8L06/sparse100M
এখন ... এটি আপনার প্রাথমিক প্রশ্নের উত্তর দেয়। আমার সাধারণ উদ্দেশ্যটি "অদ্ভুত হয়ে উঠুন" তাই আমি আরও খনন করেছি ...
$ fs=$(mktemp -d)
$ echo ${fs}
/tmp/tmp.ZcAxvW32GY
$ dd if=/dev/zero of=${fs}/sparse100M conv=sparse seek=$((100*2*1024-1)) count=1 2>/dev/null
$ echo "Before:" "$(ls ${fs}/sparse100M -s)"
Before: 0 /tmp/tmp.ZcAxvW32GY/sparse100M
$ sudo losetup /dev/loop0 ${fs}/sparse100M
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 1036 /tmp/tmp.ZcAxvW32GY/sparse100M
$ sudo md5sum ${fs}/sparse100M
2f282b84e7e608d5852449ed940bfc51 /tmp/tmp.ZcAxvW32GY/sparse100M
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 1036 /tmp/tmp.ZcAxvW32GY/sparse100M
$ fallocate -d ${fs}/sparse100M
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 520 /tmp/tmp.ZcAxvW32GY/sparse100M
$ sudo md5sum ${fs}/sparse100M
2f282b84e7e608d5852449ed940bfc51 /tmp/tmp.ZcAxvW32GY/sparse100M
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 520 /tmp/tmp.ZcAxvW32GY/sparse100M
$ fallocate -d ${fs}/sparse100M
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 516 /tmp/tmp.ZcAxvW32GY/sparse100M
$ fallocate -d ${fs}/sparse100M
$ sudo md5sum ${fs}/sparse100M
2f282b84e7e608d5852449ed940bfc51 /tmp/tmp.ZcAxvW32GY/sparse100M
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 512 /tmp/tmp.ZcAxvW32GY/sparse100M
$ fallocate -d ${fs}/sparse100M
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 0 /tmp/tmp.ZcAxvW32GY/sparse100M
$ sudo md5sum ${fs}/sparse100M
2f282b84e7e608d5852449ed940bfc51 /tmp/tmp.ZcAxvW32GY/sparse100M
$ echo "After:" "$(ls ${fs}/sparse100M -s)"
After: 0 /tmp/tmp.ZcAxvW32GY/sparse100M
আপনি যে নিছক আইন দেখতে করণlosetup
বিক্ষিপ্ত ফাইলের আকারের পরিবর্তন। সুতরাং এটি যেখানে tmpfs
, HOLE_PUNCH প্রক্রিয়া fallocate
, এবং ব্লক ডিভাইসগুলি ছেদ করে একটি আকর্ষণীয় সংমিশ্রণে পরিণত হয় ।