Как преднамеренно фрагментировать файл

Я ищу способ фрагментировать существующий файл, чтобы оценить производительность некоторых инструментов. Я нашел решение для файловой системы NTFS под названием MyFragmenter, как описано в этом потоке . Однако я ничего не могу найти для ext2 / 3/4 … Я гость, я могу разработать свой собственный файловый фрагментатор, но из-за ограниченного времени мне хотелось бы найти более быстрое решение. Я нашел такой инструмент, как HJ-Split, который разбивает файл на меньшие биты, но я сомневаюсь, что это будет имитировать фрагментацию файлов.

Доступно ли решение для моей проблемы?

2 Solutions collect form web for “Как преднамеренно фрагментировать файл”

Если вы хотите обеспечить фрагментацию, но не мешать ей (так что у вас есть только частичный контроль над тем, что происходит), и вы не заботитесь о специфике фрагментации, вот быстрый и грязный способ делать что-то.

Чтобы создать файл из n блоков по крайней мере в двух фрагментах:

  1. Откройте файл с синхронной записью, напишите m <n блоков.
  2. Откройте другой файл. Добавьте к нему до тех пор, пока на диске не останется блоков n – m. Не делайте это разреженным по ошибке!
  3. Запишите оставшиеся n-м блоки в первый файл.
  4. Закройте и unlink второй файл.

Вы можете фрагментировать больше фрагментов, чередуя больше файлов.

Это предполагает, что файловая система доступна для такого рода пыток, то есть не в многопользовательской или критически важной среде. Он также предполагает, что файловая система не имеет зарезервированных блоков, или зарезервированные блоки зарезервированы для вашего UID, или вы root.

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

Кроме того, обеспечение файловой системы фрагментации ничего не говорит о том, что происходит на более низких уровнях. LVM, программный и аппаратный RAID, переназначение сектора аппаратного уровня и другие уровни абстракции могут играть хаос с вашими ожиданиями (и измерениями).

Мне еще предстоит встретить файловую систему общего назначения в Linux, которая пожертвует пропускной способностью записи по сравнению с непрерывными файлами. То есть, каждая файловая система фрагментирует, если фрагменты написаны в непоследовательном порядке, особенно с разреженными файлами.

Простой способ: запустить файл через торрент-клиент – желательно то, что не предварительно выделяет файл. BitTornado или rtorrent соответствуют этому счету. (Первый имеет настраиваемые режимы распределения)

Трудный путь: разделите исходный файл на куски некоторого размера KB, перетасуйте их. Откройте файл назначения. Для каждого предмета, ищите его правильное положение и пишите.

Вот сценарий Perl, который делает это:

 #!/usr/bin/perl use List::Util qw/shuffle/; use IO::Handle; use constant BLOCK_SIZE => 4096; my ($src, $dst) = @ARGV; my $size = (stat($src))[7]; my @blocks = shuffle(0 .. ($size / BLOCK_SIZE)); my ($srcfh, $dstfh); open $srcfh, "<", $src or die "cannot open $src: $!"; open $dstfh, ">", $dst or die "cannot open $dst: $!"; truncate $dstfh, $size; # undefined behaviour my $buf; for my $blockno (@blocks) { seek $_, $blockno * BLOCK_SIZE, 0 for ($srcfh, $dstfh); read $srcfh, $buf, BLOCK_SIZE; print $dstfh $buf; $dstfh->flush; } close $dstfh; close $srcfh; 

Вы можете проверить фрагментацию с filefrag команды filefrag , содержащейся в пакете e2fsprogs.

Вот пример того, что делает торрент:

 # ls -sh amd64memstick-5.1.2.fs.gz 239M amd64memstick-5.1.2.fs.gz # filefrag amd64memstick-5.1.2.fs.gz amd64memstick-5.1.2.fs.gz: 585 extents found 

Вот что я получил с моим скриптом (на ext3):

 $ ls -sh source.tar 42M source.tar $ perl fragment.pl source.tar fragmented.tar $ md5sum fragmented.tar source.tar f77fdd7ab526ede434f416f9787fa9b3 fragmented.tar f77fdd7ab526ede434f416f9787fa9b3 source.tar # filefrag fragmented.tar fragmented.tar: 395 extents found 

EDIT: Ничего, в конце концов, похоже, что это не так хорошо, за исключением довольно больших файлов (например, 1,5 ГБ фрагментов файлов).

Система VM, вероятно, кэширует и откладывает / переупорядочивает слишком малые записи. Вот почему торрент-клиентам удается фрагментировать (поскольку они обычно не загружаются с> 10 МБ / с), но мой скрипт не работает. Я думаю, что это может быть изменено путем снижения порогов vm. См. /proc/sys/vm/dirty_*

  • Как изменить настройки, чтобы разрешить запись на жесткий диск USB в Debian
  • восстановить поврежденный каталог из раздела ext3
  • Помимо журнала, каковы различия между ext2 и ext3?
  • В чем разница между параметрами fsck -y и -p?
  • Что такое размер фрагмента в файловой системе ext3?
  • Как файлы, выложенные в ext2 / ext3 / ext4?
  • Какие существуют опции для настройки кэширования файловой системы Linux?
  • Как исправить фрагментированный диск - миф или правду?
  • EXT3 файловая система pre дайджест материал
  • Mount EXT3 с блоками 16 КБ
  • Максимальный размер отдельного файла в ext3 на таблицах mysql?
  • Нет такого файла или каталога для файлов с акцентированными символами
  • Interesting Posts

    По умолчанию для автоматической настройки обновлений включена линия. Для чего это?

    Запустите i3lock с паролем другого пользователя

    распечатать, если следующая строка содержит

    Где vmstat получает статистику «используемой памяти»?

    concat pdf страницы после pdfcrop

    Как изменить среду рабочего стола в Raspbian?

    Какое программное обеспечение для сжатия файлов для Linux предлагает самое высокое уменьшение размера?

    разбиение столбца с помощью awk

    Как VARIABLE = () {определение функции} работает в bash

    Запишите любую команду, похожую на `time`

    Удалить все «в» Задания, кроме первых пяти заданий

    Каков лучший дистрибутив linux для виртуального бокса? preff. небольшая прямая загрузка и большой список пакетов

    Что такое настольный менеджер Mint?

    используя скрипт bash для вывода нового скрипта: нужна замена переменных, которые нужно заменить и не заменить

    член группы не может записать файл с возможностью записи в группу с помощью reiserfs и расширенных списков ACL

    Linux и Unix - лучшая ОС в мире.