Kami sedang mencari untuk menggunakan BtrFS pada array disk SSD dan saya telah diminta untuk memverifikasi bahwa BtrFS sebenarnya melakukan operasi TRIM setelah menghapus file. Sejauh ini saya belum dapat memverifikasi bahwa perintah TRIM dikirim ke disk.
Saya tahu BtrFS tidak dianggap sebagai produksi siap, tetapi kami menyukai tepi perdarahan, oleh karena itu saya mengujinya. Servernya adalah Ubuntu 11.04 server 64-bit rilis (mkfs.btrfs versi 0.19). Saya telah menginstal kernel Linux 3.0.0 karena changelog BtrFS menyatakan bahwa TRIM massal tidak tersedia di kernel yang dikirimkan bersama Ubuntu 11.04 (2.6.38).
Inilah metodologi pengujian saya (awalnya diadopsi dari http://andyduffell.com/techblog/?p=852 , dengan modifikasi agar berfungsi dengan BtrFS):
- TRIM disk secara manual sebelum memulai:
for i in {0..10} ; do let A="$i * 65536" ; hdparm --trim-sector-ranges $A:65535 --please-destroy-my-drive /dev/sda ; done
- Verifikasi drive itu TRIM'd:
./sectors.pl |grep + | tee sectors-$(date +%s)
- Mempartisi drive:
fdisk /dev/sda
- Buat sistem file:
mkfs.btrfs /dev/sda1
- Meningkat:
sudo mount -t btrfs -o ssd /dev/sda1 /mnt
- Buat file:
dd if=/dev/urandom of=/mnt/testfile bs=1k count=50000 oflag=direct
- Pastikan file ada di disk:
./sectors.pl | tee sectors-$(date +%s)
- Hapus file uji:
rm /mnt/testfile
- Lihat bahwa file pengujian TRIM dari disk:
./sectors.pl | tee sectors-$(date +%s)
- Verifikasi blok TRIM'd:
diff
duasectors-*
file terbaru
Pada titik ini, verifikasi pra-hapus dan pasca-hapus masih menunjukkan blok-blok disk yang sama sedang digunakan. Saya seharusnya melihat pengurangan jumlah blok yang digunakan. Menunggu satu jam (kalau-kalau perlu waktu agar perintah TRIM dikeluarkan) setelah file uji dihapus masih menunjukkan blok yang sama digunakan.
Saya juga telah mencoba memasang dengan -o ssd,discard
opsi - opsi, tetapi itu tampaknya tidak membantu sama sekali.
Partisi yang dibuat dari fdisk
atas (saya menjaga partisi kecil agar verifikasi dapat berjalan lebih cepat):
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
Skrip saya (saya tahu ini tidak efisien, tetapi menyelesaikan pekerjaan):
#!/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";
Apakah metodologi pengujian saya cacat? Apakah saya melewatkan sesuatu di sini?
Terima kasih untuk bantuannya.
sync
setelah rmming file.
sync
setelah menghapus file dan hasilnya masih sama. Saya akan mengecek bahwa ketika saya kembali ke kantor setelah akhir pekan berakhir.