Могу ли я удалить исходный файл во время выполнения "сортировки"?

Я сортирую огромный файл, около 400 гигабайт. У меня заканчивается свободное место на диске, и я должен что-то сделать быстро.

Давайте предположим, что оригинальный файл называется original_file. Так что я выполняю (упрощенно) это как "sort original_file | gzip -c> output_file"

Я использую /home/tmp как временный каталог. Из того, что я вижу, есть много промежуточных файлов, например:

tmpA465

tmpB154

...

и так далее.

Самые маленькие имеют размер 12 мегабайт.

Самые большие имеют ~182 мегабайта.

Таким образом, кажется, что команда "sort" уже разбила исходный файл на маленькие части и отсортировала их, а теперь объединяет их в более крупные части (которые, в конечном счете, будут также отсортированы). Пожалуйста, поправьте меня, если я ошибаюсь.

Могу ли я удалить исходный файл прямо сейчас, не прерывая процесс сортировки? Я ждал этого несколько дней, и важно, чтобы команда "sort" не потерпела неудачу, и я, наконец, получу файл результатов.

ОС - Ubuntu server 13.04, x64.

Спасибо!

1 ответ

Если у вас есть последняя версия sort (8.11+) вы можете ускорить процесс с sort --parallel=N вариант: вы поделитесь работой над N ядрами. Это действительно может повысить вашу работу.

sort --parallel=N 

Что касается того, что касается алгоритма сортировки, вы должны увидеть, например, Алгоритмические подробности команды сортировки UNIX.
Он использует вариацию некоторых Merge сортировка: это означает, что сортирует в блоке всю работу, а после объединения сортирует блоки. Вы можете найти кусочки на /tmp,

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

Я боюсь, что вы не можете знать размер обработанного вывода до последнего прохода. Ключевой момент должен быть в последнем фрагменте сортировки, когда он объединит 2 только что отсортированные части. Можно приступить к созданию первой половины и после второй. Или он может продолжить обработку параллельно двух половин. Но в 1-м случае он будет занимать меньше места на жестком диске. Итак, я полагаю, вы не можете удалить файл.

Чтобы получить окончательный ответ на ваши сомнения, вы должны увидеть код, загружающий вашу версию sort из gnu или взгляд из git.

Другие вопросы по тегам