Linux'ta bütün bir SSD bölümünü TRIM / DISCARD nasıl?


28

Benim bölüm /dev/sda3bir SSD sürücüsünde bir dosya sistemi içermiyor, ancak çöp içermektedir. Tüm bölüm üzerinde bir TRIM / DISCARD işlemini nasıl yapabilirim?


7
Mesele şu ki, herhangi bir veri yazmak istemediğini, SSD'nin flash bloğu ERASE'e çağırmasını istiyor, ancak boş bırakarak SSD sürücüsünü yenileştirmek olarak biliniyor.
Chris Thompson,


@joe: ATA Güvenli Silme bağlantınız pariteksiyonlardan bile söz etmiyor. Tüm sürücüyü silmek istemiyorum, sadece bir bölümü. Ve tüm sürücüyü yanlışlıkla silme riskini almak istemiyorum.
pts

11
@Doc: Bölmeyi çöp verileriyle doldurmak, puanların tamamen tersidir: SSD'ye, bölmenin tamamen kullanımda olduğunu bildirir. Bu, SSD'nin performansını ve ömrünü azaltacaktır.
Siyah

Yanıtlar:


40

Util-linux sürümünüz yeterince yeniyse (Eylül 2012), aslında amaç odaklı bir araç var, blkdiscardbunu yapmanın en iyi yolu budur:

sudo blkdiscard /dev/sda3

Ancak eski Linux dağıtım sürümleriyle uyumluluk istiyorsanız, okumaya devam edin ... Birime dokunmayı hdparm/ wiper.shreddetmeyi gerektiren durumlar var çünkü bu bir bölüm değil, bu yüzden bunun ötesinde bir şeye ihtiyacımız var.

Bulduğum en desteklenen yöntem, Linux takas birimlerinin etkinleştirildiğinde DISCARD'ı desteklemesinden yararlanmak. Sonunda silme var orada ses böylece takas sonra kabul edilmez.

D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D

Bu, cihazın çoğunda DISCARD verir.


1
Teşekkürler, bilmiyordum blkdiscard. Tehlikeli komut ... :)
frostschutz 28:13

Niye ya? Ben sadece kılavuzda baktım:WARNING: All data in the discarded region on the device will be lost!
MrCalvin

9

Bu sorunun oldukça eski olduğunu biliyorum ama ...

Bunu yapmanın en basit yolu, oldukça yeni bir sürümü olan bölüm üzerinde bir ext4 dosya sistemi oluşturmaktır mkfs.ext4. Bu aracın yaptığı ilk şey bölümün tamamını TRIM yapmaktır. Bunu yaptıktan sonra, istediğiniz dosya sistemiyle oluşturulan verilerin üzerine yazabilirsiniz.

(Örneğin bunu bir SD kartta yeni bir vfat bölümü oluşturmak için yaptım.)


Bahşiş için teşekkürler! FYI TRIMming'den sonra, boş bir ext4 dosya sistemi için meta veri içeren bazı bloklar yazar, bu nedenle bölümün yüzde birkaçı sağlanmamış kalır.
puanlar

4
pts Dergi boyutunu ve inode sayısını azaltarak meta verilerin boyutunu en aza indirebilirsiniz:mkfs.ext4 -J size=4 -N1 /dev/my/device
Aryeh Leib Taurog

2
@AryehLeibTaurog Kullanımı -E lazy_journal_initgöründüğünden biraz daha az yazma ile sonuçlanır -J size=4. (Fiziksel bir SSD yerine seyrek bir dosya kullanan ve dune kadar yazıldığını doğrulamak için yapılan deneylere dayanarak .)
kasperd 18:15

@kasperd İlginç sonuçlar veren zekice bir deney! Teşekkürler.
Aryeh Leib Taurog

8

hdparm - trim-sector-ranges düşük seviyede, doğrudan SSD ile konuşması gerekiyor, bu yüzden dosya sistemine bağımlı değil. Wiper.sh dosyası, serbest (dosya sistemi) bölgeleri (donanım) SSD sektörlerine eşlemek için dosya sistemine özgü programları kullanır, bunları kırpmak için hdparm'ı kullanır.

Soruyu cevaplayarak, bu bölümü kesmek için hdparm kullanabilirsiniz, ancak çok dikkatli olmalısınız . Bunu yapmanın yolu, bölüm tarafından kullanılan sektör aralığını elde etmek ve ardından o sektör aralığında hdparm kullanmaktır. Muhtemelen birden fazla sektör aralığından geçmek zorundasınız, çünkü --trim sektör aralıkları için her aralık maksimum 65535 sektöre sahip olabilir.

fdisk -l size bölümlerin başlangıcını ve boyutunu söyleyebilir. Fdisk tarafından kullanılan birimlere ve SSD'nizin sektör boyutuna dikkat edin.

Örnek (SSD'm):

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    39070079    19534016   83  Linux

Bu bölümden önceki boşluğu atmak için, sektör 1: 'den başlayarak 2047 (SSD'mde 512 bayt boyutlu) kesimleri kesebilirim hdparm --trim-sector-ranges 1:2047. Sektör 0'dan başlayarak kesemiyorum çünkü bu MBR (GPT için nasıl gittiğini bilmiyor).

Bölüm tarafından kullanılan alanı silmek için yapardım hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 .... Komut dosyası yazılabilir, ancak şimdi bir tane yazmayacağım.

Ayrıca sadece emin olmak için: Burada hiçbir şey garanti etmiyorum, yanlış hesaplanmış sektörler olabilir, --trim-sector-range'leri etkili bir şekilde kullanmadan önce her şeyin yedeğini alabilirim.

Not : GRUB ilk bölümden önce "kullanılmayan" sektörlerde bir bölümünü sakladığından, ilk bölümden önce "boş" bir alanı kırptıysanız, gösterdiğim gibi, yeniden başlatmadan önce GRUB'u (ya da hangi önyükleme yükleyicisini kullandığınızdan) yeniden yüklediğinizden emin olun . Diğer bootloaders bilmiyorum ama sanırım durum böyle olabilir, bu yüzden dikkatli olun.


7
wiper.shfstrimçok daha güvenli olduğu için modası geçmiş , ancak bu özel kullanım için blkdiscardher ikisini de atıyor. 2013 yılında, bilgi işlem aralıklarını manuel olarak riske atmanıza gerek yoktur.
Gabriel

6

wiper.shHdparm paketi ile birlikte gelen betiğe bir göz atabilirsiniz . --trim-sector-rangesEn azından ext3 / 4 dosya sistemi içeriyorsa, bir bölümdeki tüm boş kesimleri TRIM yapmak için hdparm komutunu kullanır . Biçimlendirilmemiş bölümlerle çalışıp çalışmadığından emin değilim, ancak her zaman geçici olarak ext4 ile biçimlendirebilirsiniz.


Ext4 ile biçimlendirmek ve sonra çalıştırmak wiper.sh, ext4 meta verileri dışındaki bölümün hemen hemen tamamını kırpacaktır. Ama bütün bölümü kırpmak istiyorum.
pts

2
Pts: Ben wiper.sh koduna bakmak ve trim aralıkları nasıl çıkardığını anlamaya çalışmanızı öneririm. Ardından, tüm bölümü TRIM'e eklemek için hdparm'a manuel olarak bir trim aralığı gönderebilirsiniz.
Jaap Eldering

4

blkdiscardSadece tüm sürücülerde değil, bölümler üzerinde çalışabilir. Fedora 20'de başarıyla test ettim. Kaynaklarını kontrol ettim blkdiscard- bölümler hakkında hiçbir şey bilmeyen çok basit bir program. Çekirdeğin çeviriyi yaptığını varsayıyorum.

Çok dikkatli olun, blkdiscardsoru sormaz ve ilerleme bilgisi göstermez.

Eğer blkdiscard mevcut değilse, bu betiği kullanın ve çıktısını hdparm'a besleyin. İlk argüman kırpılacak sektör sayısı, ikincisi kırpılacak ilk sektördür.

#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
    if test $sectors -gt $MAXSECT; then
            size=$MAXSECT
    else
            size=$sectors
    fi
    echo $pos:$size
    sectors=$(($sectors-$size))
    pos=$(($pos+$size))
done

-1

SSD'nin yerleşik güvenli silme özelliğini çağırmak için HDDErase'ı kullanmaktan bahseden ilginç bir makale.

http://www.windowsitpro.com/article/file-systems/q-how-can-i-reset-a-solid-state-disk-ssd-to-a-fully-erased-clean-state-


Cevabınız için teşekkür ederim, ama işe yaramıyor, çünkü 1) tüm sürücüyü siliyor 2) Microsoft Windows gerektiriyor, ve ben bir Linux çözümü arıyordum.
pts

2
Ayrıca bunun temelde aynı olduğuna blkdiscard --securedikkat edin.
ntninja
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.