Прямой доступ к жесткому диску без программы FS из C на Linux

Я хочу получить доступ ко всему жесткому диску непосредственно из программы на Си. Там нет ФС и никогда не будет.

Я просто хочу открыть / dev / sda (например) и выполнить ввод-вывод на уровне блоков / секторов диска.

Я планирую написать несколько программ для изучения C-программирования в среде Linux (я знаю язык C, Python, Perl и Java), но мне не хватает уверенности в среде Linux.

В своих целях обучения я думаю, о воспроизведении с kyoto-cabinet и сохранении значения, соответствующего вычисленному хешу, непосредственно в «блок / сектор» жесткого диска, записи пары: «хэш, ссылка на блок / сектор» в файл базы данных хеша kyoto-cabinet.

Я не Я не знаю, возможно ли это с использованием стандартных функций CI / O, иначе мне придется написать «драйвер устройства» или что-то вроде ...

24
задан jww 20 September 2018 в 14:49
поделиться

3 ответа

Да, как отметили другие, вы можете просто открыть блочное устройство.

Однако, это действительно хорошая идея - делать IO (запись в любом случае) на границах блоков и целых блоков. Вы можете использовать что-то вроде pread() и pwrite() для выполнения этих операций ввода-вывода, или mmap часть или все устройство.

Существует множество иоктлов, которые могут быть использованы, смотрите "man sd" для получения дополнительной информации. Не похоже, что все они документированы в одном месте.

В linux/fs.h определены BLKROSET и куча других ioctls, вам придется поискать, чтобы узнать, как их использовать. Вы можете делать полезные вещи, например, узнавать размер устройства и размер блока.

Исходный код пакета util-linux-ng - ваш друг, он содержит примеры.

6
ответ дан 28 November 2019 в 23:39
поделиться

Поскольку файлы устройств для дисков (например, / dev / sda ) являются блочными устройствами, это означает, что вы можете открывать, искать и использовать файл почти как обычный файл.

9
ответ дан 28 November 2019 в 23:39
поделиться

Как упоминалось в другом месте, в системах * NIX, блочные устройства, такие как / dev / sda можно получить как простые файлы. Обратите внимание, что если файловая система смонтирована с устройства, открыть ее как файл для записи не удастся.

Если вы хотите поиграть с блочными устройствами, я бы посоветовал сначала использовать устройство петли , которое представляет простой файл как блочное устройство. Например:

dd if=/dev/zero of=./loop_file_10MB bs=1024 count=10K
losetup /dev/loop0 $PWD/loop_file_10MB

После этого / dev / loop0 будет вести себя как блочное устройство, но вся записанная информация будет сохранена в файле.

25
ответ дан 28 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: