объединить очень большой (~ TByte) файл за очень короткое время - PullRequest
1 голос
/ 06 февраля 2012

Прежде всего, я хотел бы объяснить, зачем мне это нужно.Мне нужно создать несколько файлов образов дисков для виртуальных машин.эти файлы будут действительно огромными (100 ГБ ~ 1,5 ТБ) файлами, которые заполнены нулями.он должен быть создан за очень короткое время (насколько это возможно, по крайней мере, он должен быть быстрее, чем команда "dd" с "/ dev / zero").требуемый размер будет различным (это означает, что я не могу создать его ранее).Простое решение (пока не знаю) создает файлы в виде разреженного файла.но почему я хочу изменить решение, это своего рода недостаток разреженного файла.

, на мой взгляд, это можно решить путем непосредственного редактирования inode.моя идея состоит в том, чтобы создать действительно большой файл, который заполнен нулями и разделить его по уровню inode.Или я могу создать много файлов по 100 Гбайт, прежде чем объединять эти файлы для создания файлов нужного размера.Я знаю, что "debugfs" может редактировать прямые блоки inode.поскольку "debugfs" используется для восстановления файлов, возможно, я могу использовать его для создания файлов.но я не могу найти, как редактировать косвенные блоки inode до сих пор.Помимо редактирования косвенных блоков, я не уверен в побочном эффекте непосредственного редактирования inode.

В любом случае, есть ли какое-нибудь классное решение или инструмент (если он существует) для "сшивания" огромных файлов или создания нулевой заливкифайл?Команда "cat" или другое простое решение для чтения и записи может не решить мою проблему.

1 Ответ

5 голосов
/ 08 февраля 2012

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

fallocate используется для предварительного выделения блоков в файле.Для файловых систем, которые поддерживают системный вызов fallocate, это делается быстро, выделяя блоки и помечая их как неинициализированные, не требуя ввода-вывода для блоков данных.Это намного быстрее, чем создавать файл, заполняя его нулями.

Начиная с Linux Kernel v2.6.31, системный вызов fallocate поддерживается файловыми системами btrfs, ext4, ocfs2 и xfs.

...