Benim bölüm /dev/sda3
bir 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?
Benim bölüm /dev/sda3
bir 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?
Yanıtlar:
Util-linux sürümünüz yeterince yeniyse (Eylül 2012), aslında amaç odaklı bir araç var, blkdiscard
bunu 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.sh
reddetmeyi 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.
blkdiscard
. Tehlikeli komut ... :)
WARNING: All data in the discarded region on the device will be lost!
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.)
mkfs.ext4 -J size=4 -N1 /dev/my/device
-E lazy_journal_init
göründüğünden biraz daha az yazma ile sonuçlanır -J size=4
. (Fiziksel bir SSD yerine seyrek bir dosya kullanan ve du
ne kadar yazıldığını doğrulamak için yapılan deneylere dayanarak .)
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.
wiper.sh
fstrim
çok daha güvenli olduğu için modası geçmiş , ancak bu özel kullanım için blkdiscard
her ikisini de atıyor. 2013 yılında, bilgi işlem aralıklarını manuel olarak riske atmanıza gerek yoktur.
wiper.sh
Hdparm paketi ile birlikte gelen betiğe bir göz atabilirsiniz . --trim-sector-ranges
En 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.
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.
blkdiscard
Sadece 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, blkdiscard
soru 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
SSD'nin yerleşik güvenli silme özelliğini çağırmak için HDDErase'ı kullanmaktan bahseden ilginç bir makale.
blkdiscard --secure
dikkat edin.