Можно ли смонтировать папку ~ / .ipfs на внешний диск?

AWK и sed являются полными по Тьюрингу , поэтому все, что может делать один, может делать и другой. (Что касается преобразования текста, то есть awk имеет больше возможностей взаимодействия с ОС.) Однако у каждой есть свои сильные и слабые стороны. Awk может легко делать большую часть того, что может делать sed, но некоторые вещи, такие как замена регулярных выражений группами, являются более сложными. Теоретически Sed может делать все, что умеет awk, но со значительными трудностями (например, в sed нет целочисленной арифметики, поэтому вам придется кодировать его с помощью текстовых преобразований). Поэтому, если вы хотите объединить все в одной команде, лучше всего подойдет awk.

awk 'NR==1 {print "D,,3"; next} {$1=""; print $0}' file.txt

Здесь sed также может легко делать то, что вы делаете с awk: нормализовать пробелы и сокращать все до первого пробела.

sed "s/[ \t][ \t]*/ /g; s/^ *[^ ][^ ]*/ /; s/^ $//; 1s/.*/D,,3/" file.txt

Комбинирование двух команд здесь не особенно полезно. Я не ожидаю прироста производительности. Для каждого канала наблюдается снижение производительности, поскольку данные должны передаваться от одной команды к другой. Однако может быть и повышение производительности. Если у вас несколько процессоров, две команды могут выполняться параллельно. Если для определенных вещей используется более специализированная команда (например,используя специальные инструменты, такие как grep и head вместо универсального инструмента, такого как awk), эта более специализированная команда обычно выполняется быстрее. Компенсируют ли выигрыши накладные расходы канала, зависит от данных, от инструментов, от того, сколько у вас ядер и т. Д.

Если этот сценарий не является узким местом производительности, сначала подумайте о ясности. В этом случае я бы избегал чистой версии sed - она ​​может быть немного быстрее, но гораздо менее читабельна. (Возможно, это можно упростить при определенных предположениях о ваших данных, например, если вы знаете, что всегда будет как минимум два поля и что разделитель полей всегда будет одним пробелом, или вы не заботитесь о сохранении количества пробелов.) Я считаю, что проще делать все в awk, но это почти ничто между этим и вашей версией awk + sed.

3
13.12.2016, 14:07
1 ответ

Думаю, я смог решить проблему, с которой столкнулся. После выполнения ipfs initсоздается 15 новых файлов, каждый из которых находится в папке с уникальным именем. Эти файлы не следует удалять (. Я предполагаю, что эти файлы содержат корень дерева Меркла ). Я использовал следующую строку sudo chattr +i */*, чтобы сделать их неизменяемыми.

~/.ipfs/blocks$ ls
CIQBE  CIQCC  CIQDT  CIQFF  CIQGC  CIQJ2  CIQJB  CIQJX  CIQKZ  CIQOA  CIQOL
CIQBG  CIQD4  CIQF2  CIQFT  CIQIF  CIQJA  CIQJF  CIQKK  CIQO2  CIQOH
~/.ipfs/blocks$ ls *
CIQBE:
CIQBED3K6YA5I3QQWLJOCHWXDRK5EXZQILBCKAPEDUJENZ5B5HJ5R3A.data

CIQBG:
CIQBGFIS77LXFM54VZKTDSZ3VKRE6ITTNAQEFHMC2H3ESKBPC3BVCYA.data
...

Далее перед запуском ipfs add <file_name>, sudo umount ~/.ipfs/blocks/следует выполнить. Это заставит ipfsповерить, что существуют только те файлы и папки, которые созданы сразу после выполнения ipfs init. (Внутри моей папки ~/.ipfs/blocks должны содержаться только папки и файлы, созданные сразу после выполнения ipfs init.)

Я должен перепроверить, но я считаю, что каждое имя файла *.dataуникально в отношении содержащейся в нем информации, поэтому одинаковое имя файла каждого <file>.dataне будет создано. Таким образом, перезапись в тот же файл .datне будет проблемой.

В дальнейшем новые сгенерированные файлы и папки через ipfs add <filename>следует скопировать на внешний диск и удалить из папки ~/.ipfs.

Прежде чем делать какие-либо ipfs cat <hash-id>мы должны сделать:

sudo mount -t cifs //<ip_address>/mybloc/ ~/.ipfs/blocks/ -o username=admin,password=my_password,uid=1000 

Это приведет к тому, что ipfs получит доступ к уже созданным .dataфайлам, которые фактически существуют на внешнем диске.

0
27.01.2020, 21:37

Теги

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