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
para recortar todo el dispositivo.blkdiscard
no parece estar disponible en mis repositorios de paquetes estándar (Ubuntu 12.04, no parece estar presenteutil-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 desconcertadohdparm
peroblkdiscard
hace exactamente lo que quiero. Bonificación: no es necesario crear primero un sistema de archivos temporal, puede usarlosfdisk -l
para calcular el espacio entre particiones yblkdiscard
recortarlo.blkdiscard
que podía trabajar con opciones de desplazamiento / longitud. Entonces, las particiones temporales que sugerí ni siquiera son necesarias. ¡Agradable!Respuestas:
Si tiene una versión suficientemente reciente de
util-linux
, contiene la herramientablkdiscard
que puede RECORTAR dispositivos completos, o rangos dentro de un dispositivo usando--offset
y--length
opciones.Tenga en cuenta:
blkdiscard
es peligroso, si deja que RECORTAR las regiones incorrectas, sus datos se han ido.Por lo tanto, puede averiguar las regiones no particionadas (libres) de su tabla de particiones y luego RECORTARLAS utilizando esta herramienta. Para
msdos
ygpt
particiones,parted
proporciona las regiones libres de esta manera:Agregue un bucle a él ...
que imprime
Verifique que este resultado sea correcto para usted, agregue opciones adicionales si lo desea (¿detallado?) Y finalmente elimine el
echo
para que se ejecute realmente, y debe estar configurado.El segundo comando de ese ejemplo en realidad falla porque la longitud es demasiado pequeña: puede valer la pena verificarlo dentro del bucle, ignore las regiones de menos de 1 MB ya que es poco probable que se recorten con éxito.
Si está utilizando LVM en lugar de particiones, puede crear un LV para el espacio desocupado y recortar eso:
Si configura
issue_discards = 1
sulvm.conf
, puede omitir lablkdiscard
llamada ya que LVM emitirá el TRIMlvremove
por sí mismo.fuente
blkdiscard
disponible; puede obtener la fuente util-linux de github.com/karelzak/util-linux/tree/stable/v2.23 y luego compilarblkdiscard
(ejecutar./autogen.sh ; ./configure ; make blkdiscard
): se compiló limpiamente (aunque es posible que tenga que instalar algunas dependencias yconfigure
opciones de ajuste ) y como siempre que no lo instales, no entra en conflicto con el util-linux existente.blkdiscard
también, pero noté que los valores se basaban en el desplazamiento, no en la longitud. Es posible que haya un problemablkdiscard
, estoy en el proceso de investigación. Ver unix.stackexchange.com/questions/98473/…hdparm --trim-sector-ranges
puede recortar un rango. La página de manual advierte sobre su uso, por lo que es mejor asegurarse de tener el rango y la sintaxis correctos.Creo que enviar un recorte para todos los datos fuera de una partición sería peligroso, ya que a veces hay algunos datos ocultos como el código del cargador de arranque o las tablas de la segunda partición. Necesitaría saber exactamente qué áreas fuera de las particiones están realmente sin usar.
fuente
hdparm
rangos no utilizadossfdisk
y recortar en consecuencia. Sé lo que hay en el disco. Si hay un esquema de partición que oculta datos en áreas accesibles pero no asignadas, eso rompería la funcionalidad básica de cualquier editor de particiones. Supongo (espero) que cualquier esquema como este haya sido abandonado por mucho tiempo (aunque no conozco ninguno de mi cabeza). Todos los esquemas que conozco almacenan el MBR en un espacio no asignado bien conocido al comienzo del dispositivo, y los VBR / EBR dentro de las particiones asignadas. Puede haber viejos esquemas oscuros que son diferentes. :)hdparm
, edité mi pregunta con detalles; preguntándome si tienes alguna idea.