J'ai un lecteur (carte SD) avec quelques partitions ext4 mais aussi de l'espace non alloué. L' fstrim
utilitaire ne peut fonctionner que dans un système de fichiers. Avant de réinventer la roue et d'en écrire une, existe-t-il un autre utilitaire qui peut TRIM l'espace non alloué (ou qui peut TRIM une plage explicitement spécifiée)?
Je peux vérifier que la majorité de l'espace non alloué sur le périphérique n'est pas actuellement connue comme étant libre par le contrôleur, car j'ai observé que, sur cette carte particulière, lit à l'espace coupé des retours de 0, mais une analyse de l'appareil montre beaucoup de données sur les ordures restantes.
Edit: J'ai un problème avec hdparm
. L'exemple ci-dessous élimine le premier secteur, mais je vois les mêmes résultats quelle que soit la plage que je spécifie. fstrim
n'a aucun problème sur l'appareil:
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
J'enquête plus, mais quelqu'un a-t-il une idée?
blkdiscard
sur celles-ci un découpage de l'ensemble du périphérique.blkdiscard
ne semble pas être disponible dans mes référentiels de packages standard (Ubuntu 12.04, ne semble pas être présent dansutil-linux
).hdparm
travailler pour moi pour une raison quelconque, mais j'ai récupéré la source util-linux de github.com/karelzak/util-linux/tree/stable/v2.23 , je l'ai construite (./autogen.sh ; ./configure ; make blkdiscard
) et ça marche très bien. Toujours mystifiéhdparm
maisblkdiscard
fait exactement ce que je veux. Bonus: il n'est pas nécessaire de créer un système de fichiers temporaire en premier, vous pouvez l'utilisersfdisk -l
pour déterminer l'espace entre les partitions et leblkdiscard
couper.blkdiscard
pouvoir travailler avec des options de décalage / longueur. Les partitions temporaires que j'ai suggérées ne sont donc même pas nécessaires. Agréable!Réponses:
Si vous avez une version assez récente de
util-linux
, elle contient l'outilblkdiscard
qui est capable de TRIM des appareils entiers, ou des plages au sein d'un appareil à l'aide des options--offset
et--length
.Veuillez noter:
blkdiscard
est dangereux, si vous le laissez TRIM les mauvaises régions, vos données ont disparu!Vous pouvez donc déterminer les régions non partitionnées (libres) de votre table de partition, puis les TRIM à l'aide de cet outil. Pour
msdos
etgpt
partitions,parted
fournit les régions libres comme ceci:Ajoutez-y une boucle ...
qui imprime
Vérifiez que cette sortie est correcte pour vous, ajoutez des options supplémentaires si vous le souhaitez (verbeux?), Et supprimez enfin le
echo
afin qu'il soit réellement exécuté, et vous devriez être défini.La deuxième commande de cet exemple échoue en fait parce que la longueur est trop petite - il peut être utile de vérifier à l'intérieur de la boucle, ignorez les régions inférieures à 1 Mo car il est peu probable qu'elles soient correctement coupées.
Si vous utilisez LVM au lieu de partitions, vous pouvez créer un LV pour l'espace inoccupé et découper qui:
Si vous définissez
issue_discards = 1
votrelvm.conf
, vous pouvez ignorer l'blkdiscard
appel car LVM émettra le TRIMlvremove
par lui-même.la source
blkdiscard
blkdiscard
./autogen.sh ; ./configure ; make blkdiscard
configure
blkdiscard
, mais j'ai remarqué que les valeurs étaient basées sur le décalage, pas sur la longueur. Il est possible qu'il y ait un problèmeblkdiscard
, je suis en train d'enquêter. Voir unix.stackexchange.com/questions/98473/…hdparm --trim-sector-ranges
peut couper une plage. La page de manuel vous avertit de l'utiliser, vous devez donc être sûr d'avoir la bonne plage et la bonne syntaxe.Je pense que l'envoi d'un trim pour toutes les données en dehors d'une partition serait dangereux, car il y a parfois des données cachées comme le code du chargeur de démarrage ou les deuxièmes tables de partition. Vous auriez besoin de savoir exactement, quelles zones en dehors des partitions sont vraiment inutilisées.
la source
hdparm
, les plages inutilisées desfdisk
et couper en conséquence. Je sais ce qu'il y a sur le disque. S'il existe un schéma de partitionnement qui masque les données dans des zones accessibles mais non allouées, cela casserait les fonctionnalités de base de n'importe quel éditeur de partition. Je présume (j'espère) que des projets comme celui-ci ont depuis longtemps été abandonnés (je n'en connais aucun du haut de ma tête). Tous les schémas que je connais stockent le MBR dans un espace non alloué bien connu au début de l'appareil, et des VBR / EBR dans les partitions allouées. Il peut y avoir de vieux schémas obscurs qui sont différents. :)hdparm
, j'ai édité ma question avec des détails; me demandant si vous avez un aperçu.