Tengo una unidad (tarjeta SD) con algunas particiones ext4 pero también algo de espacio sin asignar. La fstrimutilidad solo puede funcionar dentro de un sistema de archivos. Antes de reinventar la rueda y escribir una, ¿hay otra utilidad que pueda RECORTAR el espacio no asignado (o que pueda RECORTAR un rango explícitamente especificado)?
Puedo verificar que el controlador no sepa actualmente que la mayoría del espacio no asignado en el dispositivo está libre, ya que he observado que, en esta tarjeta en particular, las lecturas del espacio recortado devuelven 0, pero un escaneo del dispositivo muestra sobran muchos datos basura.
Editar: Tengo un problema al usar hdparm. El siguiente ejemplo descarta el primer sector, pero estoy viendo los mismos resultados independientemente del rango que especifique. fstrimno tiene problemas en el dispositivo:
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
Estoy investigando más, pero ¿alguien tiene alguna idea?
blkdiscardno parece estar disponible en mis repositorios de paquetes estándar (Ubuntu 12.04, no parece estar presente util-linux).
hdparmtrabajar para mí por alguna razón, pero tomé la fuente util-linux de github.com/karelzak/util-linux/tree/stable/v2.23 , lo construí ( ./autogen.sh ; ./configure ; make blkdiscard) y está funcionando muy bien. Todavía desconcertado hdparmpero blkdiscardhace exactamente lo que quiero. Bonificación: no es necesario crear primero un sistema de archivos temporal, puede usarlo sfdisk -lpara calcular el espacio entre particiones y blkdiscardrecortarlo.
blkdiscardque podía trabajar con opciones de desplazamiento / longitud. Entonces, las particiones temporales que sugerí ni siquiera son necesarias. ¡Agradable!
blkdiscardpara recortar todo el dispositivo.