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…
Hola!
Antes que nada, gracias por las notas! Son siempre de mucha utilidad.
Soy usuario de Debian 9.
En este caso en particular, tengo un problema que no puedo resolver. Tengo un pen «infectado» con una protección de escritura que NO la puedo sacar. Ya estoy pensando que es algo físico porque sinceramente he intentado de todo (hasta formateos de bajo nivel en Windows o discos de rescate, modificar las particiones, etc.) y nada.
Creí que estuve a punto de resolverlo, cuando siguiendo tus pasos, me encontré con que la protección de escritura del pendrive estaba en «on», pero una vez que lo cambié a «off» sigo sin poder borrar o modificar nada en él.
Que podrá ser? Hay alguna otra forma de resolver ésto? (no me importa perder la info que tengo dentro)
Desde ya mil gracias por tu ayuda.
Hernán
Buenas! No sé si te dijeron la solución o al final lo resolviste, pero yo estoy en el mismo caso que tú.
¿Puedes aconsejarme?
Muchas gracias.
buena la explicacion
Hola tengo un USB que el sistema no reconoce, te envio la informacion si puedes ayudarme gracias
dmesg
[83384.348839] usb 1-1: new high-speed USB device number 8 using ehci-pci
[83384.506219] usb 1-1: New USB device found, idVendor=0c76, idProduct=0005, bcdDevice= 1.00
[83384.506225] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[83384.506228] usb 1-1: Product: USB Mass Storage
[83384.506231] usb 1-1: Manufacturer: GENERIC
[83384.506848] usb-storage 1-1:1.0: USB Mass Storage device detected
[83384.508235] scsi host5: usb-storage 1-1:1.0
[83385.524951] scsi 5:0:0:0: Direct-Access GENERIC USB Mass Storage 1.00 PQ: 0 ANSI: 2
[83385.556757] sd 5:0:0:0: Attached scsi generic sg3 type 0
[83385.561706] sd 5:0:0:0: [sdc] Attached SCSI removable disk
root@localhost:~# fdisk -l
Disk /dev/sda: 698.7 GiB, 750156374016 bytes, 1465149168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 995F9474-C5F1-4EE9-8FD7-13EA790423DC
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 49879039 48828416 23.3G Linux filesystem
/dev/sda3 49879040 69410815 19531776 9.3G Linux filesystem
/dev/sda4 69410816 76107775 6696960 3.2G Linux swap
/dev/sda5 76107776 80013311 3905536 1.9G Linux filesystem
/dev/sda6 80013312 1465147391 1385134080 660.5G Linux filesystem
root@localhost:~# fdisk -l /dev/sdc
fdisk: cannot open /dev/sdc: No medium found
root@localhost:~# hdparm /dev/sdc
/dev/sdc:
SG_IO: bad/missing sense data, sb[]: f0 00 02 00 00 00 00 0b 00 00 00 00 3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
multcount = 0 (off)
readonly = 0 (off)
readahead = 256 (on)
root@localhost:~# hdparm -C /dev/sdc
/dev/sdc:
drive state is: standby
root@localhost:~# hdparm -I /dev/sdc
/dev/sdc:
SG_IO: bad/missing sense data, sb[]: f0 00 02 00 00 00 00 0b 00 00 00 00 3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ATA device, with non-removable media
Standards:
Likely used: 1
Configuration:
Logical max current
cylinders 0 0
heads 0 0
sectors/track 0 0
—
Logical/Physical Sector size: 512 bytes
device size with M = 1024*1024: 0 MBytes
device size with M = 1000*1000: 0 MBytes
cache/buffer size = unknown
Capabilities:
IORDY not likely
Cannot perform double-word IO
R/W multiple sector transfer: not supported
DMA: not supported
PIO: pio0
gracias por tu ayuda, ahora pude saber si mi usb estaba contra escritura y verifiqué que no estaba contraescritura entonces esto ya es una solución de formateo a bajo nivel, debo agregar que el virus hacia que en un minuto o dos el usb se desconecte y no permitía hacer actuar ,no dejaba tiempo asi que como ya sabia con que nombre le asiganaba que era «sdc» en la terminal puse y todo como usuario root.
# dd if=/dev/zero |pv| dd of=/dev/sdc bs=1M aqui esperas un buen rato
# dd if=/dev/zero |pv| dd of=/dev/sdc bs=446 count=1 sacas y pones otra ves el usb le das
# mkfs.vfat -F 32 -n «anaconda» /dev/sdc y listo
Parabéns! A de voltas que dei con este tema ata dar coa túa explicación. Moi agradecido.
Estupendo. Muchas gracias.
Por fin algo que realmente me funciono, gracias.
Hola tengo una memoria microsd de 16 GB ADATA categoria 10
Realicé el procedimiento y al parecer funciona, pero al volver a insertarla y volver a revisar el estado vuelve a poner en solo lectura.
He intentado formatearla pero no funciona. Lo que si puedo es ver son mis archivos.
alguna otra herramienta o forma de solucionar el problema?.
facil y escueto, perfecto todo la explicación y los ejemplos, me ha sido muy útil.
hola soy usuario de kali linux en su ultima version ya he intentado mil millones de tecnicas (perdon por ser exagerado) pero ninguna me da ni en linux ni en windows
en mi caso, debian, la memoria extraíble debe estar desmontada….
magnífico, gracias
he logrado recuperar varios extraíbles promocionales con sus instrucciones
Hola, sirve pero varia la carpeta del usuario, estaria bueno que lo aclaren, pero tengo un error, en el comando me muestra que lo modifico, pero cuando quiero poner una carpeta o lo que sea en el pendrive me dice que esta protegido contra escritura. Si me pueden ayudar a solucionarlo estaria genial . Saludos
acepta el comando y lo muestra como desprotegido es de r=0, pero cuando quiero formatear me dice protegido. gracias
Hola buenos días. Con ésto no lo había intentado pero en Windows le he hecho de todo y nada. Mi pendrive está protejido contra escritura, inluso con sudo hdparm -r /dev/sdd da valor 1, pero con sudo hdparm -r0 /dev/sdd tampoco pudo quitar la protección contra escritura. Gracias y saludos desde Venezuela.
Mi versión de Linux es openSUSE Tumbleweed 15.3
Informações passadas com clareza e confiabilidade. Levei horas testando um sem numero de soluções e esta, apresentada aqui, é a definitiva para o problema modo somente de leitura e bloqueio de gravação.
Excelente aporte, todo a salido como lo mencionas…gracias
muchas gracias, de muy gran utilidad, suele pasar mucho esto en usb, facil y rapido la solucion.
MUchas gracias por el aporte.
En mi caso Ubuntu 23.4 me acepta todas las órdenes pero no desbloquea el bit de protección.
¿Alguna idea?
lorenzo@lorenzo-B85M-D3H:~$ sudo hdparm -r /dev/sdc
[sudo] contraseña para lorenzo:
/dev/sdc:
readonly = 1 (on)
lorenzo@lorenzo-B85M-D3H:~$ sudo hdparm -r0 /dev/sdc
/dev/sdc:
setting readonly to 0 (off)
readonly = 1 (on)
lorenzo@lorenzo-B85M-D3H:~$
Gracias