背景
有一次正在往移动硬盘中下载 pdf,有事要出门,于是让电脑休眠,顺便把插座电源关了(我们的出门关电源的好习惯啊喂!)。移动硬盘和电源是通过转接头连着的,于是在检测到断电后,移动硬盘自动退出了。
可是,文件还正在下,而 Mac 下移动硬盘又出了名的脆,果不其然,再插上之后桌面无法自动显示移动硬盘图标。
作者:青藤木鸟 Muniao's blog 转载请注明出处
解决
自然去谷歌一番,发现大家都遇到了这个问题,解决方法也大同小异。作为一个程序员,自然先从命令行解决方案说起,小白用户可以直接跳过,后面会说如何用苹果自带工具解决。
命令行
主要是利用磁盘操作工具 diskutil 和磁盘修复检查工具 fsck_hfs。
- 查看当前挂载的所有磁盘
diskutil list
结果如下:
/dev/disk0 (internal):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme 121.3 GB disk0
1: EFI EFI 314.6 MB disk0s1
2: Apple_APFS Container disk1 121.0 GB disk0s2
/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +121.0 GB disk1
Physical Store disk0s2
1: APFS Volume Macintosh HD 97.5 GB disk1s1
2: APFS Volume Preboot 37.8 MB disk1s2
3: APFS Volume Recovery 1.0 GB disk1s3
4: APFS Volume VM 6.4 GB disk1s4
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Microsoft Basic Data my-backup 1000.0 GB disk2s2
可以根据名字 my-backup 看出,/dev/disk2 是我的移动硬盘,/dev/disk2s2 是我的移动硬盘数据分区。至于/dev/disk2s1,应该是移动硬盘系统区,不用管。于是执行下面命令挂载移动硬盘数据卷(需要注意的是:diskutil mountDisk 是挂载整个盘的,但是在数据卷损坏的情况下,挂载整个盘没啥用):
diskutil mount /dev/disk2s2
发现超时:
Volume on disk2 timed out waiting to mount
搜索后发现是在挂载上一个存在问题的盘后,Mac 就会在后台自动运行 fsck_hfs,导致 diskutil 挂载超时。执行 ps aux | grep fsck 可以发现:
root 70983 1.0 0.1 4306296 5508 ?? Us 10:53下午
0:02.74 /System/Library/Filesystems/exfat.fs/Contents/Resources/fsck_exfat -y -x /dev/rdisk2s2
当然你可以将该进程杀掉(sudo pkill -f fsck),然后再挂载(diskutil mount /dev/disk2s2),此时会挂载成功,但是会存在数据不一致现象。所以仍是得执行上述磁盘修复命令(如果是 apfs 文件系统,需要用 fsck_apfs):
fsck_exfat -y -x /dev/disk2s2
然后等待其结束(具体多久那就不一定了,我的都是在几分钟的数量级),然后再:
diskutil mount /dev/disk2s2
具体这两个命令其他用法可以通过 man diskutil 和 man fsck_hfs 来查看。
图形界面
其实上述两个工具 Mac 都集成在了一款内置的 “磁盘工具” 之中。通过 command+空格 “聚焦搜索” 磁盘工具可以调出。
选择无法识别的移动硬盘 xx-backup 然后点急救,就是会执行 fsck_exfat -y -x /dev/disk2s2 并在执行成功后自动挂载。如果急救出现问题,说明后台可能已经在运行 fsck_exfat 命令了,这时候你只需要等待就行了。
总结
- 电源断电会引起移动硬盘不正常退出,切记切记。
- 如果重新插上不显示,不要慌。等会就好了,因为Mac后台默默的帮你检查一致性。
- 如果有点慌就按上面我说的探索一番吧。