हम SSD डिस्क की एक सरणी पर BtrFS का उपयोग कर रहे हैं और मुझे यह सत्यापित करने के लिए कहा गया है कि BtrFS वास्तव में एक फ़ाइल को हटाने पर TRIM संचालन करता है। अब तक मैं यह सत्यापित करने में असमर्थ रहा हूं कि डिस्क पर TRIM कमांड भेजा गया है।
मुझे पता है कि BtrFS को उत्पादन के लिए तैयार नहीं माना जाता है, लेकिन हमें रक्तस्राव बढ़त पसंद है, इसलिए मैं इसका परीक्षण कर रहा हूं। सर्वर Ubuntu 11.04 सर्वर 64-बिट रिलीज़ (mkfs.btrfs संस्करण 0.19) है। मैंने लिनक्स 3.0.0 कर्नेल को BtrFS चैंज के रूप में स्थापित किया है जो बताता है कि उबंटू 11.04 (2.6.38) के साथ भेजे गए कर्नेल में बल्क टीआरआईएम उपलब्ध नहीं है।
यहाँ मेरी परीक्षण पद्धति (शुरू में http://andyduffell.com/techblog/?p=852 से अपनाया गया , BtrFS के साथ काम करने के लिए संशोधनों के साथ):
- मैन्युअल रूप से शुरू होने से पहले TRIM डिस्क:
for i in {0..10} ; do let A="$i * 65536" ; hdparm --trim-sector-ranges $A:65535 --please-destroy-my-drive /dev/sda ; done
- सत्यापित करें कि ड्राइव TRIM'd था:
./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
- देखें कि परीक्षण फ़ाइल डिस्क से TRIM'd है:
./sectors.pl | tee sectors-$(date +%s)
- TRIM'd ब्लॉक सत्यापित करें:
diff
दो सबसे हाल कीsectors-*
फाइलें
इस बिंदु पर, प्री-डिलीट और पोस्ट डिलीट वेरिफिकेशन अभी भी उपयोग में समान डिस्क ब्लॉक दिखाते हैं। मुझे इसके बजाय उपयोग ब्लॉकों की संख्या में कमी देखना चाहिए। परीक्षण फ़ाइल को हटाए जाने के बाद एक घंटे की प्रतीक्षा में (अगर TRIM आदेश जारी होने में कुछ समय लगता है) तब भी उपयोग में समान ब्लॉक दिखाता है।
मैंने -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
फ़ाइल को rmming के बाद चलाने की कोशिश कर सकते हैं ।
sync
फाइल निकालने के बाद दौड़ने की कोशिश की और परिणाम अभी भी वही हैं। मैं दोबारा जांच करूंगा कि हालांकि सप्ताहांत खत्म होने के बाद जब मैं कार्यालय में वापस आऊंगा।