Eu tenho uma unidade (cartão SD) com algumas partições ext4, mas também algum espaço não alocado. O fstrim
utilitário pode funcionar apenas em um sistema de arquivos. Antes de reinventar a roda e escrever uma, existe outro utilitário que pode TRIM o espaço não alocado (ou que pode TRIM um intervalo especificado explicitamente)?
Posso verificar que a maioria do espaço não alocado no dispositivo não é atualmente conhecido como livre pelo controlador, como observei que, nesta placa em particular, lê os 0s de retorno de espaço aparado, mas uma varredura do dispositivo mostra muitos dados de lixo que sobraram.
Edit: Estou tendo um problema ao usar hdparm
. O exemplo abaixo descarta o primeiro setor, mas estou vendo os mesmos resultados, independentemente do intervalo especificado. fstrim
não tem problemas no 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
Estou investigando mais, mas alguém tem alguma ideia?
blkdiscard
não parece estar disponível nos meus repositórios de pacotes padrão (Ubuntu 12.04, não parece estar presente util-linux
).
hdparm
trabalhar para mim por algum motivo, mas peguei a fonte util-linux em github.com/karelzak/util-linux/tree/stable/v2.23 , a construí ( ./autogen.sh ; ./configure ; make blkdiscard
) e está funcionando muito bem. Ainda confuso, hdparm
mas blkdiscard
faz exatamente o que eu quero. Bônus: não há necessidade de criar um sistema de arquivos temporário primeiro, você pode usar sfdisk -l
para descobrir o espaço entre as partições e blkdiscard
cortá-lo.
blkdiscard
era capaz de trabalhar com opções de deslocamento / comprimento. Portanto, as partições temporárias que sugeri nem são necessárias. Agradável!
blkdiscard
-las para aparar todo o dispositivo.