Чтение сектора на загрузочном диске
Это продолжение моего вопроса о чтении суперблока.
Допустим, я хочу использовать файловую систему HFS+ в Mac OS X. Как я могу прочитать сектор 2 загрузочного диска? Насколько я знаю, Unix обеспечивает только системные вызовы для чтения из файлов, которые никогда не хранятся в этом месте.
Требуется ли для этого 1) программа для запуска в режиме ядра или 2) программа для написания на ассемблере? Я бы предпочел избежать любого из этих ограничений, особенно последнего.
4 ответа
В Linux вы можете прочитать из специального файла устройства /dev/sda
Предполагая, что жесткий диск, который вы хотите прочитать, является первым. Вы должны быть root, чтобы читать этот файл. Чтобы прочитать сектор 2, вы просто стремитесь сместить 2*SECTOR_SIZE
и читать в SECTOR_SIZE
байт.
Я не знаю, доступен ли этот файл устройства в OS X. Проверьте файлы с интересными именами в /dev
такие как /dev/sda
или же /dev/hda
,
Я сделал это сам на Mac, см. Мой инструмент для редактирования диска: http://apps.tempel.org/iBored
Вы бы открыли диск, используя /dev/diskN или /dev/rdiskN (N - номер индекса диска, начинающийся с 0). Затем вы можете использовать lseek (обязательно используйте версию с 64-битным диапазоном!) И читать / записывать вызовы для открытого файла.
Также используйте команду оболочки "ls /dev/disk*", чтобы увидеть, какие диски существуют в настоящее время. И обратите внимание, что диски также существуют с расширением "sM", где M - номер раздела. Таким образом, может также читать разделы напрямую.
Или вы можете просто использовать инструмент оболочки "xxd" или "dd" для чтения данных и затем использовать их вывод. Может быть проще.
Вы не сможете читать ваш корневой диск и другие внутренние диски, если вы не запускаете от имени пользователя root. Вы можете получить доступ к другим дискам, если они были смонтированы пользователем, или их разрешения отключены. Но вам также может понадобиться сначала отключить тома диска. Найдите команду unmount в команде оболочки "diskutil".
Надеюсь это поможет.
Обновление 2017: в OS X 10.11 и более поздних версиях SIP также может препятствовать прямому доступу к секторам диска.
Я также собирался предложить использовать файл /dev/ device для тома, но вы можете связаться с Амитом Сингхом, который написал утилиту hfsdebug и, вероятно, сделал именно то, что вы хотите.
Как это работает с точки зрения разрешений? Не будет ли чтение из /dev/... небезопасным, поскольку, если вы будете читать достаточно далеко, вы сможете читать файлы, для которых у вас нет прав на чтение?