Tengo una unidad (tarjeta SD) con algunas particiones ext4 pero también algo de espacio sin asignar. La fstrim
utilidad 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. fstrim
no 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?
blkdiscard
no parece estar disponible en mis repositorios de paquetes estándar (Ubuntu 12.04, no parece estar presente util-linux
).
hdparm
trabajar 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 hdparm
pero blkdiscard
hace exactamente lo que quiero. Bonificación: no es necesario crear primero un sistema de archivos temporal, puede usarlo sfdisk -l
para calcular el espacio entre particiones y blkdiscard
recortarlo.
blkdiscard
que podía trabajar con opciones de desplazamiento / longitud. Entonces, las particiones temporales que sugerí ni siquiera son necesarias. ¡Agradable!
blkdiscard
para recortar todo el dispositivo.