Estaba buscando una manera de montar la partición EFI en MacOS cuando me di cuenta de que en realidad había dos comandos para montar una partición: mount
y diskutil mount
. ¿Cuál es la diferencia entre ellos? No he podido encontrar nada sobre sus diferencias en Internet.
Respuesta
¿Demasiados anuncios?mount()
es en realidad una llamada al sistema, lo que significa que es una función C ofrecida por la biblioteca del sistema ( libSystem
) para indicar al sistema que monte una unidad de disco. Hablará con el núcleo del sistema operativo y le indicará qué montar, dónde montarlo y cómo montarlo.
La herramienta de línea de comandos mount
es un simple binario alrededor de esta llamada de función. Analiza sus argumentos y luego los introduce en el sistema mount()
comprueba el resultado de la operación e imprime un mensaje de error apropiado si no puede analizar sus argumentos o si la operación de montaje falla por alguna razón. La presencia de esa herramienta es requerida por el POSIX y como MacOS es un sistema compatible con POSIX, tiene que ofrecer ese comando.
Este comando también se encuentra en casi todos los sistemas UNIX, así como en todos los sistemas Linux, ya que es la forma en que un usuario con acceso al shell ordena al sistema que realice una llamada de montaje sin tener que escribir primero código C y compilar ese código a un binario utilizando un compilador de C. También de esa manera se puede realizar la operación de montaje desde dentro de los scripts del shell.
diskutil
es otro comando proporcionado por Apple para MacOS y es la versión de línea de comandos de la aplicación "Utilidad de Discos". La versión de interfaz de usuario se parece a esto:
Por supuesto, esta aplicación también es capaz de montar unidades, por lo que también tiene una función de montaje que se puede activar mediante diskutil mount
(en la aplicación de interfaz de usuario, seleccione un disco y, a continuación, elija el icono de montaje de la barra de herramientas situada en la esquina superior derecha o abra el menú contextual y seleccione "Montar").
Como puede ver en la página de manual de diskutil
la llamada de montaje tiene muchas menos opciones disponibles ( readOnly
y un -mountPoint
), que limita las formas en que se puede montar un volumen, pero normalmente las opciones que faltan no son necesarias. Además, algunas opciones no son necesarias como diskutil
calculará automáticamente la configuración correcta (mientras que mount
es bastante tonto y a menudo requiere que especifiques ajustes adicionales para que funcione correctamente).
También diskutil
permite a los usuarios administradores (y a veces incluso a los usuarios normales) montar volúmenes que de otro modo requerirían privilegios de Root, por eso normalmente hay que usar sudo
con mount
pero no con diskutil
(para empezar, no permitirá operaciones maliciosas y, como no se puede establecer ninguna opción peligrosa, tampoco se puede romper nada). Por comodidad y seguridad, diskutil
siempre montará volúmenes en /Volumes
y a un directorio con el mismo nombre que el volumen de disco; puede montar un volumen en otro lugar con el comando mountPoint
pero entonces se requieren privilegios de Root (ya que es una operación potencialmente peligrosa).
Por último mount
requiere especificar la fuente de montaje como dispositivo de disco (algo así como /dev/disk1s2
) pero diskutil
también permite especificar un volumen por su UUID (cada volumen tiene un identificador único parecido a éste 3717b1fa-e76b-11ec-9b88-7e3148d68d41
), e incluso por nombre de volumen (por ejemplo, "Macintosh HD"; si varios volúmenes tienen ese nombre, elige el primero que encuentra).
Así que a menos que tenga que utilizar mount
por alguna razón (por ejemplo, porque necesita una opción determinada) o quiere escribir un script, normalmente siempre utilizará diskutil mount
en MacOS para montar volúmenes. Es más fácil de usar, proporciona mejores mensajes de error y no requiere que te hagas Root primero. Sólo recurrir a mount
si lo que intenta hacer no es posible con diskutil
.