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

Потому что при начальном рендере {Component} оценивается как ноль. Как вы использовали деструктуризацию.

const { module: Component } = this.state;

так

 Component = null

Но когда вы используете <Component/> при начальном рендере, компонент <Component/> отсутствует. Таким образом, использование { <Component />} дает ошибку.

Использование Component и <Component/> отличается.

8
задан tshepang 4 April 2014 в 18:47
поделиться

15 ответов

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

Я думаю, что следующее могло бы работать:

  1. Выделите редкий файл объединенного размера.
  2. Копия 100 МБ от конца второго файла в конец нового файла.
  3. Усеченные 100 МБ конца второго файла
  4. Цикл 2&3, пока Вы не заканчиваете второй файл (С 2. измененный к корректному месту в целевом файле).
  5. Сделайте 2&3&4, но с первым файлом.

Это все сразу полагается на редкую поддержку файла и пространство освобождения усечения файла.

Если бы Вы на самом деле хотели сделать это затем, то необходимо заняться расследованиями dd команда. который может сделать шаг копирования

Кто-то в другом ответе дал аккуратное решение, которое не требует редких файлов, но действительно копирует file2 дважды:

  1. Копия 100 МБ разделяет на блоки от конца файла 2 в новый файл 3, заканчиваясь в обратном порядке. Усечение файла 2, когда Вы идете.
  2. Копия 100 МБ разделяет на блоки от конца файла 3 в файл 1, заканчиваясь с блоками в их первоначальном заказе, в конце файла 1. Усечение файла 3, когда Вы идете.
8
ответ дан 5 December 2019 в 04:52
поделиться

Вы можете получать пространство путем сжатия целой файловой системы. Я полагаю, что NTFS поддерживает это, и я уверен, что существуют разновидности *, отклоняют файловые системы, которые поддерживали бы его. Это также обладало бы преимуществом после копирования файлов, Вы будете все еще иметь больше дискового пространства в запасе чем тогда, когда Вы запустили.

0
ответ дан 5 December 2019 в 04:52
поделиться

Хорошо, изменяя проблему немного. Возможности существует другой материал на диске, в котором Вы не нуждаетесь, но Вы не знаете то, что это или где это. Если бы Вы могли бы найти его, Вы могли бы удалить его, и затем возможно, у Вас было бы достаточно дополнительного пространства.

Найти эти "опухоли", использую ли несколько больших или много небольших, я немного программы выборки. При запуске с верхней части каталога (или корень) это делает две передачи. В передаче 1, это обходит дерево каталогов, сложение размеров всех файлов для получения в общей сложности N байтов. В передаче 2, это снова обходит дерево каталогов, притворяясь, что это читает каждый файл. Каждый раз, когда это передает байты N/20, это распечатывает путь к каталогу и название файла, который это "читает". Таким образом, конечным результатом являются 20 глубоких образцов путей, однородно распространенных по всем байтам в соответствии с каталогом.

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

(Это - эквивалентный пространству из метода выборки, который я использую для оптимизации производительности.)

0
ответ дан 5 December 2019 в 04:52
поделиться

Вы могли сделать это:

head file2 --bytes=1024 >> file1 && tail --bytes=+1024 file2 >file2 

можно увеличиться 1024 согласно тому, сколько дополнительного дискового пространства Вы имеете, затем просто повторите это, пока все байты не были перемещены.

Это - вероятно, самый быстрый способ сделать это (с точки зрения времени разработки)

0
ответ дан 5 December 2019 в 04:52
поделиться

Я сомневаюсь, что это - прямой ответ на вопрос. Можно рассмотреть это как альтернативный способ решить проблему.

Я думаю, что возможно рассмотреть 2-й файл как часть 2 первого файла. Обычно в приложении zip, мы видели бы, что огромный файл разделяется на несколько частей. При открытии первой части приложение автоматически рассмотрело бы другие части в последующей обработке.

Мы можем моделировать то же самое здесь. Как @edg на которую указывают, несерьезная файловая система был бы один путь.

0
ответ дан 5 December 2019 в 04:52
поделиться

Две мысли:

Если у Вас есть достаточно физической RAM, Вы могли бы на самом деле считать второй файл полностью в память, удалить ее, затем записать, что она в добавляет режим в первый файл. Конечно, если Вы теряете питание после удаления, но прежде, чем завершить запись, Вы потеряли часть второго файла навсегда.

Временно уменьшите дисковое пространство, используемое функциональностью ОС (например, виртуальная память, "корзина" или подобный). Вероятно, только использования в Windows.

0
ответ дан 5 December 2019 в 04:52
поделиться

Не очень эффективный, но я думаю, что это может быть сделано.

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

1
ответ дан 5 December 2019 в 04:52
поделиться

хорошо, для теоретических развлечений, и только если Вы обещаете не потратить впустую свое время, на самом деле делающее его:

  • файлы хранятся на диске в частях
  • части связаны в цепочке

Таким образом, можно связать файлы:

  • соединение последней части первого файла к первой части последнего файла
  • изменение записи каталога для первого файла, который изменит последнюю часть и размер файла
  • удаление записи каталога для последнего файла
  • чистка маркера конца файла первого файла, если любой
  • обратите внимание, что, если последний сегмент первого файла только частично заполнен, необходимо будет скопировать данные, сегменты последнего файла, который постарается не иметь мусор посреди файла [благодарят @Wedge!]

Это было бы оптимально эффективно: минимальные изменения, минимальное копирование, никакое пространство резервного диска не требуется.

теперь пойдите, покупают карту памяти ;-)

1
ответ дан 5 December 2019 в 04:52
поделиться

Рискуя тем, чтобы звучать легкомысленными, Вы рассмотрели возможность просто получения большего диска? Это, вероятно, было бы более быстро...

1
ответ дан 5 December 2019 в 04:52
поделиться

Вот небольшое улучшение по сравнению с моим первым ответом.

Если Вы имеете свободных 100 МБ, копируете последние 100 МБ из второго файла и создаете третий файл. Усеките второй файл, таким образом, это теперь на 100 МБ меньше. Повторите этот процесс, пока второй файл не был полностью разложен на блоки индивидуума 100MB.

Теперь каждый из тех файлов 100 МБ может быть добавлен в первый файл по одному.

7
ответ дан 5 December 2019 в 04:52
поделиться

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

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

4
ответ дан 5 December 2019 в 04:52
поделиться

время потратило выяснение умного решения, включающего перестановку сектора диска и цепочечное файлом управление: 2-4 часа

время, проведенное при получении/записи программного обеспечения, чтобы сделать оперативную копию и усеченный: 2-20 часов

уровень программиста медианы времен в размере $50/часов: $400-1 200

стоимость Карты памяти на 1 ТБ: $100-200

способность понять фразу "альтернативные издержки": бесценный

15
ответ дан 5 December 2019 в 04:52
поделиться

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

Ранее представленный ответ на основе редкой файловой системы хорош (кроме деструктивного характера его, если что-то идет не так, как надо!), если у Вас есть редкая файловая система. Что, если Вы не делаете, хотя?

Запуск с конца файла 2 копирует блоки в запуск конечного файла, инвертирующего их, когда Вы идете. После каждого блока Вы усекаете исходный файл к нескопированной длине. Повторитесь для файла № 1.

В этой точке конечный файл содержит все данные назад, исходных файлов не стало.

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

Когда Вы сделаны, конечный файл является конкатенацией исходных файлов. Никакая редкая необходимая файловая система, никакое питание с необходимой файловой системой. Это может быть выполнено на уровне нулевых байтов, свободных, поскольку данные могут быть сохранены в памяти.

1
ответ дан 5 December 2019 в 04:52
поделиться

, если файл очень сжимаем (например, журналы):

gzip file1

gzip file2

zcat file1 file2 | gzip > file3

rm file1

rm file2

gunzip file3
2
ответ дан 5 December 2019 в 04:52
поделиться
-1
ответ дан 5 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

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