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
-las para aparar todo o dispositivo.blkdiscard
não parece estar disponível nos meus repositórios de pacotes padrão (Ubuntu 12.04, não parece estar presenteutil-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
masblkdiscard
faz exatamente o que eu quero. Bônus: não há necessidade de criar um sistema de arquivos temporário primeiro, você pode usarsfdisk -l
para descobrir o espaço entre as partições eblkdiscard
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!Respostas:
Se você possui uma versão recente o suficiente
util-linux
, ela contém a ferramentablkdiscard
capaz de TRIM dispositivos inteiros ou intervalos dentro de um dispositivo usando--offset
e--length
opções.Observe:
blkdiscard
é perigoso, se você deixar TRIM nas regiões erradas, seus dados desaparecerão!Assim, você pode descobrir as regiões não particionadas (livres) da sua tabela de partição e depois TRIM-las usando esta ferramenta. Para
msdos
egpt
partições,parted
fornece as regiões livres da seguinte forma:Adicione um loop a ele ...
que imprime
Verifique se esta saída está correta para você, adicione opções adicionais se desejar (detalhado?) E, finalmente, remova a opção
echo
para que ela seja realmente executada e você deve estar definido.O segundo comando desse exemplo realmente falha porque o tamanho é muito pequeno - pode valer a pena verificar dentro do loop, ignorar regiões menores que 1 MB, pois é improvável que elas sejam cortadas com êxito.
Se você estiver usando LVM em vez de partições, poderá criar um LV para o espaço desocupado e aparar:
Se você definir o
issue_discards = 1
seulvm.conf
, poderá pular ablkdiscard
chamada, pois o LVM emitirá o TRIMlvremove
por si só.fonte
blkdiscard
disponível; você pode pegar a fonte util-linux em github.com/karelzak/util-linux/tree/stable/v2.23 e depois compilarblkdiscard
(executar./autogen.sh ; ./configure ; make blkdiscard
) - ela foi criada de forma limpa (embora você possa ter que instalar algumas dependências e ajustar asconfigure
opções) e como contanto que você não o instale, ele não entra em conflito com o util-linux existente.blkdiscard
também, mas notei que os valores eram baseados no deslocamento, não no comprimento. É possível que exista um problemablkdiscard
, estou em processo de investigação. Veja unix.stackexchange.com/questions/98473/…hdparm --trim-sector-ranges
pode cortar um intervalo. A página de manual adverte para usá-lo, portanto, é melhor você ter certeza de que possui o intervalo e a sintaxe certos.Eu acho que enviar um recorte para todos os dados fora de uma partição seria perigoso, pois existem alguns dados ocultos por vezes, como código do carregador de inicialização ou segunda tabela de partição. Você precisaria saber exatamente, quais áreas fora das partições são realmente não utilizadas.
fonte
hdparm
intervalos não utilizadossfdisk
e apará-los de acordo. Eu sei o que há na unidade. Se houver um esquema de particionamento que oculte dados em áreas acessíveis, mas não alocadas, isso quebraria a funcionalidade básica de qualquer editor de partição. Presumo (espero) que esquemas como esse tenham sido abandonados há muito tempo (embora eu não conheça nenhum deles). Todos os esquemas que conheço armazenam o MBR em um espaço não alocado conhecido no início do dispositivo e VBRs / EBRs dentro de partições alocadas. Pode haver esquemas obscuros antigos que são diferentes. :)hdparm
, editei minha pergunta com detalhes; querendo saber se você tem alguma idéia.