Mi partición /dev/sda3
en una unidad SSD no contiene ningún sistema de archivos, pero contiene basura. ¿Cómo hago una operación TRIM / DISCARD en toda la partición?
Mi partición /dev/sda3
en una unidad SSD no contiene ningún sistema de archivos, pero contiene basura. ¿Cómo hago una operación TRIM / DISCARD en toda la partición?
Respuestas:
Si su versión de util-linux es lo suficientemente nueva (septiembre de 2012), en realidad hay una herramienta especialmente diseñada blkdiscard
, esa es la mejor manera de hacerlo:
sudo blkdiscard /dev/sda3
Pero si necesita compatibilidad con versiones anteriores de distribución de Linux, sigue leyendo ... Hay casos en hdparm
/ wiper.sh
de basura para tocar un volumen porque no es una partición, por lo que necesitamos algo más allá de eso.
La forma más compatible que he encontrado es aprovechar el hecho de que los volúmenes de intercambio de Linux admiten DISCARD cuando están habilitados. El wipefs al final está allí, por lo que el volumen no se reconoce como intercambio más tarde.
D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D
Esto emite el DESCARGO en la mayoría del dispositivo.
blkdiscard
. Comando peligroso ... :)
WARNING: All data in the discarded region on the device will be lost!
Sé que esta pregunta es bastante antigua, pero ...
La forma más sencilla de hacer esto es simplemente crear un sistema de archivos ext4 en la partición con una versión razonablemente reciente de mkfs.ext4
. Lo primero que hace esta herramienta es RECORTAR toda la partición. Una vez que haya hecho eso, puede sobrescribir los datos que se crean con el sistema de archivos que desee.
(Acabo de hacer esto para crear una nueva partición vfat en una tarjeta SD, por ejemplo).
mkfs.ext4 -J size=4 -N1 /dev/my/device
-E lazy_journal_init
parece dar como resultado un poco menos de escrituras que -J size=4
lo que hace. (Basado en experimentos usando un archivo disperso en lugar de un SSD físico y du
para verificar cuánto se había escrito)
hdparm --trim-sector-range es de bajo nivel, se supone que debe hablar directamente con el SSD, por lo que no depende del sistema de archivos. Lo que wiper.sh hace es usar programas específicos del sistema de archivos para mapear regiones libres (sistema de archivos) a sectores SSD (hardware), ellos usan hdparm para recortarlos.
Respondiendo a la pregunta, puede usar hdparm para recortar esa partición, pero debe tener mucho cuidado . La forma de hacerlo es obtener el rango de sector utilizado por la partición, luego use hdparm en ese rango de sector. Probablemente necesitará pasar varios rangos de sector, ya que cada rango para --trim-sector-range puede tener un máximo de 65535 sectores.
fdisk -l puede decirle el comienzo y el tamaño de las particiones. Preste atención a las unidades que usa fdisk y al tamaño del sector de su SSD.
Ejemplo (mi SSD):
Device Boot Start End Blocks Id System
/dev/sdb1 2048 39070079 19534016 83 Linux
Para descartar el espacio antes de esta partición, podría recortar (tamaño de 512 bytes, en mis SSD) 2047 sectores a partir de sector 1: hdparm --trim-sector-ranges 1:2047
. No puedo recortar a partir del sector 0 porque ese es el MBR (no sé cómo va para GPT).
Para descartar el espacio utilizado por la partición, lo haría hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...
. Puede ser guionizado pero no voy a escribir uno ahora.
También para estar seguro: no estoy garantizando nada aquí, es posible que haya calculado mal los sectores, haga una copia de seguridad de todo antes de usar efectivamente --trim-sector-range.
Nota : si recorta el espacio "vacío" antes de la primera partición, como lo mostré, asegúrese de reinstalar GRUB (o cualquier cargador de arranque que use) antes de reiniciar, ya que GRUB almacena parte de él en sectores "no utilizados" antes de la primera partición . No conozco otros cargadores de arranque, pero supongo que puede ser el caso, así que tenga cuidado.
wiper.sh
está obsoleto por lo fstrim
que es mucho más seguro, pero para este uso específico blkdiscard
supera a ambos. En 2013, no hay necesidad de arriesgar rangos de computación manualmente.
Puede echar un vistazo a la secuencia de comandos wiper.sh
incluida con el paquete hdparm. Utiliza el comando hdparm --trim-sector-ranges
para RECORTAR todos los sectores vacíos en una partición, al menos si contiene un sistema de archivos ext3 / 4. No estoy seguro de si funciona con particiones sin formato, pero siempre puede formatearlo temporalmente con ext4.
wiper.sh
recortaría casi toda la partición, excepto los metadatos ext4. Pero me gustaría recortar toda la partición.
blkdiscard
puede funcionar en particiones, no solo en unidades completas. Lo probé con éxito en Fedora 20. Revisé las fuentes de blkdiscard
: es un programa muy simple que no sabe nada sobre particiones. Supongo que el núcleo hace la traducción.
Tenga mucho cuidado, blkdiscard
no haga preguntas y no muestre información de progreso.
Si blkdiscard no está disponible, use este script y alimente su salida a hdparm. El primer argumento es el número de sectores a recortar, el segundo es el primer sector a recortar.
#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
if test $sectors -gt $MAXSECT; then
size=$MAXSECT
else
size=$sectors
fi
echo $pos:$size
sectors=$(($sectors-$size))
pos=$(($pos+$size))
done
Aquí hay un artículo interesante que habla sobre el uso de HDDErase para invocar la función de borrado seguro incorporada del SSD, que debería obtener lo que desea:
blkdiscard --secure
hace.