Pendrive protegido contra escritura en Linux

pendrive protegido contra escritura

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:

Tarjeta SD con pestaña Lock

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.

Artículo relacionado:
Deshabilitar el almacenamiento USB en Linux

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?

Disco duro con operarios

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…


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: AB Internet Networks 2008 SL
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Hernán dijo

    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

    1.    paco dijo

      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.

  2.   willians salgado dijo

    buena la explicacion

  3.   Sergio dijo

    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

  4.   dextre dijo

    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

  5.   MGT dijo

    Parabéns! A de voltas que dei con este tema ata dar coa túa explicación. Moi agradecido.

  6.   Víctor dijo

    Estupendo. Muchas gracias.

  7.   Iori dijo

    Por fin algo que realmente me funciono, gracias.

  8.   cesar dijo

    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?.

  9.   Jose dijo

    facil y escueto, perfecto todo la explicación y los ejemplos, me ha sido muy útil.

  10.   Miguel Ángel dijo

    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

  11.   danikardone dijo

    en mi caso, debian, la memoria extraíble debe estar desmontada….

  12.   JR dijo

    magnífico, gracias
    he logrado recuperar varios extraíbles promocionales con sus instrucciones

  13.   Jero dijo

    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

  14.   oriel dijo

    acepta el comando y lo muestra como desprotegido es de r=0, pero cuando quiero formatear me dice protegido. gracias

  15.   William R Larreal G dijo

    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

  16.   Carlos A G Ramos dijo

    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.

  17.   LUIS dijo

    Excelente aporte, todo a salido como lo mencionas…gracias

  18.   uziel dijo

    muchas gracias, de muy gran utilidad, suele pasar mucho esto en usb, facil y rapido la solucion.

  19.   Lorenzo dijo

    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