我正在尝试恢复磁盘上的坏扇区,在此过程中,需要覆盖坏扇区。网上有很多资料建议使用 dd 来执行此操作,但这样做不起作用:
$ sudo dd if=/dev/zero of=/dev/disk1 bs=512 count=1 seek=961575240
dd: /dev/disk1: Operation not permitted
$
我猜想也许对已挂载的文件系统执行此操作有某种检查,所以我启动到单用户模式(至少处于只读模式),但仍然出现相同的错误。不过还显示了一些有关沙盒的附加消息。
Sandbox: dd(5) System Policy: deny(1) file-write-data /dev/disk1
Sandbox: dd(5) System Policy: deny(1) file-write-data /dev/disk1
有没有办法让 dd 离开沙盒?我试过了
sudo sandbox-exec -p '(version 1) (allow default)' /bin/dd if=/dev/zero of=/dev/disk1 bs=512 count=1 seek=961575240
但仍然出现操作不允许的错误。
这是在 OS X 10.11 GM 上
答案1
我没有牺牲的电脑来测试这个,但我认为你遇到了系统完整性保护El Capitan 中的功能。大多数情况下,SIP 的作用是阻止您(即使以 root 身份)修改磁盘的系统区域(/System、/sbin、/bin/ 大部分 /usr 等)、干扰系统进程、加载未正确签名的 kext 等。但为了加强对系统文件夹的保护,它还会阻止对系统卷所在设备的原始写入。是的,即使您是 root(这就是重点——它是为了限制获得 root 访问权限的恶意软件造成的损害)。
我思考此限制不适用于恢复模式。计算机启动时按住 Command-R,它将从隐藏的紧急分区启动。打开终端(它位于实用程序菜单下),然后从dd
那里尝试。dd
可能不存在于恢复系统中(它非常小),但您可以改用/Volumes/Macintosh\ HD/bin/dd
。您不需要sudo
,您已经是 root 了。
如果这不起作用,请尝试使用 禁用 SIP csrutil disable
,然后正常重启(请参阅Apple 关于配置 SIP 的文档)。然后,当您完成后,我建议重新启用它——这是一个有用的安全功能。
答案2
就我而言,我必须更改“系统偏好设置 > 安全和隐私 > 完全磁盘访问 > 终端”或 iTerm2。
在我授予终端或 iTerm2 完全磁盘访问权限后,无需更改 SIP/root 或+dd
即可允许操作... 我也尝试过 ;-)r
答案3
尝试使用su
。
在 linux/unix 上,您首先必须为 root 用户设置密码,例如:
sudo passwd root
那么您应该有足够的权限来执行此操作。
还请检查所有分区是否均已卸载。
输入mount
并检查已安装的分区。
然后:
sudo umount /dev/disk1sX
而不是disk1sX
写入正确的分区。