Ускорьте копирование 1 000 000 маленьких файлов

"сочините" на консоли, позволяет вводить два символа, но производить третий.

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

для создания это работать в UTF-8, который является многобайтовым (1 - 4 байта, по крайней мере) потребовало бы больших изменений в способе, которым ввела консоль, обрабатывается, и замените простой массив символов, в настоящее время используемый чем-то более сложным. Кажется, что нет планов сделать так (согласие среди ядра devlopers - то, что консоль должна остаться консолью, чем-то простым, только используемым для последнего курорта; при фактической необходимости в unicode затем, Вам, вероятно, также нужны bidi, формирование, и т.д.; затем лучше выполнить графический терминал (полный экран xterm на X11; но существуют другие возможности).

Так, действительно это не работает и не будет работать с многобайтовыми символами на консоли. НО, это все еще работает при ограничении составить определений плоскости ASCII.

И я также узнал, что это также работает, если вывод находится в iso-8859-1 (которые соответствуют значениям unicode до 0x00ff); для этого можно вставить, некоторые запускают сценарий строка:

    loadkeys /somepath/somefile

и вставленный, который регистрируют составить определения, которые Вы хотите (стараться сохранить файл в кодировании ISO-8859-1; и используйте символы, больше, чем 0x7f только как вывод), синтаксис такого файла очень прост, строки как это:

    compose 'somechar' 'somotherchar' to 'desiredoutput'

например:

    compose 'a' 'a' to 'å'
    compose 'a' 'e' to 'æ'

апострофа нужно оставить.

эффект мертвых ключей диакритических знаков также определяется в том файле; для dead_acute + Вы определяют строку как:

    compose '\'' 'a' to 'á'

dead_grave использует обратную галочку ('), dead_diaeresis использует doublequote ("), dead_circumflex циркумфлекс использования (^), и dead_tilde использует тильду (~).

9
14.04.2014, 00:09
3 ответа
[113560]Предположим, что

записи, возвращаемые [114403]readdir[114404], не отсортированы по номеру кода

чтения файлов в порядке inode уменьшает количество поисковых операций


содержание большинства файлов в начальном выделении 8k (оптимизация ext4), что также должно давать меньшее количество поисковых операций


вы можете попытаться ускорить копирование путем копирования файлов в порядке inode.

Это означает использование чего-то подобного:

9
27.01.2020, 20:05
[113632]GNU [114082]tar[114083] - in the [114084]pax[114085] pax - handle hardlinks on the own.

Таким образом, у вас есть только два процесса [114086]tar[114087] и вам не нужно снова и снова ссылаться на [114088]cp[114089].[113635].

4
27.01.2020, 20:05
[113682]По аналогии с ответом [114128]@maxschlepzig's[114129] можно разобрать вывод [114130]filefrag[114131] для сортировки файлов в порядке появления их первых фрагментов на диске:

  • MMV с помощью приведенного выше скрипта [114132]sed[114133], поэтому обязательно тщательно протестируйте. В противном случае, что бы вы ни делали, [114134]filefrag[114135] (часть [114136]e2fsprogs[114137]) будет гораздо быстрее использовать, чем [114138]hdparm[114139], так как он может принять несколько аргументов файла. Только накладные расходы при выполнении [114140]hdparm[114141] 1,000,000 раз добавят много накладных расходов.

  • Также, наверное, не составит труда написать скрипт [114142]perl[114143] (или программу на С), в [114144]FIEMAP
  • ioctl[114147] для каждого файла, создать отсортированный массив блоков, которые должны быть скопированы, и файлов, которым они принадлежат, а затем скопировать все по порядку, прочитав размер каждого блока из соответствующего файла (будьте осторожны, чтобы не закончились дескрипторы файлов).[113689].
  • 2
    27.01.2020, 20:05

    Теги

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