Partisi saya /dev/sda3
pada drive SSD tidak mengandung sistem file apa pun, tetapi berisi sampah. Bagaimana saya melakukan operasi TRIM / DISCARD di seluruh partisi?
Partisi saya /dev/sda3
pada drive SSD tidak mengandung sistem file apa pun, tetapi berisi sampah. Bagaimana saya melakukan operasi TRIM / DISCARD di seluruh partisi?
Jawaban:
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.sh
menolak 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.
blkdiscard
. Perintah berbahaya ... :)
WARNING: All data in the discarded region on the device will be lost!
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.)
mkfs.ext4 -J size=4 -N1 /dev/my/device
-E lazy_journal_init
tampaknya menghasilkan sedikit menulis lebih sedikit daripada yang -J size=4
dilakukan. (Berdasarkan percobaan menggunakan file jarang daripada SSD fisik dan du
untuk memverifikasi berapa banyak yang telah ditulis.)
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.
wiper.sh
sudah usang fstrim
yang jauh lebih aman, tetapi untuk penggunaan khusus ini blkdiscard
mengalahkan keduanya. Pada 2013, tidak perlu mengambil risiko rentang komputasi secara manual.
Anda bisa melihat skrip yang wiper.sh
disertakan dengan paket hdparm. Ia menggunakan perintah hdparm --trim-sector-ranges
untuk 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.
wiper.sh
akan memangkas hampir semua partisi kecuali untuk metadata ext4. Tapi saya ingin memotong seluruh partisi.
blkdiscard
dapat 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, blkdiscard
jangan 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
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:
blkdiscard --secure
dilakukannya.