Saya memiliki drive (kartu SD) dengan beberapa partisi ext4 tetapi juga beberapa ruang yang tidak terisi. The fstrim
utilitas hanya dapat bekerja dalam filesystem. Sebelum saya menemukan kembali roda dan menulis satu, apakah ada utilitas lain yang dapat TRIM ruang yang tidak terisi (atau yang dapat TRIM rentang yang ditentukan secara eksplisit)?
Saya dapat memverifikasi bahwa sebagian besar ruang yang tidak terisi pada perangkat saat ini tidak diketahui bebas oleh pengontrol, seperti yang saya amati bahwa, pada kartu khusus ini, dibaca ruang yang dipangkas mengembalikan 0, tetapi pemindaian perangkat menunjukkan banyak data sampah yang tersisa.
Sunting: Saya mengalami masalah saat menggunakan hdparm
. Contoh di bawah ini membuang sektor pertama, tetapi saya melihat hasil yang sama terlepas dari rentang yang saya tentukan. fstrim
tidak memiliki masalah pada perangkat:
root@ubuntu:~# hdparm --please-destroy-my-drive --trim-sector-ranges 0:1 --verbose /dev/mmcblk0
/dev/mmcblk0:
trimming 1 sectors from 1 ranges
outgoing cdb: 85 0d 06 00 01 00 01 00 00 00 00 00 00 40 06 00
outgoing_data:
00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ioctl(fd,SG_IO): Invalid argument
FAILED: Invalid argument
Saya sedang menyelidiki lebih lanjut tetapi apakah ada yang punya wawasan?
blkdiscard
pada mereka yang memotong seluruh perangkat.blkdiscard
sepertinya tidak tersedia di repositori paket standar saya (Ubuntu 12.04, sepertinya tidak ada di sanautil-linux
).hdparm
bekerja untuk saya karena suatu alasan, tetapi saya mengambil sumber util-linux dari github.com/karelzak/util-linux/tree/stable/v2.23 , membuatnya (./autogen.sh ; ./configure ; make blkdiscard
) dan bekerja dengan baik. Masih bingung tentanghdparm
tetapiblkdiscard
melakukan apa yang saya inginkan. Bonus: Tidak perlu membuat sistem file sementara terlebih dahulu, Anda dapat menggunakansfdisk -l
untuk mengetahui ruang antara partisi danblkdiscard
memangkasnya.blkdiscard
bisa bekerja dengan opsi offset / panjang. Jadi partisi sementara yang saya sarankan bahkan tidak perlu. Bagus!Jawaban:
Jika Anda memiliki versi yang cukup baru
util-linux
, itu berisi alatblkdiscard
yang dapat TRIM seluruh perangkat, atau rentang dalam perangkat yang menggunakan--offset
dan--length
opsi.Harap dicatat:
blkdiscard
berbahaya, jika Anda membiarkannya TRIM wilayah yang salah, data Anda hilang!Jadi Anda bisa mengetahui wilayah (gratis) yang tidak dipartisi dari tabel partisi Anda dan kemudian TRIM mereka menggunakan alat ini. Untuk
msdos
dangpt
partisi,parted
sediakan wilayah bebas seperti:Tambahkan satu lingkaran ke sana ...
yang mencetak
Verifikasi bahwa output ini benar untuk Anda, tambahkan opsi tambahan jika Anda suka (verbose?), Dan akhirnya hapus
echo
sehingga akan benar-benar dieksekusi, dan Anda harus mengaturnya.Perintah kedua dari contoh itu benar-benar gagal karena panjangnya terlalu kecil - mungkin perlu memeriksa di dalam loop, abaikan daerah yang lebih kecil dari 1MB karena mereka tidak mungkin berhasil dipangkas.
Jika Anda menggunakan LVM sebagai ganti partisi, Anda bisa membuat LV untuk ruang kosong dan memotongnya:
Jika Anda mengatur
issue_discards = 1
dilvm.conf
, Anda dapat melewatiblkdiscard
panggilan karena LVM akan mengeluarkan TRIMlvremove
dengan sendirinya.sumber
blkdiscard
tersedia; Anda dapat mengambil sumber util-linux dari github.com/karelzak/util-linux/tree/stable/v2.23 lalu buildblkdiscard
(run./autogen.sh ; ./configure ; make blkdiscard
) - itu dibangun dengan bersih (walaupun Anda mungkin harus menginstal beberapa dependensi danconfigure
opsi tweak ) dan sebagai selama Anda tidak menginstalnya, itu tidak bertentangan dengan util-linux yang ada.blkdiscard
juga, tetapi memperhatikan nilai-nilai didasarkan pada offset, bukan panjangnya. Mungkin saja ada masalah diblkdiscard
, saya sedang dalam proses investigasi. Lihat unix.stackexchange.com/questions/98473/…hdparm --trim-sector-ranges
dapat memangkas rentang. Halaman manual memperingatkan untuk menggunakannya, jadi Anda lebih baik pastikan Anda mendapatkan rentang yang tepat dan sintaksis.Saya pikir mengirim trim untuk semua data di luar partisi akan berbahaya, karena ada beberapa data tersembunyi di sana kadang-kadang seperti kode bootloader atau tabel partisi kedua. Anda harus tahu persis, area mana di luar partisi yang benar-benar tidak digunakan.
sumber
hdparm
, rentang yang tidak digunakan darisfdisk
, dan memotong sesuai. Saya tahu apa yang ada di drive. Jika ada skema partisi yang menyembunyikan data di area yang dapat diakses tetapi tidak dialokasikan, itu akan merusak fungsi dasar editor partisi mana pun. Saya menduga (harapan) bahwa skema seperti ini telah lama ditinggalkan (saya tahu tidak ada yang terlintas di kepala saya). Semua skema yang saya ketahui menyimpan MBR di ruang yang tidak terisi yang terkenal di awal perangkat, dan VBR / EBR di dalam partisi yang dialokasikan. Mungkin ada skema lama yang tidak jelas yang berbeda. :)hdparm
, saya mengedit pertanyaan saya dengan detail; bertanya-tanya apakah Anda memiliki wawasan.