Я пытаюсь восстановить плохой сектор на моем диске, и при этом мне нужно записать поверх плохого сектора. Многочисленные источники в Интернете предлагают использовать 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 и т. д.), вмешиваться в системные процессы, загружать неправильно подписанные kexts и т. д. Но для того, чтобы обеспечить эту защиту системных папок, он также предотвращает необработанные записи на устройство, на котором находится системный том. Да, даже если вы root (в этом и смысл — ограничить ущерб от вредоносного ПО, которое получает доступ root).
ядуматьэтот лимит не будет применяться врежим восстановления. Удерживайте Command-R во время запуска компьютера, и он загрузится со скрытого аварийного раздела. Откройте Терминал (он находится в меню Утилиты) и попробуйте оттуда dd
. dd
может отсутствовать в системе восстановления (она довольно минималистична), но вы можете использовать /Volumes/Macintosh\ HD/bin/dd
вместо нее. Вам не понадобится sudo
, вы уже являетесь пользователем root.
Если это не сработает, попробуйте отключить SIP с помощью csrutil disable
, а затем перезагрузиться в обычном режиме (см.Документ Apple по настройке SIP). Затем, когда вы закончите, я бы рекомендовал снова включить его — это полезная функция безопасности.
решение2
В моем случае мне пришлось изменить «Системные настройки > Безопасность и конфиденциальность > Полный доступ к диску > Терминал» или iTerm2.
После того, как я предоставил полный доступ к диску терминалу или dd
операции iTerm2 были разрешены без изменения SIP/root или + r... Я тоже это попробовал ;-)
решение3
Попробуйте использовать su
.
В Linux/Unix сначала необходимо установить пароль для пользователя root, например:
sudo passwd root
Тогда у вас должно быть достаточно разрешений, чтобы сделать это.
Также проверьте, все ли разделы размонтированы.
Введите mount
и проверьте, какие разделы смонтированы.
Затем:
sudo umount /dev/disk1sX
Вместо того, чтобы disk1sX
написать правильный раздел.