হ্যাঁ, ডিভাইস ম্যাপার দিয়ে এটি করার একটি খুব প্রশ্রয়জনক উপায় রয়েছে।
ডিভাইস ম্যাপারগুলি আপনার পছন্দসই একটি নতুন ম্যাপিং / ক্রমে ব্লক ডিভাইসগুলি পুনরায় সমন্বিত করতে পারে। এলভিএম এটি করে। এটি ব্যর্থতাযুক্ত ডিস্কের অনুকরণ করতে 'ফ্লকি' এবং ডিস্কের ব্যর্থ অঞ্চলগুলিকে অনুকরণ করতে 'ত্রুটি' এর মতো অন্যান্য লক্ষ্যগুলিও (কিছুটা বেশ উপন্যাস) সমর্থন করে।
কেউ এমন একটি ডিভাইস তৈরি করতে পারেন যা ইচ্ছাকৃতভাবে আইও ব্ল্যাকহোল রয়েছে যা ক্রস করার সময় আইও ত্রুটিগুলি রিপোর্ট করবে report
প্রথমে লক্ষ্য হিসাবে ব্যবহার করতে কিছু ভার্চুয়াল ভলিউম তৈরি করুন এবং এটিকে একটি ব্লক ডিভাইস হিসাবে সম্বোধনযোগ্য করে তুলুন।
dd if=/dev/zero of=/var/lib/virtualblock.img bs=512 count=1048576
losetup /dev/loop0 /var/lib/virtualblock.img
সুতরাং, এটি শুরু করতে একটি 512M ফাইল তৈরি করে যা আমাদের ভার্চুয়াল ব্লক ডিভাইসের ভিত্তি যা আমরা একটি 'গর্ত' খোঁচা দেব though যদিও কোনও গর্ত এখনও বিদ্যমান নেই। আপনি যদি হন তবে mkfs.ext4 /dev/loop0
আপনি একটি সঠিক বৈধ ফাইল সিস্টেম পাবেন get
সুতরাং, আসুন ডিএমসেটআপ ব্যবহার করুন যা এই ব্লক ডিভাইসটি ব্যবহার করে - একটি নতুন ডিভাইস তৈরি করবে যার এতে কিছু ছিদ্র রয়েছে। এখানে প্রথম একটি উদাহরণ
dmsetup create errdev0
0 261144 linear /dev/loop0 0
261144 5 error
261149 787427 linear /dev/loop0 261139
এটি 'errdev0' নামে একটি ডিভাইস তৈরি করবে (সাধারণত / dev / mapper এ)। আপনি যখন টাইপ করবেন dmsetup create errdev0
এটি স্টিডিনের জন্য অপেক্ষা করবে এবং ^ ডি ইনপুট হবে তা শেষ হবে।
উপরের উদাহরণে, আমরা লুপ ডিভাইসের 261144 সেক্টরে একটি 5 সেক্টর হোল (2.5kb) করেছি। এরপরে আমরা লুপ ডিভাইসটি স্বাভাবিক হিসাবে চালিয়ে যাই।
এই স্ক্রিপ্টটি আপনাকে এমন একটি টেবিল তৈরি করার চেষ্টা করবে যা প্রায় 16 এমবি (যদিও এটির বেশিরভাগ এলোমেলো) প্রায় ছড়িয়ে ছড়িয়ে র্যান্ডম স্থানে ছিদ্র রাখবে।
#!/bin/bash
start_sector=0
good_sector_size=0
for sector in {0..1048576}; do
if [[ ${RANDOM} == 0 ]]; then
echo "${start_sector} ${good_sector_size} linear /dev/loop0 ${start_sector}"
echo "${sector} 1 error"
start_sector=$((${sector}+1))
good_sector_size=0
else
good_sector_size=$((${good_sector_size}+1))
fi
done
echo "${start_sector} $((${good_sector_size}-1)) linear /dev/loop0 ${start_sector}"
স্ক্রিপ্টটি ধরে নিয়েছে যে আপনি একটি 512 এমবি ডিভাইসও তৈরি করেছেন এবং আপনার ভার্চুয়াল ব্লক ডিভাইসটি চালু আছে /dev/loop0
।
আপনি কেবল এই তথ্যটিকে একটি টেবিল হিসাবে একটি পাঠ্য ফাইলে আউটপুট করতে পারেন এবং এতে পাইপ করতে পারেন dmsetup create errdev0
।
একবার আপনি ডিভাইসটি তৈরি করে নেওয়ার পরে আপনি প্রথমে এটি ফর্ম্যাট করে এবং তারপরে ফাইল স্থাপন করে এটি সাধারণ ব্লক ডিভাইসের মতো ব্যবহার শুরু করতে পারেন। ভার্চুয়াল ডিভাইসে সত্যই IO ছিদ্রকারী সেক্টরগুলিকে আপনি আঘাত করতে এমন কিছু আইও সমস্যা দেখা দিতে পারে।
একবার আপনি dmsetup remove errdev0
ডিভাইস সরানোর জন্য ব্যবহার শেষ করেছেন ।
যদি আপনি এটির আইও ত্রুটি পাওয়ার সম্ভাবনা তৈরি করতে চান তবে আপনি আরও ঘন ঘন গর্ত যুক্ত করতে পারেন বা আপনার তৈরি গর্তের আকার পরিবর্তন করতে পারেন। দ্রষ্টব্য নির্দিষ্ট বিভাগগুলিতে ত্রুটি স্থাপনের ফলে 32২ এমবিতে এমন কোনও ডিভাইস পাওয়া যেতে সমস্যা হতে পারে যা আপনি একটি সুপারব্লক লিখতে পারবেন না যা প্রায়শই চেষ্টা করার চেষ্টা করে, তাই বিন্যাসটি কাজ করবে না ..
যুক্ত মজাদার জন্য - আপনি ঠিক losetup
তখনই mkfs.ext4 /dev/loop0
এটি ডেটা দিয়ে পূরণ করতে পারেন । একবার আপনি সেখানে একটি দুর্দান্ত ওয়ার্কিং ফাইল সিস্টেম পেয়ে যাবেন, কেবল ফাইল সিস্টেমটি আনমাউন্ট করুন এবং ডিএমসেটআপ ব্যবহার করে কিছু গর্ত যুক্ত করুন এবং এটি পুনঃনির্মাণ করুন!