Chúng tôi đang xem xét sử dụng BtrFS trên một loạt các ổ đĩa SSD và tôi đã được yêu cầu xác minh rằng BtrFS trên thực tế thực hiện các hoạt động TRIM khi xóa một tệp. Cho đến nay tôi không thể xác minh rằng lệnh TRIM được gửi đến các đĩa.
Tôi biết BtrFS không được coi là sẵn sàng sản xuất, nhưng chúng tôi thích lợi thế, vì vậy tôi đang thử nghiệm nó. Máy chủ là Ubuntu 11.04 máy chủ phát hành 64 bit (mkfs.btrfs phiên bản 0.19). Tôi đã cài đặt kernel Linux 3.0.0 vì thay đổi BtrFS nói rằng TRIM số lượng lớn không có sẵn trong kernel được gửi cùng với Ubuntu 11.04 (2.6,38).
Đây là phương pháp thử nghiệm của tôi (ban đầu được áp dụng từ http://andyduffell.com/techblog/?p=852 , với các sửa đổi để hoạt động với BtrFS):
- TRIM thủ công các đĩa trước khi bắt đầu:
for i in {0..10} ; do let A="$i * 65536" ; hdparm --trim-sector-ranges $A:65535 --please-destroy-my-drive /dev/sda ; done
- Xác minh ổ đĩa là TRIM'd:
./sectors.pl |grep + | tee sectors-$(date +%s)
- Phân vùng ổ đĩa:
fdisk /dev/sda
- Tạo hệ thống tập tin:
mkfs.btrfs /dev/sda1
- Núi:
sudo mount -t btrfs -o ssd /dev/sda1 /mnt
- Tạo một tệp:
dd if=/dev/urandom of=/mnt/testfile bs=1k count=50000 oflag=direct
- Xác nhận tệp nằm trên đĩa:
./sectors.pl | tee sectors-$(date +%s)
- Xóa tệp kiểm tra:
rm /mnt/testfile
- Xem tệp thử nghiệm là TRIM'd từ đĩa:
./sectors.pl | tee sectors-$(date +%s)
- Xác minh các khối TRIM:
diff
haisectors-*
tệp gần đây nhất
Tại thời điểm này, các xác minh trước khi xóa và xóa bài vẫn hiển thị cùng một khối đĩa đang sử dụng. Thay vào đó tôi sẽ thấy giảm số lượng khối sử dụng. Đợi một giờ (trong trường hợp phải mất một lúc để lệnh TRIM được ban hành) sau khi tệp thử nghiệm bị xóa vẫn hiển thị các khối tương tự đang sử dụng.
Tôi cũng đã thử gắn kết với các -o ssd,discard
tùy chọn, nhưng điều đó dường như không giúp được gì cả.
Phân vùng được tạo từ fdisk
phía trên (Tôi giữ phân vùng nhỏ để xác minh có thể nhanh hơn):
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
Kịch bản của tôi (tôi biết điều này không hiệu quả, nhưng nó hoàn thành công việc):
#!/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";
Là phương pháp thử nghiệm của tôi là thiếu sót? Am i thiếu cái gì ở đây?
Cảm ơn đã giúp đỡ.
sync
sau khi lục lại tệp.
sync
tệp sau khi xóa tệp và kết quả vẫn như vậy. Tôi sẽ kiểm tra lại xem mặc dù khi tôi trở lại văn phòng sau khi cuối tuần kết thúc.