Как создать 64-битный инод? - PullRequest
2 голосов
/ 14 ноября 2011

Мне нужно протестировать 64-битную версию файловых интерфейсов ввода-вывода (открыть, создать статистику и т. Д.). В этом процессе мне нужно создать файл с 64-битным индексом, чтобы были протестированы внутренние 64-битные структуры данных / переменные и, следовательно, API. Как мне создать 64-битный индекс?

Я написал скрипт, в котором я пытаюсь создать вложенный массив каталогов с 1024 файлами в каждой директории. Сценарий занимает огромное количество времени для выполнения и внезапно завершается. Я не могу продолжить, есть ли другой способ добиться этого?

Ответы [ 3 ]

2 голосов
/ 14 ноября 2011

Вы можете смоделировать любой желаемый номер инода, используя FUSE .

Посмотрите на пример hello_ll.c, который поставляется с FUSE.Он создает файловую систему с одним файлом с номером инода 2. Вы можете довольно легко изменить этот файл, чтобы создать файлы с любым номером инода.

Быстрый тест с 0x10000000FFFFFFL делает это:

 $ stat fuse/hello 
  File: `fuse/hello'
  Size: 13          Blocks: 0          IO Block: 4096   regular file
Device: 11h/17d Inode: 4503599644147711  Links: 1
Access: (0444/-r--r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Кроме FUSE, я не знаю практического способа принудительного использования номера инода в «реальных» файловых системах.


Вот минимальный патч, используемый для получения этого:*

0 голосов
/ 15 сентября 2013

Вы можете использовать сценарий systemtap, чтобы просто увеличить номер инода, возвращенный вызовом stat.

В ext4 что-то вроде:

probe kernel.statement("ext4_getattr@fs/ext4/inode.c+21")
{
  $stat->ino = $stat->ino + 4294967295;
}

probe begin { log("starting probe") }

сделает все возможное (вы можетенеобходимо настроить смещение «21», если ext4_getattr отличается в вашем дереве).

0 голосов
/ 14 ноября 2011

Вам потребуется создать 4294967296 файлов или каталогов.

Для этого вам необходимо подготовить файловую систему, чтобы для этого было достаточно места. В зависимости от того, какую файловую систему вы используете, это может быть или не быть возможным. (Я просто попытался сделать это с файловой системой ext4, но она не сработала.)

...