আমরা এসএসডি ডিস্কের একটি অ্যারেতে বিটিআরএসএফ ব্যবহার করার বিষয়টি খতিয়ে দেখছি এবং আমাকে তা যাচাই করতে বলা হয়েছে যে কোনও ফাইল মুছে ফেলার পরে বিআরটিএফস আসলে ট্রিম অপারেশন করে? এখনও অবধি আমি যাচাই করতে অক্ষম হয়েছি যে ট্রিম কমান্ডটি ডিস্কগুলিতে প্রেরণ করা হয়েছে।
আমি জানি বিটিআরএসএফ উত্পাদন উত্পাদন হিসাবে বিবেচিত হয় না, তবে আমরা রক্তপাত প্রান্ত পছন্দ করি, তাই আমি এটি পরীক্ষা করছি। সার্ভারটি উবুন্টু 11.04 সার্ভারটি 64-বিট রিলিজ (mkfs.btrfs সংস্করণ 0.19)। আমি লিনাক্স 3.0.০.০ কার্নেলটি ইনস্টল করেছি কারণ বিটিআরএসএফ চেঞ্জলগ জানিয়েছে যে উবুন্টু ১১.০৪ (২.6.৩8) দিয়ে প্রবাহিত কার্নেলটিতে বাল্ক ট্রিম পাওয়া যায় না।
এখানে আমার পরীক্ষার পদ্ধতিটি ( বিটিআরএফএসের সাথে কাজ করার পরিবর্তনের সাথে প্রথমে http://andyduffell.com/techblog/?p=852 থেকে গৃহীত হয়েছে ):
- শুরুর আগে ডিস্কগুলিকে ম্যানুয়ালি ট্রিম করুন:
for i in {0..10} ; do let A="$i * 65536" ; hdparm --trim-sector-ranges $A:65535 --please-destroy-my-drive /dev/sda ; done
- ড্রাইভটি ট্রিম ছিল তা যাচাই করুন:
./sectors.pl |grep + | tee sectors-$(date +%s)
- ড্রাইভ পার্টিশন:
fdisk /dev/sda
- ফাইল সিস্টেম তৈরি করুন:
mkfs.btrfs /dev/sda1
- মাউন্ট করুন:
sudo mount -t btrfs -o ssd /dev/sda1 /mnt
- একটি ফাইল তৈরি করুন:
dd if=/dev/urandom of=/mnt/testfile bs=1k count=50000 oflag=direct
- ফাইলটি ডিস্কে রয়েছে তা যাচাই করুন:
./sectors.pl | tee sectors-$(date +%s)
- পরীক্ষার ফাইলটি মুছুন:
rm /mnt/testfile
- দেখুন পরীক্ষা ফাইলটি ডিস্ক থেকে ট্রিম হয়:
./sectors.pl | tee sectors-$(date +%s)
- ট্রিম ব্লকগুলি যাচাই করুন:
diff
দুটি সাম্প্রতিকতমsectors-*
ফাইল
এই সময়ে, প্রাক-মোছা এবং পোস্ট মোছার যাচাইকরণগুলি এখনও ব্যবহৃত একই ডিস্ক ব্লকগুলি দেখায়। পরিবর্তে আমার ব্যবহার ব্লকের সংখ্যা হ্রাস দেখতে হবে। পরীক্ষার ফাইলটি মোছার পরেও এক ঘন্টা অপেক্ষা করা (যদি ট্রিম কমান্ড জারি করতে কিছুটা সময় নেয়) এখনও একই ব্লকগুলি ব্যবহারে প্রদর্শিত হয়।
আমি -o ssd,discard
বিকল্পগুলি দিয়ে মাউন্ট করার চেষ্টা করেছি , তবে এটি মোটেই সহায়তা করবে বলে মনে হয় না।
পার্টিশন যা উপর থেকে তৈরি হয়েছিল fdisk
(আমি পার্টিশনটি ছোট রাখি যাতে যাচাইকরণ আরও দ্রুত যেতে পারে):
root@ubuntu:~# fdisk -l -u /dev/sda
Disk /dev/sda: 512.1 GB, 512110190592 bytes
255 heads, 63 sectors/track, 62260 cylinders, total 1000215216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6bb7542b
Device Boot Start End Blocks Id System
/dev/sda1 63 546209 273073+ 83 Linux
আমার sectors.pl
স্ক্রিপ্ট (আমি জানি এটি অদক্ষ, তবে এটি কাজটি সম্পন্ন করে):
#!/usr/bin/perl -w
use strict;
my $device = '/dev/sda';
my $start = 0;
my $limit = 655360;
foreach ($start..$limit) {
printf "\n%6d ", $_ if !($_ % 50);
my @sector = `/sbin/hdparm --read-sector $_ $device`;
my $status = '.';
foreach my $line (@sector) {
chomp $line;
next if $line eq '';
next if $line =~ /$device/;
next if $line =~ /^reading sector/;
if ($line !~ /0000 0000 0000 0000 0000 0000 0000 0000/) {
$status = '+';
}
}
print $status;
}
print "\n";
আমার পরীক্ষার পদ্ধতিটি কি ত্রুটিযুক্ত? আমি কি এখানে কিছু মিস করছি?
সাহায্যের জন্য ধন্যবাদ.
sync
ফাইলটি আরএমএম করার পরে চালানোর চেষ্টা করতে পারেন ।
sync
ফাইলটি সরানোর পরে একটি চালনার চেষ্টা করেছি এবং ফলাফল এখনও একই ছিল। আমি দ্বিগুণ পরীক্ষা করে দেখব যদিও উইকএন্ড শেষ হওয়ার পরে আমি অফিসে ফিরে আসছি।