macOS下磁盘管理diskutil命令详解

本文参考diskutil 的 man 手册进行创作!

macOS 提供了一个搭配有GUI界面的磁盘管理工具,同时还提供了一个命令行的磁盘管理命令,那就是 diskutil 。

使用命令 diskutil 可以进行在GUI界面的无法进行的更多操作,例如进行抹掉(也就是Windows下的格式化)硬盘时可选的格式少。

GUI界面的磁盘工具可选抹盘格式

如果需要抹成其他格式的磁盘,这时就需要使用到命令 diskutil 。

在接下来的篇幅中将详细介绍 diskutil 的用法。

直接在命令行输入 diskutil 会显示一个简略的介绍。

简略的介绍

这其中包括 diskutil 的基本用法和一份对磁盘不同操作的速查表。

接下来将介绍大部分操作。如现在来说APFS格式逐渐成为主流,使用APFS格式的硬盘后就没有了日志式这个说法,所以 diskutil 中 enableJournal,disableJournal,moveJournal 这些操作都是针对HFS+格式的不做介绍。

为了更好的阅读以下部分内容,现在先明晰下文所说名词:

  • 设备:下文所说的设备可以是固态硬盘,机械硬盘,U盘,内存卡
  • 文件系统:指磁盘文件系统,即格式化时使用的格式(如 FAT32、ExFAT、APFS)
  • 物理磁盘:硬盘下有文件系统的分区
  • 虚拟磁盘:使用物理磁盘的一部分虚拟成的一个磁盘
  • 设备ID:如 disk0 就是一个设备ID
  • 磁盘ID:如 disk0s1 就是一个磁盘ID

大部分的操作都需要 root 权限,所以执行命令应在前加上 sudo 。

命令中带 [ ] 的部分在执行命令时可以加上,不带 [ ] 的执行命令时必须带上。

打印磁盘列表

diskutil list [-plist] [internal | external] [physical | virtual] [device]

可选项说明:

  • -plist:以源格式打印,效果如下:

    源格式打印

    磁盘有物理磁盘和虚拟磁盘之分,我们说磁盘时默认是说物理磁盘,物理磁盘就是硬盘里有文件系统的分区。

  • internal:只打印内置磁盘
  • external:只打印外置磁盘

    内置磁盘就直接连接在主板的设备里的磁盘,而通过USB接口连接的设备里的磁盘就是外置磁盘。

  • physical:只打印物理磁盘
  • virtual:只打印虚拟磁盘

    物理磁盘就是设备里有文件系统的分区,如Windows下的C盘和D盘。而在一个磁盘中虚拟出一个磁盘,虚拟出来的磁盘就是虚拟磁盘。如你想安装一个虚拟系统进行一些测试时,没有权限更改硬盘的分区数量,这个硬盘的每个分区都非常的大,全部给虚拟系统又过于浪费,这时可以在一个物理磁盘中虚拟一个适合自己大小的磁盘来装虚拟系统,剩下的用来保存数据。

  • device:设备ID

注意:上面的命令中颇有正则表达式的风格,internal 与 external 是一组,physical 与 virtual 是另外一组,使用时只能取每组的一个两两配合使用,也可以取其中一组的一个使用,后面的 device 是可以搭配上面的情况使用的。以下是一些例子:

diskutil list #打印所有磁盘
diskutil list internal # 打印所有内置磁盘
diskutil list disk2 # 打印指定设备disk2
diskutil list internal virtual # 打印所有内置磁盘里所有的虚拟磁盘
diskutil list external physical disk2 # 打印外置设备disk2里所有的物理磁盘
  • 1
  • 2
  • 3
  • 4
  • 5

打印磁盘信息

diskutil info | information [-plist] device | -all

可选项说明:

  • -plist:以源格式打印
  • device:设备ID或磁盘ID
  • -all:打印所有设备和磁盘,包括没有挂载的

注意:info 和 information 只能选其一。device 和 -all 也只能选其一。

显示设备或磁盘的操作活动

diskutil activity

所谓的操作活动并不是指磁盘的读取与写入,操作活动指的是设备的插入、拔出、装载、挂载与推出,磁盘的重命名等( 装载指系统识别硬盘,挂载指在操作系统中的某个文件夹指向磁盘所在位置。即装载只是识别,需要访问磁盘需要进行挂载操作)。

打印支持的文件系统

diskutil listFilesystems [-plist]

可选项说明:

  • -plist:以源格式打印

以下是 macOS 支持的文件系统:

image

取消挂载某一个磁盘

diskutil umount | unmount [force] device

可选项说明:

  • force:强制取消挂载
  • device:磁盘ID

注意:umount 和 unmount 只能选其中一个,这两个是等价的。

取消挂载指定设备的全部磁盘

diskutil umountDisk | unmountDisk [force] device

可选项说明:

  • force:强制取消挂载
  • device:设备ID

注意:umountDisk 和 unmountDisk 只能选其中一个,这两个是等价的。如果 device 指定的是磁盘ID,系统也会推出这个磁盘ID所属的设备。

推出设备

diskutil eject device

可选项说明:

  • device:设备ID

挂载磁盘

diskutil mount [readOnly] [-mountPoint path] device

可选项说明:

  • readOnly:以只读的方式挂载磁盘
  • -mountPoint:选择挂载到指定的路径,路径必须是存在的
  • path:指定路径
  • device:磁盘ID

挂载设备下的全部磁盘

diskutil mountDisk device

可选项说明:

  • device:设备ID

此命令会挂载设备ID对应设备下所有的磁盘。如果 device 指定的是磁盘ID,系统也会挂载这个设备所有的磁盘。

重命名磁盘

diskutil rename | renameVolume device name

可选项说明:

  • device:磁盘ID

注意:rename 和 renameVolume 只能选其中一个,这两个是等价的。

启用磁盘所有权

diskutil enableOwnership device

可选项说明:

  • device:磁盘ID

关闭磁盘所有权

diskutil disableOwnership device

可选项说明:

  • device:磁盘ID

检查磁盘状况

diskutil verifyVolume device

可选项说明:

  • device:磁盘ID

执行fack程序检测磁盘状况,会尝试保持命令执行前磁盘的挂载或推出状态。如果一切正常会显示 “The xxxxxx appears to be OK ” ,需要拥有操作磁盘的所有权。

修复磁盘

diskutil repairVolume device

可选项说明:

  • device:磁盘ID

执行fack程序修复磁盘的数据结构。需要拥有操作磁盘的所有权。

检查设备状况

diskutil verifyDisk device

可选项说明:

  • device:设备ID

执行fack程序检测设备的状况。如果一切正常会显示 “The xxxxxx appears to be OK ” ,需要拥有操作磁盘的所有权。

修复设备

diskutil repairDisk device

可选项说明:

  • device:设备ID

执行fack程序修复设备的数据结构。需要拥有操作磁盘的所有权。

抹掉整个设备

diskutil eraseDisk format name [APM | MBR | GPT] device

可选项说明:

  • format:指定抹掉后的文件系统(只能指定支持的文件系统
  • name:抹掉后磁盘的名称
  • APM|MBR|GPT:磁盘的类型
  • device:设备ID

此命令会抹掉设备里的所有内容,并将所有分区整合为一个分区。如果不指定磁盘的类型,系统默认选择适合设备的类型。需要拥有操作设备的所有权。

抹掉某个磁盘

diskutil eraseVolume format name device

可选项说明:

  • format:指定抹掉后的文件系统(只能指定支持的文件系统
  • name:抹掉后磁盘的名称
  • device:磁盘ID

注意:需要拥有操作磁盘的所有权。

重新格式化磁盘

diskutil reformat device

可选项说明:

  • device:磁盘ID

用磁盘ID的格式和名字重新格式化磁盘。需要拥有操作磁盘的所有权。

格式化光学介质(如CD、DVD等)

diskutil eraseOptical [quick] device

可选项说明:

  • quick:快速格式化
  • device:光学介质ID

注意:需要拥有操作磁盘的所有权。

格式化磁盘并向磁盘写0

diskutil zeroDisk [force] [short] device

可选项说明:

  • force:强制执行
  • short:向device写入最少数量的0
  • device:磁盘ID或者设备ID

这种方式格式化的磁盘,系统将无法识别,如果想恢复使用,需要使用其他格式化命令如 eraseDisk 、eraseVolume 、partitionDisk 。这种格式化的意义在于增加恢复已删除数据的难度。通常操作写0需要大量的时间,通过 short 选项可以防止磁盘被其他软件意外识别,使用short选项并不能增加恢复删除数据的难度。需要拥有操作磁盘的所有权。

格式化磁盘并向磁盘随机写入数据

diskutil randomDisk [times] device

可选项说明:

  • times:写入的次数,默认为1
  • device:磁盘ID或者设备ID

这种方式格式化的磁盘,系统将无法识别,如果想恢复使用,需要使用其他格式化命令如 eraseDisk 、eraseVolume、partitionDisk 。这种格式化的意义在于增加恢复已删除数据的难度。需要拥有操作磁盘的所有权。

安全格式化设备

diskutil secureErase [freespace] level device

可选项说明:

  • freespace:只格式化未使用的磁盘空间。如32G的磁盘用了22G,带上这个选项则只格式化剩下的10G空间。
  • level:需要安全格式化的级别。提供以下几种级别,使用时输入前面的数字即可:
  • 0 :抹掉内容后向磁盘填充0并擦除,执行一次。
  • 1 :抹掉内容后向磁盘填充随机数据并擦除,执行一次。
  • 2 :抹掉内容后使用美国国防部的 5220-22 M标准改写数据并擦除,执行七次。
  • 3 :抹掉内容后使用 Gutmann 算法进行擦除,执行35次。
  • 4 :抹掉内容后使用 DOE 的三次擦除,前两次写入随机数据,最后一次写入已知数据并擦除。共三次。
  • device:磁盘ID或设备ID

来自苹果的忠告:现在这种安全格式化磁盘的方式被认为不再安全。最安全的格式化方式是对所有的数据进行强加密,然后使用以上的方式进行格式化,即使他人可以恢复所有的数据,此时的数据也没有实际的用处。需要拥有操作磁盘的所有权。

对磁盘进行分区

diskutil partitionDisk device [numberOfPartitinos] [APM | MBR | GPT] [part1Format part1Name part1Size part2Format part2Name part2Size ...]

可选项说明:

  • device:设备ID
  • numberOfPartitions:分区数量
  • APM|MBR|GPT:磁盘格式
  • part1Format:第一个分区的文件系统
  • part1Name:第一个分区的名字
  • prit1Size:第一个分区的大小

注意:numberOfPartitions 填了多少,后面都要有对应的分区文件系统、名字、大小。需要拥有操作磁盘的所有权。其中大小可以使用以下格式:165536000, 55.3T, 678M, 75%, R(R 代表让系统自动选择空闲的空间,一般用于最后一个分区的大小指定。

调节磁盘的空间

diskutil resizeVolume device limits | mapsize [-plist] | R | size [numberOfPartitions] [part1Format part1Name Part1Size...]

可选项说明:

  • device:磁盘ID
  • limits:带上这个选项则不会继续任何调节操作,只打印磁盘的有效范围
  • mapsize:带上这个选项不进行调节操作而是打印整个硬盘的大小
  • -plist:以源格式打印
  • R:自动使用所有的未格式化的空间
  • size:调整后的大小
  • numberOfPartitions:分区数量
  • part1Format:分区一的文件系统
  • part1Name:分区一的名字
  • part1Size:分区一的大小

注意:numberOfPartitions 填了多少,后面都要有对应的分区文件系统、名字、大小,调节磁盘空间有这可选项是因为需要把磁盘的空间调小时,下一个的磁盘会占用这个磁盘调小后多出的空闲的空间,到时候想把这个磁盘调回原来的大小会报错(尝试将分区扩展到另一个分区的开头或分区映射的结尾之外),这时给空闲的空间指定一个 Free Space 文件系统,便于这个磁盘下次能正常恢复调节前的大小。需要拥有操作磁盘的所有权。

分割磁盘

diskutil splitPartition device [numberOfPartitions] [part1Format part1Name part1Size ...]

可选项说明:

  • device:磁盘ID
  • numberOfPartitions:分割出来的数量
  • part1Format:第一个分区文件系统
  • partName:第一个分区名字
  • part1Size:第一个分区的大小

注意:numberOfPartitions 指定了分割数量,后面都要有对应的文件系统,名字,大小。被分割的磁盘里所有的数据将会丢失。需要拥有操作磁盘的所有权。

合并磁盘

diskutil mergePartitions [force] format name fromDevice toDevice

可选项说明:

  • force:强制执行
  • format:合并后的文件系统
  • name:合并后磁盘的显示名称
  • fromDevice:开始磁盘的ID
  • toDevice:结束磁盘的ID

注意:开始磁盘ID和结束磁盘ID之间所有的分区都会被合并,两者的ID必须是按照从小到大的顺序,且不在开始磁盘的数据都会丢失。如果不带上 force 选项,且 开始磁盘是一个可以调节大小的磁盘,系统将会忽视 format 和 name 参数,使用开始磁盘的文件系统和名字;还有如果开始磁盘是一个不可调节大小的磁盘,系统将会要求你确认是否继续。需要拥有操作磁盘的所有权。