I wanted to know if is possible to mount a USB device after it has been removed from the Finder, without having to re-insert it into the USB port.
Se você está falando sobre dispositivos USB em geral? A resposta é sim e não, dependendo do tipo de dispositivo ejetado: sim, se for um disco rígido montado - ou unidade SSD - mas não se for uma unidade flash USB. Detalhes abaixo.
Funciona para unidades de disco rígido USB
Ejetando uma unidade de disco rígido USB e tentando remontá-la com diskutil mountDisk
.
Por exemplo, aqui está o exemplo diskutil list
output da minha máquina Mac OS X 10.9.5 (Mavericks) com um disco rígido externo USB conectado e uma unidade flash USB conectada:
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_HFS Hard Drive 499.2 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *2.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS External Hard Drive 2.0 TB disk2s2
/dev/disk3
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *8.0 GB disk3
1: EFI EFI 209.7 MB disk3s1
2: Apple_HFS USB Flash Drive 7.7 GB disk3s2
Ok, agora vou em frente e ejete o "Disco Rígido Externo" e verifique diskutil list
novamente e a saída parece 100% a mesma que a montada:
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_HFS Hard Drive 499.2 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *2.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS External Hard Drive 2.0 TB disk2s2
/dev/disk3
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *8.0 GB disk3
1: EFI EFI 209.7 MB disk3s1
2: Apple_HFS USB Flash Drive 7.7 GB disk3s2
Então, agora, se eu quiser remontar o "Disco Rígido Externo", só preciso anotar o identificador de partição do "Disco Rígido Externo" ( disk2s2
) e executar este comando:
diskutil mountDisk /dev/disk2s2
Aguarde a conclusão do processo e o volume será montado como esperado.
não funciona para unidades flash USB
Ejetando uma unidade flash USB e tentando remontá-la com diskutil mountDisk
.
Mas se eu prosseguir e ejetar o "USB Flash Drive" e executar diskutil list
novamente, "USB Flash Drive" será removido da lista:
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_HFS Hard Drive 499.2 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *2.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS External Hard Drive 2.0 TB disk2s2
E mesmo se eu tentar montar o flash drive USB conhecendo o ponto de montagem da lista anterior, como este:
diskutil mountDisk /dev/disk3s2
O sistema diz:
Unable to find disk for /dev/disk3s2
O que explica essa discrepância no comportamento? Não tenho certeza. Mas o que se resume é se o dispositivo USB é um disco rígido ou SSD e aparece na lista retornada por diskutil list
, então você não deve ter problemas em remontar o dispositivo USB. Mas se é uma unidade flash USB e não aparece nessa lista? Não pode ser remontado a menos que a unidade flash USB seja fisicamente desconectada e reconectada novamente.
Funciona para unidades flash USB
Descarregando e recarregando a extensão do kernel de armazenamento em massa USB ( IOUSBMassStorageClass.kext
).
Tudo isso, comentário Nesta resposta por Jannis Linxweiler explica como se você descarregar e recarregar a extensão do kernel de armazenamento em massa USB ( IOUSBMassStorageClass.kext
) você pode efetivamente obter a unidade flash USB para remontar sem desconectá-lo fisicamente.
Testei isso na minha máquina Mac OS X 10.9.5 (Mavericks) e ele funciona como esperado.
Primeiro, ejete a unidade flash USB e execute este comando para descarregar IOUSBMassStorageClass.kext
:
sudo kextunload /System/Library/Extensions/IOUSBMassStorageClass.kext
Em seguida, execute este comando para recarregar o IOUSBMassStorageClass.kext
:
sudo kextload /System/Library/Extensions/IOUSBMassStorageClass.kext
Fiz isso e meu flash drive USB voltou sem tocá-lo fisicamente. Truque puro! E isso não afeta as unidades de disco rígido USB conectadas do que eu posso dizer.