Performansı geri kazanmak ve kullanılmış bir SSD sürücünün ömrünü tahmin etmek?


70

Eski 128 GB SSD sürücüm şimdi yaklaşık bir buçuk yaşındadır ve o zamandan beri başka bir sürücüye geçtim.

Eski SSD'mi temizlemek istiyorum.

  • performansını yeni seviyelere çıkar

  • rehabilite edin ve genel olarak sağlık kontrolü yapın

Bunu nasıl yapacağım?


4
Restorasyonu kapsamamasına rağmen, bu blog yayınını , bunun olmasını önlemek için ilginç bulabilirsiniz .
Tamara Wijsman

1
Sadece kaçırmış olabilirim, ancak aşağıdaki cevaplardan herhangi birinin " işaretli " olduğunu görmedim . Bu soruda nihayetinde sizin için "en iyi" işe yarayanları gerçekten çok merak ediyorum. (Eğer hatırlarsanız ...)
irrasyonel John

Yanıtlar:


56

Linux'ta, sadece çalıştırın

hdparm --trim-sector-ranges start:count /dev/sda

yerine geçmek istediğiniz blok aralıklarını startve yerine countSSD cihazını geçmek /dev/sda. Hızlı olma ve sürücüye sıfır yazmama avantajına sahiptir. Aksine, sadece bu bloklardaki verileri umursamadığınızı bilmesi ve SSD kontrolörüne TRIM komutları göndermesi ve çöp toplama algoritmasında kullanılmadığını rahatça söyleyebilir.

Muhtemelen bu komutu root olarak çalıştırman gerekiyor. Bu komut son derece tehlikeli olduğundan, hemen büyük veri kaybına neden olabileceğinden, ayrıca --please-destroy-my-driveargümanını da iletmeniz gerekir hdparm(Kopyala ve yapıştır işleminden kaynaklanan yanlışlıkla veri kaybını önlemek için bunu komut satırına eklemedim).

Yukarıdaki komut satırında, /dev/sdaTRIM komutlarını göndermek istediğiniz SSD cihazı ile değiştirilmelidir. startTRIM’e giden ilk bloğun (sektör) countadresi ve bu başlangıç ​​adresinden bağımsız olarak işaretlenecek blokların sayısıdır. Komuta birden çok aralık iletebilirsiniz.

128 GB Crucial RealSSD C300 ile dizüstü bilgisayarımda Ubuntu 11.04'te hdparm v9.32 ile kişisel olarak yaptıktan sonra, şunu belirtmek zorundayım: Toplam disk bloğu sayısını (0: 250069680) aralık olarak geçemedim . Elle (esasen elle "ikili arama"), çalışan blok sayımı için yeterince büyük bir değer buldum (40000) ve tüm diski boşaltmak için 40000 dizilimi dizisinde TRIM komutları vermeyi başardım. Bunu basit bir kabuk betiği ile yapmak mümkündür (Ubuntu 11.04'te root altında test edilmiştir):

 # fdisk -lu /dev/sda

 Disk /dev/sda: 128.0 GB, 128035676160 bytes
 255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
 ...  

Tüm sürücüyü silmek için, bu toplam sektör sayısını alın ve aşağıdaki satırda 250069680'i değiştirin ve çalıştırın (ekleyin --please-destroy-my-drive):

 # i=0; while [ $i -lt 250069680 ]; do echo $i:40000; i=$(((i+40000))); done \
 | hdparm --trim-sector-ranges-stdin /dev/sda

Ve bitti! hexedit /dev/sdaÖncesinde ve sonrasında diskin işlenmemiş içeriğini okumayı deneyebilir ve sürücünün verileri attığını doğrulayabilirsiniz.


Elbette, Linux'u makinenin ana işletim sistemi olarak kullanmak istemeseniz bile, canlı bir CD'den çıkarıp sürücüde çalıştırarak bu numaradan yararlanabilirsiniz.


3
Harika bir yazı, ancak bu ne yazık ki SSD'leri destekleyen TRIM dışı için işe yaramayacak. Bunun için biraz daha ileri gitmen gerekecek. Hdparm ile nasıl yapacağınızla ilgili talimatlar için kernel.org adresindeki ATA wiki'sine bakın . Bu bilgiyi eklemek için orijinal girişinizi değiştirebilirseniz daha iyi olurdu :)
James

"fstrim", yukarıdakilerin kolay bir sürümüdür (ayrı cevaba bakınız).
Bryce

@Bryce, yanlış; TRIM yalnızca tavsiye niteliğindedir ve güvenlik nedeniyle değil performans nedenleriyle tasarlanmıştır, bu sayede sürücü, çoğu sürücünün yaptığı gibi daha sonraki bir zamana kadar komutları görmezden gelmekte veya silmeyi geciktirmekte serbesttir.
psusi

24

Öncelikle, sadece performansın düşmesine neden olan şeyin ne olduğunu anlayarak başlayalım. Bunu bilmeden birçok insan yetersiz çözümler önerecektir (daha önce de gördüğüm gibi). Tüm bu çıkmazın temel noktası, Wikipedia'dan da değinildiği gibi, temel olarak aşağıdaki gerçeğe dayanıyor . Unutma, önemli:

NAND flash bellekte, okuma ve programlama işlemleri her seferinde bir sayfa yapılmalı, kilit açma ve silme işlemi blok şeklinde yapılmalıdır.

SSD'ler NAND flaştan oluşur ve flaş "bloklardan" oluşur. Her blokta birçok "sayfa" var. Sadelik uğruna, sadece bir göze çarpan tek bir bellek bloğu içeren parlak bir SSD aldığımızı ve bu blokun 4 boş sayfadan oluştuğunu düşünelim.

Netlik sağlamak için boş sayfalar, kullanılmış sayfalar ve pages, 1 ve X işaretli sayfalar arasında ayrım yapıyorum. Buradaki anahtar her biri arasında kontrolörlerin bakış açısından bir fark olduğu! 1'ler ve 0lar kadar basit değil. Öyleyse, başlamak için, yeni sürücümüzdeki sayfalar şöyle görünür:

∅, ∅, ∅, ∅ (tümü boş)

Şimdi, sürücüye bazı veriler yazmaya gidiyoruz ve ilk sayfada saklanması sona eriyor, böylece:

1, ∅, ∅, ∅

Daha sonra, biraz daha fazla veri yazıyoruz, ancak bu sefer iki sayfa gerektirecek kadar yeterli ve böylece 2. ve 3. sayfada saklanıyor:

1, 1, 1, ∅

Alanımız tükeniyor! Yazdığımız ilk verilere gerçekten ihtiyacımız olmadığına karar veriyoruz.

X, 1, 1, ∅

Son olarak, kalan iki sayfayı tüketecek şekilde kaydetmemiz gereken başka bir büyük veri setine sahibiz. BU TRİM OLMADAN SÜRÜCÜLERDE PERFORMANS VARLIK NEREDE OLUR? Son durumumuzdan şuna:

1, 1, 1, 1

... çoğu insanın düşündüğünden daha fazla iş gerektirir. Yine bu, flaşın sadece blok şeklinde silinebilir, sayfadaki değil, tam olarak yukarıdaki son geçişin tam olarak neyi ifade ettiğidir. SSD en esaslı TRIM ve non-TRIM arasındaki farklılaştırıcı olduğu zaman aşağıdaki çalışma yapılır!

Boş bir sayfadan ve silinmiş bir sayfadan faydalanmamız gerektiğinden, SSD'nin önce tüm bloğun içeriğini bir miktar harici depolama / belleğe okuması, orijinal bloğu silmesi, içeriği değiştirmesi ve sonra bu içerikleri tekrar yazması gerekir. blok. Bir "yazma" kadar basit değil, şimdi bir "okuma-silme-yazma" haline geldi. Bu büyük bir değişimdir ve çok fazla veri yazarken gerçekleşmesi, gerçekleşmesi için muhtemelen en uygun zaman değildir. Bu "silinmiş" sayfanın önceden TRIM'in yapması amaçlandığı şekilde kurtarılmış olması halinde her şeyden kaçınılabilir. TRIM ile, SSD ya silindikten hemen sonra ya da TRIM algoritmalarının uygun gördüğü başka bir uygun zamanda silinmiş sayfalarımızı kurtarır. Önemli olan, TRIM ile bir yazının ortasında olduğumuzda olmamak!

TRIM olmadan, sürücülerimizi verilerle doldururken yukarıdaki senaryodan kaçınamayız. Neyse ki bazı yeni SSD'ler sadece TRIM'in ötesine geçiyor ve gerekli ATA komutları olmadan donanım seviyesinde arka planda TRIM ile aynı şeyi yapıyorlar (bazıları bu çöp toplama işlemidir). Ancak, sahip olamayacak kadar şanssız olanlarımız için, orijinal performansı geri kazanmak için tüm sürücüye sıfır yazmanın yeterli olmadığını bilmek önemlidir. Tüm sıfırların sürücüye yazılması, denetleyiciye flaş sayfanın yazma için boş olduğunu göstermez. Bunu TRIM'i desteklemeyen bir sürücüde yapmanın tek yolu, HDDErase (Wayback Machine üzerinden) gibi bir araç kullanarak sürücünüzdeki ATA güvenli silme komutunu çağırmaktır .

Ben inanıyorum sadece silme bölümleri üzerine veya Windows 7'nin "diskpart hepsi temiz" değil, bireysel dosyaların silinmesi üzerine gibi şeyler üzerine TRIM desteklenen bazı erken SSD en vardı. Bu, eski bir sürücünün, bu komutu yerine getirdikten sonra performansı yeniden kazanmasının ortaya çıkmasının bir nedeni olabilir. Bu bana biraz puslu görünüyor ama ...

SSD'ler ve genel olarak donanım / gadget'lar hakkındaki bilgilerimin çoğu anandtech.com'dan geliyor . Tüm bunları anlatan harika bir yazı olduğunu düşündüm ama benim için yaşamı bulamıyorum!



ATA'nın güvenli bir şekilde silinmesinden ve blok başına veya sayfa başına fiyat teklifinden bahsettiği için bunu yalnızca eksik gördü.
Christopher Galpin

1
Bu cevabın çoğu doğru olsa da, çöp toplama ile ilgili kısım yanlış. Tüm SSD'lerde çöp toplama var. Onsuz çalışmayacaklardı. Çöp toplama TRIM'e bir alternatif değildir. Boş bir durumda bir NAND hücresi 1'i temsil eder ve daha sonra 0'a yazabilirsiniz. Fakat onu sıfıra geri döndürmek için tüm bloğu bir kerede silmelisiniz. Dolayısıyla, mevcut verilerin üzerine yazmak yerine, değişiklikler yeni bir bloğa yazılır ve eski veriler geçersiz olarak işaretlenir. Geçersiz verilerin silinmesi Çöp Toplama'dır. TRIM, SSD'ye verileri işletim sisteminde sildiğinizde geçersiz olarak işaretlemesini söyler.
Bay Alpha

Pek sayılmaz Bay Alpha. Dönem "Çöp Toplama" onlar kesinlikle zaman basitçe tepki aksine proaktif Optimum zamanlarda açıkladığınız işlemi yapmak kontrolörleri yaklaşık geldi gerek (yine kötü performans sonuçları sürücü dolduğunda olan) bunu yapmak için.
James

1
Belki de buna asla "Çöp Toplama" dememeliydik ve bunun yerine eski, reaktif kontrolörlere "istifçiler" adını taktık.
James

17

Görünüşe göre standart öneri, tüm sıfırları tam sürücü olarak yazmaktır. Bunun neden işe yarayacağından tam olarak emin değilim (sonunda pek çok yazar SSD'leri öldürür mü?), Ancak büyük satıcı SSD destek forumları tarafından onaylandığı görülüyor.

Yani, bunu Windows'ta yapmak için:

  • Yönetici ayrıcalıklarına sahip bir komut istemi başlatmak
  • komutu yürütün diskpart

Yardımcı programa girdikten sonra bir DISKPART>komut istemi görür ve aşağıdaki komutları verir:

DISKPART> list disk
DISKPART> select disk x

Açıkçası, devam etmeden önce DOĞRU SSD SÜRÜCÜSÜ SEÇTIĞINIZDAN EMİN OLUN !

DISKPART> clean all
DISKPART> create partition primary
DISKPART> format quick fs=NTFS 

Sihirli burada clean allhangi sürücüye tüm sıfırları yazar :

All parametresini belirtirseniz, her bir sektör sıfırlanabilir ve sürücüde bulunan tüm veriler silinebilir.

Bunu yaptıktan sonra, disk performansının büyük ölçüde arttığını onaylayabilirim.


11
@Jeff Tüm sıfırların yazılmasının neden faydalı olabileceğinin nedeni yakın zamanda David Spillett tarafından açıklanmıştır : bazı kontrolörler, sıfırlanmış blokların atılabileceğini ve TRIM komutunun etkisini taklit ederek boş alan havuzuna geri döndürülebileceğini varsaymaktadır.
sblair

1
2 puan - ilk önce, genellikle flaş silme komutu tüm 0xffs bloklarını siler, bu yüzden 0s yerine yazmak daha iyi görünecektir. Yine de emin olmak için veri sayfalarını kontrol etmek zorunda kalacağım. İkincisi - denetleyiciyi sürücüyü TRIMing'e kandırmaya çalışıyorsanız, sürücüdeki her bloğu TRIMed yapan bir tür yardımcı program çalıştırmak iyi olmaz mıydı? Şahsen, muhtemelen her ikisini de yaparım (0xffs ve TRIM), ama muhtemelen burada biraz bilgiçlik yapıyorum.
Dennis Munsie

2
@dennis emin, böyle bir yardımcı program varsa - beni bir noktaya çekinmeyin.
Jeff Atwood

1
@Dennis: Sürücü "fiziksel" "açık" bit kullanıyorsa ve bunlar başka bitlerde mantıksal olarak çevrilmişse, 0xff ihtiyacınız olan model olabilir. Yine de ters mantık kullanıyor olabilirler, bu yüzden devam etmeden önce emin olmak için üretici ile iletişim kurmak veya belgelerle iletişim kurmak yeterlidir. Sdelete veya benzerini kullanma önerim, çalışan bir dosya sisteminde kullanılmayan blokları düzeltmeyi denemektir. Elbette, SSD'nin haritasındaki tüm kullanılmış ve kullanılmayan bir karışımı olan tüm bloklar için şık olmayan bir yazı ile sonuçlanacaktır.
David Spillett

2
Bir sürü insanın SSD'yi güvenli bir şekilde silmekten habersiz olduğu konusunda biraz endişeliyim. Her bir blok için TRIM gerekli değildir. SSD'ye Güvenli Silme ATA komutu gönderen bir yardımcı programı çalıştırın ve SSD'nin TRIM'i destekleyip desteklememesine bakılmaksızın sorununuz çözüldü.
James

16

Ayrıca SSD Life Pro adlı bir araç buldum . Benim için bazı kötü haberler var.

SSDLife Pro - sürücü sağlığı kötü!

Bunu nasıl hesapladığına gelince, SMART SSD göstergelerini kullanır. Görünüşe göre SMART verilerine dayanarak tahmin etmeye çalışıyor :

  • SSD'lerin dayandığı ömür boyu flash bellek, hücre başına 10.000 yazma ile sınırlıdır.
  • sürücülerin çoğu ayrıca SMART parametrelerinde yazılı ve / veya okuma bilgileriyle ilgili verileri gösterir.

Bu zor, çünkü verilerin tahmin edilmek üzere ne zaman yazıldığını da bilmesi gerekiyor , ancak işte temel veriler:

01 Okuma Hata Oranı 7
09 Açılış Saatleri 7085
0C Güç Döngüsü Sayısı 318
B8 İlk Kötü Blok Sayısı 15
C3 Program Arıza Bloğu Sayısı 0
C4 Arıza Bloku Silme Sayısı 0
C5 Arıza Blok Sayısını Oku 0
C6 Sektörleri Okuyun 5468243171
C7 Sektörleri Yaz 41640920876
C8 Okuma Komutları 100482453
C9 Yazma Komutları 417315851
Flash 345270'den CA Hatası Bitleri
Düzeltilebilir Bit Hatası Olan CB Okuma Sektörleri 340001
CC Bad Block Tam Bayrak 0
CD Maksimum P / E Sayımı Özelliği 5000
CE Minimum Silme Sayısı 3774
CF Maksimum Silme Sayısı 65348
D0 Ortalama Silme Sayısı 4837
D1 Kalan Sürüş Ömrü 4

Korkunç sayı, yüzde 4 .. olan Kalan Sürücü Ömrü !

Ve ortaya çıkan hesaplamalar:

Model: CRUCIAL_CT128M225
Boyut: 128 GB
Seri numarası: xxxxxxxxxxxxxxxxx456
Bellenim: 2030
Güç: 318    
Sürücü / İşletim Sisteminde TRIM desteği: etkin / etkin
Çalışma zamanı: 9 ay 16 gün 5 saat
Toplam veri okuma: 2607.46 GB
yazılan: 19855.94 GB

Kayıt için, bu sürücü ilk olarak Ekim 2009'da satın alındı, bu yüzden bir buçuk yıldan biraz fazla sürdü.


3
@Jeff Flaş bellek işlem büyüklüğünde iyileşirken , program / silme çevrimlerinin sayısı düşmüştür . 0xCD değeri, 10.000 yerine 5.000 dereceli P / E çevrimli 34 nm tabanlı bir sürücünüz olduğunu gösterir.
sblair

1
@sblair bilmek iyi; Aracı yeni bir OCZ Vertex 2 üzerinde denedim ve tamamen farklı SMART alanları ve değerleri var.
Jeff Atwood

2
Bu veri biraz kapalı görünüyor - okuduğunuz kadar 10x veri yazdığınız yazıyor. Kulağa yüksek gelmiyor mu? Bundan daha fazla okuma beklerdim. O sürücüde bir sayfa dosyası var mı?
Dennis Munsie

1
Daha fazla veri noktası - Eşimin MacBook'unda benzer bir SSD var. Bu daha önce geliştirme amaçlı kullanılan dizüstü bilgisayarımdı. Ben sadece bu SSD'deki istatistiklere baktım ve bu sürücünün ömrünün 8 ayında veya sonrasında, saatte toplamda 7085'e (295 gün) göre 17 güç vardı. Makinenin toplamda 17 saatin üzerinde bir durumda olduğunu biliyorum, ancak işletim sisteminin sürücüyü agresif bir şekilde kapattığı anlaşılıyor.
Dennis Munsie

2
20GB 128GB'lık bir sürücüye yazılmış !? Bu sürücüyü tam olarak ne için kullanıyorsunuz?
BlueRaja - Danny Pflughoeft 15:11

6

Sıfırları sürücüden yazmanın en iyi yaklaşım olmadığını buldum. Kısa vadede yardımcı olsa da, diskimi kesinlikle tam performansına getirmediğini gördüm (oldukça eski TRIM özellikli olmayan bir Intel-SSD'ye sahibim). Bir yıl veya daha fazla yoğun kullanımın ardından, SSD'nin sıfırdan sonra bile SSD'nin herhangi bir dosyaya yazmaya çalışacağı 1-2 saniyede donmaya başladım.

Performansı tamamen geri getiren tek şey, güvenli bir silme kullanmaktı hdparm. Bazı küçük hıçkırıklar yaşamaya başladığında, 6-12 ayda bir SSD'mi güvenli bir şekilde silme alışkanlığı haline getirdim. Macrumors'daki bir kişi , mac * aygıtları için nasıl yapılacağı hakkında özel bir ders verdi.

Gördüğüm tüm iddialara göre, güvenli bir silme, SSD'ye tüm sektörleri daha düşük bir seviyeye sıfıra ayarlamasına ve ardından sadece bir ddşey kullanmasına neden olan özel bir komut gönderir .


Eğer sürücü TRIM'i desteklemiyorsa, tüm bahisler kapalıdır.
Jeff Atwood

1
Yanlış Jeff, Güvenli Silme TRIM'den tamamen bağımsızdır. Bu gerçek bir ATA komutu ve TRIM desteği olmayan sürücüleri tamamen geri yüklemek için yapabileceğiniz tek şey . Bir SSD bu komutu aldığında, tüm NAND hücreleri boş olarak işaretlenir ve sürücülerin orijinal yazma performansını TRIM gerekmeden geri alır . Şimdiye kadar en tepedeki cevaba referansta bulunulan hdparm da dahil olmak üzere, bunu yapabilen çok sayıda araç var.
James

5

Mac'te, digilloydTools DiskTester'a bakın . Yenilemenin sürücü performansı üzerindeki etkilerini görmek için bazı ilginç veri noktaları da var.


Tüm bunların SSD'nize sıfır büyük bir dosya yazmak olduğuna inanıyorum. Kaydederek sonuçlara ulaşabilirsiniz cat /dev/zero > /tmp/bigfile.
Kendall Hopkins


2

SSD'nin (yarıiletken sürücü) SSD'de kalan ömrünü kontrol etmek için smartmontools paketini yüklemeniz gerekir. En modern ATA ve SCSI sabit disklerinde yerleşik olan Öz İzleme, Analiz ve Raporlama Teknolojisi Sistemini (SMART) kullanarak depolama sistemlerini kontrol etmek ve izlemek için iki yardımcı program (smartctl ve smartd) içerir.

Ubuntu, Mint veya Debian tabanlı dağıtımlar için

# apt-get install smartmontools

For Fedora, Centos, or Red Hat based distributions
# yum install smartmontools

Media_Wearout_Indicator aradığınız şey. 100 için, ssd'nizin% 100 ömre sahip olduğu, düşük sayının ise daha az ömrün olduğu anlamına gelir.

# smartctl -a /dev/sda | grep Media_Wearout_Indicator

Dizüstü bilgisayarımdan çıktı

233 Media_Wearout_Indicator 0×0032 100 100 000 Old_age Always – 0

Sürücünüzden daha fazla ayrıntı ve öznitelik görmek istiyorsanız,

# smartctl -data -A /dev/sda

Kaynak: namhuy.net/1024/how-to-check-ssd-life-left.html


2

Artık Linux sistemleri için @LeakyCode cevabına göre çok daha iyi bir cevap var:

sudo fstrim -v / önyükleme

"Util-linx" den "fstrim" komutu, dosya sistemi üzerinden çalışacak ve kullanılmayan tüm alanlar için TRIM komutlarını verecektir. Ubuntu gibi dağıtımlarda, Intel ve Samsung’tan seçilen "bilinen güvenli" sürücülerin listesi dışında varsayılan olarak devre dışı bırakılır. Ancak komut, herhangi bir sürücü için herhangi bir bölümde manuel olarak çalıştırılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.