Bagaimana TRIM / DISCARD partisi SSD keseluruhan di Linux?

28

Partisi saya /dev/sda3pada drive SSD tidak mengandung sistem file apa pun, tetapi berisi sampah. Bagaimana saya melakukan operasi TRIM / DISCARD di seluruh partisi?

Poin
sumber
7
Saya pikir intinya adalah bahwa dia tidak ingin menulis data apa pun, dia ingin SSD untuk MENGHAPUS blok flash tetapi biarkan kosong sehingga tersedia untuk ditulis, yang dikenal sebagai menyegarkan drive SSD.
Chris Thompson
@ Jo: Link ATA Secure Erase Anda bahkan tidak menyebutkan partisi. Saya tidak ingin menghapus seluruh drive, hanya sebuah partisi. Dan saya tidak ingin mengambil risiko menghapus seluruh drive secara tidak sengaja.
Poin
11
@ Doc: Mengisi partisi dengan data sampah sangat berlawanan dengan niat Poin: Ini akan memberi tahu SSD bahwa partisi tersebut sepenuhnya diisi dan digunakan. Ini akan menurunkan kinerja dan masa pakai SSD.
Hitam

Jawaban:

40

Jika versi util-linux Anda cukup baru (September 2012), sebenarnya ada alat yang dibuat khusus blkdiscard,, itulah cara terbaik untuk melakukan ini:

sudo blkdiscard /dev/sda3

Tetapi jika Anda memerlukan kompatibilitas dengan versi distro Linux yang lebih lama, baca terus ... Ada beberapa kasus di mana hdparm/ wiper.shmenolak untuk menyentuh volume karena itu bukan partisi, jadi kami membutuhkan sesuatu di luar itu.

Cara yang paling didukung yang saya temukan adalah untuk mengambil keuntungan dari kenyataan bahwa volume swap Linux mendukung DISCARD ketika diaktifkan. Wipef pada akhirnya ada sehingga volume tidak dikenali sebagai swap nanti.

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

Ini mengeluarkan DISCARD pada sebagian besar perangkat.

robbat2
sumber
1
Terima kasih, tidak tahu blkdiscard. Perintah berbahaya ... :)
frostschutz
Mengapa? Saya baru saja mencarinya di manual:WARNING: All data in the discarded region on the device will be lost!
MrCalvin
9

Saya tahu pertanyaan ini cukup lama, tapi ...

Cara paling sederhana untuk melakukan ini adalah dengan hanya membuat sistem file ext4 pada partisi dengan versi yang cukup baru mkfs.ext4. Hal pertama yang dilakukan alat ini adalah TRIM seluruh partisi. Setelah Anda selesai melakukannya, Anda dapat menimpa data yang dibuatnya dengan sistem file apa pun yang Anda inginkan.

(Saya baru saja melakukan ini untuk membuat partisi vfat baru pada kartu SD, misalnya.)

David Given
sumber
Terima kasih atas tipnya! FYI Setelah TRIMming, menulis beberapa blok dengan metadata untuk sistem file ext4 yang kosong, sehingga beberapa persen dari partisi tetap tidak dikontrol.
Poin
4
@pts Anda dapat memperkecil ukuran metadata dengan mengurangi ukuran jurnal dan jumlah inode:mkfs.ext4 -J size=4 -N1 /dev/my/device
Aryeh Leib Taurog
2
@AryehLeibTaurog Menggunakan -E lazy_journal_inittampaknya menghasilkan sedikit menulis lebih sedikit daripada yang -J size=4dilakukan. (Berdasarkan percobaan menggunakan file jarang daripada SSD fisik dan duuntuk memverifikasi berapa banyak yang telah ditulis.)
kasperd
@kasperd Eksperimen pintar dengan hasil menarik! Terima kasih.
Aryeh Leib Taurog
8

hdparm --trim-sektor-rentang tingkat rendah, seharusnya berbicara langsung ke SSD, jadi tidak ada ketergantungan pada sistem file. Apa yang dilakukan wiper.sh adalah menggunakan program khusus filesystem untuk memetakan wilayah (sistem file) gratis ke sektor (perangkat keras) SSD, mereka menggunakan hdparm untuk memotongnya.

Menjawab pertanyaan, Anda dapat menggunakan hdparm untuk memotong partisi itu, tetapi Anda harus sangat berhati-hati . Cara untuk melakukannya adalah mendapatkan kisaran sektor yang digunakan oleh partisi, lalu gunakan hdparm pada rentang sektor itu. Mungkin Anda harus melewati beberapa rentang sektor, karena masing-masing rentang untuk --trim-sektor-rentang maksimum memiliki 65535 sektor.

fdisk -l dapat memberi tahu Anda awal dan ukuran partisi. Perhatikan unit yang digunakan fdisk, dan ukuran sektor SSD Anda.

Contoh (SSD saya):

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

Untuk membuang spasi sebelum partisi ini, saya bisa memangkas 2047 (512 byte berukuran, pada saya SSD) sektor mulai dari sektor 1: hdparm --trim-sector-ranges 1:2047. Saya tidak dapat memotong mulai dari sektor 0 karena itu adalah MBR (tidak tahu bagaimana kelanjutannya untuk GPT).

Untuk membuang ruang yang digunakan oleh partisi, saya akan lakukan hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 .... Itu bisa dituliskan tetapi saya tidak akan menulisnya sekarang.

Juga hanya untuk memastikan: Saya tidak menjamin apa pun di sini, saya mungkin telah salah menghitung sektor, melakukan pencadangan semuanya sebelum secara efektif menggunakan --trim-sektor-range.

Catatan : jika Anda memangkas ruang "kosong" sebelum partisi pertama, seperti yang saya tunjukkan, pastikan untuk menginstal ulang GRUB (atau boot loader apa pun yang Anda gunakan) sebelum me-reboot, karena GRUB menyimpan sebagiannya di sektor "tidak digunakan" sebelum partisi pertama . Tidak tahu bootloader lain, tapi saya rasa ini masalahnya, jadi berhati-hatilah.

spuk
sumber
7
wiper.shsudah usang fstrimyang jauh lebih aman, tetapi untuk penggunaan khusus ini blkdiscardmengalahkan keduanya. Pada 2013, tidak perlu mengambil risiko rentang komputasi secara manual.
Gabriel
6

Anda bisa melihat skrip yang wiper.shdisertakan dengan paket hdparm. Ia menggunakan perintah hdparm --trim-sector-rangesuntuk TRIM semua sektor kosong pada partisi, setidaknya jika itu berisi sistem file ext3 / 4. Tidak yakin apakah itu berfungsi dengan partisi yang tidak diformat, tetapi Anda selalu dapat memformatnya sementara dengan ext4.

Jaap Eldering
sumber
Memformatnya dengan ext4 dan kemudian menjalankannya wiper.shakan memangkas hampir semua partisi kecuali untuk metadata ext4. Tapi saya ingin memotong seluruh partisi.
Poin
2
@ pts: Saya sarankan Anda melihat kode wiper.sh dan mencoba mencari tahu bagaimana itu mengurangi rentang trim. Kemudian Anda bisa secara manual mengirim kisaran trim ke hdparm untuk MEMANGKAN seluruh partisi.
Jaap Eldering
4

blkdiscarddapat bekerja pada partisi, tidak hanya pada seluruh drive. Saya mengujinya dengan sukses di Fedora 20. Saya memeriksa sumber blkdiscard- ini adalah program yang sangat sederhana yang tidak tahu apa-apa tentang partisi. Saya berasumsi kernel melakukan terjemahan.

Berhati-hatilah, blkdiscardjangan bertanya dan tidak menunjukkan informasi kemajuan.

Jika blkdiscard tidak tersedia, gunakan skrip ini dan masukkan hasilnya ke hdparm. Argumen pertama adalah jumlah sektor yang harus dipotong, yang kedua adalah sektor pertama yang dipotong.

#! /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
proski
sumber
-1

Berikut ini adalah artikel menarik yang membahas tentang penggunaan HDDErase untuk menjalankan fitur erase aman SSD bawaan, yang seharusnya membuat Anda menginginkan yang Anda inginkan:

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

Chris Thompson
sumber
Terima kasih atas jawaban Anda, tetapi tidak berfungsi, karena 1) menghapus seluruh drive 2) memerlukan Microsoft Windows, dan saya mencari solusi Linux.
Poin
2
Perhatikan juga bahwa ini pada dasarnya sama dengan yang blkdiscard --securedilakukannya.
ntninja