Могу ли я удалить исходный файл во время выполнения "сортировки"?
Я сортирую огромный файл, около 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.