Mostrando entradas con la etiqueta optimize. Mostrar todas las entradas
Mostrando entradas con la etiqueta optimize. Mostrar todas las entradas

lunes, 22 de octubre de 2018

Cuando nos olvidamos de tune2fs...

Cada vez que compramos un disco duro y lo formateamos para nuestro uso no debemos olvidarnos de revisar como se distribuye su espacio, por que el sistema operativo puede estar "sisándonos" parte del espacio. Cada vez que formateamos a ext4 un disco, reserva un 5% para root; sí, ese que solo es necesario de vez en cuando. Solo es necesario mantener una parte del disco para root en el disco de sistema; los demás no necesitan darle medio diezmo al administrador, y muchas veces nos olvidamos. Y lo digo por que yo me he olvidado en las últimas adquisiciones, como descubrí el otro día. Pero no hay que preocuparse, tune2f nos lo soluciona, como ya había señalado aquí y aquí y luego olvidado.
Para estar seguros, primero comprobamos como se distribuye el disco tras su formateo:

su -c 'tune2fs -l /dev/sdxn' # o sudo para los amantes del riesgo

y buscamos:

...
Block count:                   x # Según en disco
Reserved block count:              1/5 x # Seguro que no da cero

...

Ejemplo para disco sistema 256GB:

Block count:              244190456
Reserved block count:     12209522

Si es así, podemos aplicar la medicina

su -c 'tune2fs -r 0 /dev/sdxn'  # -r reserved-block-count

o

su -c 'tune2fs -m 0 /dev/sdxn' # -m reserved-block-percentage

El valor x depende según la identificación del dispositivo (a, b, c...) y n según la partición, lo que vuelve a cero los bloques reservados. En el caso de ser un disco de sistema debemos dejar algo para root, para evitar que en algún momento el disco pueda quedar sin espacio y el sistema no pueda escribir los ficheros log. Es decir, hay que mantener un porcentaje razonable en función del tamaño de disco, que visto el tamaño de los discos de hoy, y aunque antes haya recomendado un 2%, creo que ahora con un 1% es más que se sobra.

No os olvidéis. Lo digo por que un 5% de los discos actuales es mucho espacio.



miércoles, 19 de marzo de 2014

Compresión y optimización de documentos PDF

He tenido un problema con un documento extraído directamente con un escáner. El pdf final presentaba una buena calidad de visionado, pero a costa de un tamaño excesivo. La solución podría haber sido extraer cada página, que no era más que una imagen, tratarla individualmente, y generar un nuevo pdf (como ya hemos hecho en ocasiones, empezando como aquí o aquí).



Como tenía que ser algo rápido, primero lo intenté haciendo una conversión a través de pdftk pasando de pdf a un documento ps de gran volumen, y luego reconvertirlo a pdf, que suele quedar más "ligero"

pdf2ps fichero.pdf resultado.ps

ps2pdf resultado.ps fichero.mas.pequeno.pdf

Si bien es cierto que logré una reducción de tamaño, y que el resultado mantenía mucha calidad, la reducción era solo del 20% y el documento seguía aun poco manejable para enviarlo por la red. Así que decidí aplicar el script shrinkpdf. La reducción fue espectacular, quedando alrededor del 8% del volumen original, pero era completamente ilegible. Finalmente, en este enlace encontré este script

#!/bin/bash

DPI=150
PDF_DESTINATION=""

help() {
echo "optimize_pdf help"
echo "-h : show this help"
echo "-d : (optional) output pdf document resolution, by default : 150"
echo "-s : pdf source file, this file must exist"
echo "-o : pdf output file"
}

full_path() {
if [ -z $1 ]; then
exit;
else
if [ `expr substr ${1:-a} 1 2` != "/" ]; then
FULL_FILE=`pwd`"/"$1
fi
fi
echo $FULL_FILE
}

isNumeric(){ echo "$@" | grep -q -v "[^0-9]" ;}

while getopts "s:o:d:h" flag
do
case $flag in
#Source : source file
"s")
PDF_FILE=`full_path $OPTARG`
if [ ! -e $PDF_FILE ]; then
echo "Please provide a valid source file"
exit=1
fi
;;
#Output : output file
"o")
PDF_DESTINATION=$OPTARG
;;
#Dpi : desired resolution
"d")
if [ -z `isNumeric $OPTARG` ]; then
DPI=$OPTARG
else
echo "Please provide a numeric value for your DPI"
exit=1
fi
;;
"h")
exit=1
;;
esac
done

#Is there a target file?
if [ -z $PDF_DESTINATION ]; then
echo "Please provide a file name for output"
exit=1
fi

#At least one error, we're not going any further
if [ $exit ]; then
help
exit
fi

pdftops \
-paper match \
-nocrop \
-noshrink \
-nocenter \
-level3 \
-q \
"$PDF_FILE" - \
| ps2pdf14 \
-dEmbedAllFonts=true \
-dUseFlateCompression=true \
-dOptimize=true \
-dProcessColorModel=/DeviceRGB \
-dUseCIEColor=true \
-r72 \
-dDownsampleGrayImages=true \
-dGrayImageResolution=$DPI \
-dAutoFilterGrayImages=false \
-dGrayImageDownsampleType=/Bicubic \
-dDownsampleMonoImages=true \
-dMonoImageResolution=$DPI \
-dMonoImageDownsampleType=/Bicubic \
-dDownsampleColorImages=true \
-dColorImageResolution=$DPI \
-dAutoFilterColorImages=false \
-dColorImageDownsampleType=/Bicubic \
-dPDFSETTINGS=/prepress \
- "$PDF_DESTINATION"


La guardé como texto plano y la ejecuté directamente

. optimize_pdf.sh -s input.pdf -o output.pdf

y con el conseguí una reducción al 25% y con un documento visible de forma aceptable. Como se puede ver, es fácil manejar alguno de los parámetros, aunque por la premura de tiempo no toqué nada. Cubiertas las necesidades en 1 segundo de computación.

¡Qué haríamos sin el terminal y sin los usuarios que dominan bash y nos regalan estas utilidades!