Ejecutando dd. ¿Por qué el recurso está ocupado?

32

Acabo de formatear la tarjeta microSD y me gustaría ejecutar un ddcomando. Desafortunadamente el ddcomando falla:

$ sudo dd bs=1m if=2016-02-26-raspbian-jessie-lite.img of=/dev/rdisk2
dd: /dev/rdisk2: Resource busy
$

Todos en Internet dicen que primero necesito desmontar el disco. Claro, puede hacer eso y seguir adelante. Pero quiero entender por qué / qué exactamente en OS X está haciendo que el dispositivo esté ocupado . ¿Cómo diagnostico esto?

Hasta ahora lo intenté:

  1. Listado de archivos abiertos:

    $ lsof /dev/disk2
    $ lsof /dev/disk2s1
    $
    

    También:

    $ lsof /Volumes/UNTITLED
    $
    
  2. Listado de usuarios que trabajan en el archivo:

    $ fuser -u /dev/disk2
    /dev/disk2: 
    $ fuser -u /dev/disk2s1 
    /dev/disk2s1:
    $
    

    También:

    $ fuser -u /Volumes/UNTITLED
    $
    
  3. Verifique los mensajes del sistema:

    $ sudo dmesg | grep disk
    $
    

    También:

    $ sudo dmesg | grep /Volumes/UNTITLED
    $
    

Mi entorno

  1. Sistema operativo:

    Darwin Eugenes-MacBook-Pro-2.local 15.3.0 Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 x86_64
    
  2. Información sobre mi microSD:

    diskutil list disk2
    /dev/disk2 (internal, physical):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:     FDisk_partition_scheme                        *31.9 GB    disk2
       1:                 DOS_FAT_32 UNTITLED                31.9 GB    disk2s1
    

PD: estoy usando OS X 10.11.

Actualización 22/3/2016 . Lo averigué. Volví a ejecutar el lsofy fuserdesde arriba usando sudo, y finalmente llegué al fondo del problema:

$ sudo fuser /Volumes/UNTITLED/
/Volumes/UNTITLED/: 62 282
$

Y:

$ sudo lsof /Volumes/UNTITLED/
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mds        62 root    8r   DIR    1,6    32768         2 /Volumes/UNTITLED
mds        62 root   22r   DIR    1,6    32768         2 /Volumes/UNTITLED
mds        62 root   23r   DIR    1,6    32768        10 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD
mds        62 root   25u   REG    1,6        0 999999999 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/journalExclusion
mds_store 282 root  txt    REG    1,6     3277        17 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/0.indexGroups
mds_store 282 root  txt    REG    1,6        8        23 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/0.indexCompactDirectory
mds_store 282 root  txt    REG    1,6      312        19 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/0.indexTermIds
mds_store 282 root  txt    REG    1,6     3277        29 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/live.0.indexGroups
mds_store 282 root  txt    REG    1,6     1024        35 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/live.0.indexCompactDirectory
mds_store 282 root  txt    REG    1,6      312        21 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/0.indexPositionTable
mds_store 282 root  txt    REG    1,6     8192        31 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/live.0.indexTermIds
mds_store 282 root  txt    REG    1,6     2056        22 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/0.indexDirectory
mds_store 282 root  txt    REG    1,6     8192        33 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/live.0.indexPositionTable
mds_store 282 root  txt    REG    1,6     8224        34 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/live.0.indexDirectory
mds_store 282 root  txt    REG    1,6       16        16 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/0.indexIds
mds_store 282 root  txt    REG    1,6    65536        48 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/reverseDirectoryStore
mds_store 282 root  txt    REG    1,6      704        24 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/0.indexArrays
mds_store 282 root  txt    REG    1,6    65536        26 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/0.directoryStoreFile
mds_store 282 root  txt    REG    1,6    32768        28 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/live.0.indexIds
mds_store 282 root  txt    REG    1,6    65536        36 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/live.0.indexArrays
mds_store 282 root  txt    REG    1,6    65536        38 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/live.0.directoryStoreFile
mds_store 282 root    5r   DIR    1,6    32768        10 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD
mds_store 282 root   17u   REG    1,6     8192        12 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/psid.db
mds_store 282 root   32r   DIR    1,6    32768        10 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD
mds_store 282 root   41u   REG    1,6       28        15 /Volumes/UNTITLED/.Spotlight-V100/Store-V2/A2D41CCB-48CC-45F3-B8D6-F3B383D91AAD/indexState
$

De lo anterior, es fácil ver que los procesos llamaron mdsy mds_storecrearon y contienen muchos archivos en el volumen.

gmile
fuente
Usarlo of=/dev/rdisk2es mucho más rápido y no es tan gravoso para su tarjeta SD.
Rui F Ribeiro
Hola @RuiFRibeiro! Sí, eso tiene mucho sentido, me olvidé rdiskal escribir esto.
gmile
El dispositivo está ocupado porque está montado automáticamente ...; lo desmontas, haces tu dd, y se volverá a montar automáticamente tan pronto como dd termine.
Rui F Ribeiro
@RuiFRibeiro Lo sé, eso tiene sentido ... ¿Pero hay alguna otra indicación, además de ver /Volumes/UNTITLEDy saber que está montada automáticamente? ¿Como algunos registros, o mejor, algún proceso responsable de tomar el dispositivo?
gmile
1
@RuiFRibeiro resulta que hay 2 procesos que actualmente contienen el volumen montado. Lo que me perdí fue ejecutar lsofy fusercon privilegios de root. Después de ejecutar ambos con sudo, pensé que los procesos se llamaban mdsy mds_storecreaban más de una docena de archivos en el volumen.
gmile

Respuestas:

51

Corte de Apple, reglas de Apple. Prueba diskutil:

$ diskutil list
...

# if mounted somewhere
$ sudo diskutil unmount $device

# all the partitions (there's also a "force" option, see the manual)
$ sudo diskutil unmountDisk $device

# remember zip drives? this would launch them. good times!
$ sudo diskutil eject $device

(En el caso de una imagen de disco, el hdiutilcomando también puede ser de interés. También puede hacer clic Disk Utility.app).

thrig
fuente
Hola @ thrig, gracias. Sí, puedo desmontar usando diskutil, no hay problema con eso. Lo que estoy haciendo aquí es aprender a identificar problemas en el sistema al decir "Sí" a cualquier advertencia que pueda detectar. Quiero saber por qué "Recursos ocupados" está sucediendo en primer lugar, no cómo deshacerme de ellos. ¿Qué proceso exacto en el sistema operativo hace que esto suceda?
gmile
@gmile el kernel, que yo sepa, bloquea los dispositivos ocupados, por lo que debe desmontar y expulsar cualquier partición e imagen para eliminar el bloqueo del kernel.
thrig
Oh, esto es interesante. Voy a google para el bloqueo del kernel ahora. ¿Quizás tienes algún buen recurso en mente para que yo pueda leer al respecto?
gmile
9

Desmontar las subparticiones ayudó

/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *8.0 GB     disk2
   1:             Windows_FAT_16 wr_usb_efi              134.2 MB   disk2s1
   2:                      Linux                         1.1 GB     disk2s2
vgsprasad-mbp:~ vgsprasad$ diskutil umount /dev/disk2s1
Volume wr_usb_efi on disk2s1 unmounted
vgsprasad-mbp:~ vgsprasad$ diskutil umount /dev/disk2s2
disk2s2 was already unmounted
Shivaprasad
fuente
3
aparte del formato faltante, el OP dijo específicamente "Todos en Internet dicen que necesito desmontar el disco primero. Claro, puedo hacer eso y seguir adelante. Pero quiero entender por qué / qué exactamente en OS X está haciendo que el dispositivo esté ocupado. "
Jeff Schaller
@Jeff Me encontré con el mismo problema que gmile, tenía el objetivo de escribir un .iso en una memoria USB, y dd regresó dd: /dev/disk9: Resource busy. Cuando desmonté diskutil umount /dev/disk9s1, el dispositivo desapareció del escritorio, pero /dev/disk9todavía estaba montado, por lo ddque no podía funcionar como debería. Por lo tanto, Mac OSX mantuvo el dispositivo ocupado creando un acceso directo al sistema de archivos interno de la memoria USB.
Gustav