Pendrive protegido contra escritura en Linux
Si tienes una tarjeta de memoria SD, pendrive o cualquier disco de almacenamiento USB que quieres proteger contra escritura, en este artículo te contamos paso a paso y de forma fácil cómo hacerlo. Y es que existe un bit de proteccion antiescritura que permiten ciertos controladores, el conocido como “write protection bit” que según esté activo a 1 o a 0 dejará escribir en la unidad o no. No hay que confundir este bit con el WP de los registros de bandera de las CPUs, que evitan la sobre escritura creando un proceso de bifurcación o fork en los sistemas tipo UNIX, protegiendo así la memoria principal de una escritura de datos. Tampoco a la típica pestaña de protección que encontramos en algunas tarjetas SD o meodios de almacenamiento. En este caso nos estamos refiriendo a una protección que se implementa en los medios de almacenamiento secundario.
Mientras el controlador del medio de almacenamiento USB o de la tarjeta de memoria SD, o el medio que sea, detecte que este bit está activo, el controlador impedirá que el kernel ordene una orden de escritura y por tanto solo podrá leerle el contenido. Ciertamente resulta muy práctico cuando almacenamos datos que no queremos que sean modificados, haciendo que se eviten escrituras o eliminación por error. Pero si ha caido en nuestras manos uno de estos medios protegidos y no conocemos de la existencia de este bit, podremos perder horas pensando que nuestra unidad está estropeada, o subiendo y bajando la pestañita que tienen algunos pendrives o tarjetas SD para protegerlos sin resultado alguno (Lock/Unlock)…
Montar un medio de solo lectura o con permisos de escritura:
Aunque no sea exáctamente lo que buscamos con el Write Protection Bit, también nos podemos encontrar con que un medio ha sido montado de forma automática o manual para solo lectura, con lo que no tendremos la capacidad de escribir en él. Algo que en algunos casos puede resultar muy molesto e impedirnos modificar o almacenar cosas. Pues bien, la solución a esto es muy sencilla.
Por ejemplo, si en el fichero /etc/fstab el dispositivo está configurado para que se monte de forma automática con la opción ro (read only) o si lo hemos montado con el comando:
sudo mount -o ro /dev/sda /mnt
En tal caso solo podemos leer el dispositivo /dev/sda en este caso que ha sido montado en el punto de montaje /mnt. Para que podamos volver a escribir en él:
sudo mount -o remount,rw /dev/sda /mnt
En caso de que este método no te funcione, entonces será porque está actuando el bit del que hemos hablado, y por eso tendremos que usar la herramienta que te presentamos a continuación.
¿Qué es hdparm?
El comando hdparm es una herramienta a bajo nivel que actúa como una interfaz entre varios controladores del kernel Linux y los medios de almacenamiento SATA/PATA/SAS mediante la biblioteca libata, así como para los viejos medios IDE. Recuerda que muchos controladores USB de medios de almacenamiento, incluidos los lectores de tarjetas como las SD, también usan este tipo de contorladores para operar, por tanto también es compatible con ellos.
Su sintaxis básica es:
hdparm [opciones] [dispositivo]
Y presenta muchas opciones con las que trabajar, aunque no te recomiendo que las uses si no conoces bien lo que haces, ya que al ser una herramienta a bajo nivel podrías dañar seriamente tu dispostivio, por ejemplo si manipulamos algunas opciones críticas como -B. Pero sí que te diré que entre sus opciones se encuentran algunas bastante interesantes como:
- Obtener la configuración del disco:
sudo hdparm /dev/sdd
- Mostrar la identificación del disco:
sudo hdparm -i /dev/sdd
- Comprobar tiempos de lectura del buffer y de la cache:
sudo hdparm -t /dev/sdd sudo hdparm -T /dev/sdd
Recuerda siempre usar los privilegios, es decir, ejecutarlos como usuario root o anteponiendo sudo delante o no funcionarán…
Quitar y poner el bit de protección de la memoria con hdparm:
Una vez conocida la herramienta hdparm, podemos usar la opción -r con la que podemos consutlar el estado de este bit con un simple comando. Para ello, tan solo debemos conocer el nombre físico de nuestro dispositivo de almacenamiento. Por ejemplo, si se llamase /dev/sdd, en ese caso podríamos usar:
sudo hdparm -r /dev/sdd
Y se nos mostrará en pantalla el valor de dicho bit. Si su valor es 1 eso quiere decir que está activo el modo readonly o de solo lectura, o dicho de otro modo, el método de protección contra escritura está activo y no podrás escribir nada en la memoria. Para desactivarlo o modificar el bit, tan solo debes hacer lo siguiente:
sudo hdparm -r0 /dev/sdd
Y ahora si ejecutásemos el primer comando y consutamos el estado veremos que ha vuelto a 0, por tanto el modo readonly está off o desactivado. En caso de quererlo devolver al estado de activo, usa la opción -r1 en vez de -r0 y listo. Por ejemplo:
sudo hdparm -r1 /dev/sdd
Así de sencillo es activar o desactivar este bit. No tiene demasiado misterio pero para los que no conozcan esto puede ser un quebradero de cabeza a la hora de desproteger sus medios de almacenamiento.
Espero que te haya servido de ayuda y ahora sepas cómo hacer un pendrive protegido contra escritura, no olvides dejar tus comentarios…
El artículo Pendrive protegido contra escritura en Linux ha sido originalmente publicado en Linux Adictos.
Juan Alfonso
Buenos días.
No funciona en mi pendrive, uso:
# hdparm -r0 /dev/sdb
como root y pone:
/dev/sdb:
setting readonly to 0 (off)
readonly = 1 (on)
Por tanto, no cambia el bit de estado aunque lo intenta.
Un saludo