我的 MacMini 买来好几年了,期间自己拆开加装了一个 SSD,并按照网上的说明,和原先的硬盘组合为一个 Fusion Drive 。
最近脑子发热,想重装一下系统,结果在格式化阶段死在那里不会动了。
各种谷歌百度,各种尝试无效。
首先是分离 Fusion Drive 混合分区。
diskutil cs list # 列出所有 Fusion Drive
苹果客服支持要我直接删除 Logical Volume Group,也就是下面的命令。
diskutil cs delete 11111111-2222-3333-4444-555555555555
后面的 111……555
自行替换为你自己的Logical Volume Group 的 UUID,就是图上第一行漂白部分。
反正我测试了是无效,所以,只好一步一步删除。
找到最下面漂白部分的 logic volume 的 UUID,执行
diskutil cs deleteVolume 11111111-2222-3333-4444-555555555555
后面的 111……555
自行替换为你自己的 UUID。
然后再执行上面的删除 Logical Volume Group 的命令。
最后还是无效,大概停留在 20% 左右的进度就下不去了。大概是分区表被我破坏掉了。
无奈之下,尝试安全删除磁盘
diskutil list
# 我的 ssd 盘显示为 disk3
diskutil unmount force /dev/disk3
# 此步出现找不到磁盘,于是换个命令
diskutil unmountDisk /dev/disk3
#然后下一步安全删除并清零磁盘
diskutil zeroDisk /dev/disk0
#最终还是失败,出现如下错误:
~ Started erase on disk2
~ Error: -69759: Securely erasing data to prevent recovery failed Underlying
~ error: 5: Input/output error
#尝试下面的命令,也是失败
diskutil eraseDisk HFS+ NAME /dev/disk3
此处没有测试一个命令:
fdisk -a hfs /dev/disk3
diskutil 其实是 fdisk 的老版本命令。只是被苹果使用后,有过拓展。但 fdisk 能实现更灵活的操作。不必为苹果的一些安全机制所限制。只是,因为我采用了更测地的抹除模式,所以,没有测试该命令。
大杀器,类 Unix 系统磁盘的深度格式方法
苹果是类 Unix 系统,所以,他的磁盘管理模式底层也是和其他 Unix 系统类似。比如存在一些特殊的设备驱动,如 dev/null
或 dev/random
等。前者接受任何输入,就像一个实时垃圾清理站。后者如果能够被访问,则实时输出一堆随机数据。我们可以通过 cat /dev/random
进行访问,需要通过 Ctrl+c
进行中止。
此处我们就用到 dev/random
来解决我们的磁盘问题。
当我们的磁盘驱动故障或者出现低格问题时,我们可以通过 dev/random
来强制覆盖磁盘,它会毁坏分区表和当前格式,将驱动显示为一个空白盘。
# 进入 root 模式,输入 root 口令
sudo su
# 列出你的磁盘,找到你想要重格的磁盘名称
diskutil list
##### 千万注意不要找错磁盘,下列操作不可恢复。我要低格的是 disk3,命令如下 ####
cat /dev/random > /dev/disk3
运行1分钟左右,按 ctrl+c
中断它。然后执行
diskutil list
如果显示如下,说明磁盘已变为一个空盘。
然后,你就在磁盘工具
中分区、格式,再重装系统即可。
超大杀器,用 dd
命令低格
在 linux 下,低格工具就是 dd
dd if=/dev/zero of=/dev/disk2 conv=noerror bs=128k
bs=bytes:同时设置读写块的大小为 bytes ,可代替 ibs 和 obs
conv=noerror:出错时不停止处理。
盘符视实际情况, diskutil list
可以查看盘符
低格就使用0/1覆盖整个硬盘,时间几个小时,视硬盘大小。
好了,让它格吧,我睡去咯。^_^
对了,还有屠龙刀 ddrescue
我还没测试,不过已经用 brew 安装了。
你可以执行下面的命令先安装着
brew install ddrescue
基本操作:
Usage: ddrescue [options] infile outfile [mapfile]
详细请执行命令 ddrescue --help
查看。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。