Pavel
Ну ладно, совсем глупо, но: почемуб не дропнуть все к херам перед распаковкой? ;)
Sergei
если вам надо удалять все, чего нет в таре - может быть просто удалить вообще все и растарить? :)
Nick
95% файлов по 500 байт
Nick
журналу фс будет очень хорошо...
Sergei
rsync на таких числах тоже будет не очень быстро работать если што
Nick
рсинк замечательно работает на таких числах
Sergei
на воле божьей, не читая файлы (подразумеваем что проверка по размеру не дала результатов)?
Sergei
конкретно по задаче - маунт тара фьюзом - норм решение. дешево и сердито.
Vladimir
если вам надо удалять все, чего нет в таре - может быть просто удалить вообще все и растарить? :)
В такой ситуации можно ж получить список файлов из тара, потом не из тара, взять то что не в пересечении
Vladimir
И удалить
Sergei
В такой ситуации можно ж получить список файлов из тара, потом не из тара, взять то что не в пересечении
вопрос не в эффективности работы, а как сделать быстро и штоб работало. алсо - там еще отсортировать 300М (3M * 100 байт) строк.
Pavel
Ну на самом деле получить мильен строк из тара тож накладно
Pavel
Мне кажется рсинк всеже медленнее будет, чем дропать всё, а потом распаковывать
Pavel
Да
Sergei
впрочем, ящитаю что tar.gz это немного ущербный формат для такой задачи. дифф будет в последних файлах, а прочитать придется 100 гб. :(
Pavel
Ну кстати да, интересно, на каком значении дифа время начнет значительно расти
Sergei
минимальное время - полное прочтение всего tar.gz + полное прочтение fs
Pavel
Ага, лента жи
Nick
потому что если сделать просто экстракт, то быстренько запишутся файлы поверх, а надо удалить те, которых нет в этом бекапе
Nick
прочитать по сети один раз этот поток - это допустимые накладные расходы, а вот процесса удаления файлов, которые уже есть и в бекапе те же самые - очень хочется избежать
Sergei
беглое чтение https://golang.org/pkg/archive/tar/ намекает, что написать потоковый читатель, который делает конкретно то что тебе нужно - дело получаса-часа.
Sergei
не удивлюсь, впрочем, если готовый велосипед где-то уже есть.
Vladimir
тар умеет list без полной распаковки, но я не помню придется ли весь gz разжимать сначала
Vladimir
вроде бы нет
Pavel
Gz нет же
Vladimir
а, если нет то все проще
Sergei
тар умеет list без полной распаковки, но я не помню придется ли весь gz разжимать сначала
а что тебе даст лист, если тебе все равно нужно потом файлы прочитывать? :)
Vladimir
а что тебе даст лист, если тебе все равно нужно потом файлы прочитывать? :)
так его задача сводится к построению пересечение списка файлов, не?
Sergei
так его задача сводится к построению пересечение списка файлов, не?
нет. ему надо восстановить архив и удалить все чего не было в архиве. и он не хочет очищать все перед этим.
Vladimir
м... ну тогда да, разархивируем, попутно состсавляем свой список файлов
Sergei
+
Vladimir
и потом удаляем что не в нем
Pavel
И нету места
Sergei
Неуниверсально :)
непонятно. любой комманд-лайн с таром неуниверсален. любой скрипт неуниверсален. любой код неуниверсален.
Pavel
Ну как минимум нужно стороннее приложение, не входящее в стандартный дистр
Sergei
если я это на баше напишу - лучше будет? я могу.
🏳️ Phil
вроде бы нет
Там вроде достаточно разжать заголовок собственно
Vladimir
@caligo8658 иногда надо выбирать - накостылять велосипед на баше или нет
Vladimir
Vladimir
чем скрипт отличается от статического бинаря?
Pavel
если я это на баше напишу - лучше будет? я могу.
Все зависит от требований бизнеса.. мне тож легче на питтоне херачить, чем баш ковырять.. но иногда требование: использовать що есть )
Sergei
напишите на перле.
Sergei
какая разница? мне просто было удобнее прочитать stdlib го.
Pavel
Sergei
тот же бинарь - нет. тот же код - да.
Pavel
Ну получается, мы уже несколько ограничены.. по крайней мере отсекаем компилируемое
Vitaliy
Я в го полный 0, оно на фре запустится?
очень редкие библиотеки не заведутся, не заведётся работа с ОС (типа вызова линуксовых сисколов), некоторая функциональность в стандартной библиотеке обрезана, а так — без проблем, даже компилируется так же, с точностью до ОДНОЙ env переменной
Vitaliy
я ровно об этом
Vladimir
и оно соберется даже не смотря на сисколы и пр )
Pavel
Ну, надо опять же спросить у товарища, что задал вопрос. Баш знают все же
Vladimir
OS=freebsd ARCH=amd64 go build
Vitaliy
но кому нужно собирать под фряхой, когда можно собрать на родном маке, в любимой идешечке? )
Vladimir
Ну, надо опять же спросить у товарища, что задал вопрос. Баш знают все же
язык достаточно простой чтоб его специально не учить если надо поправить баг
Vladimir
это не аргумент про "баш знают все"
Vladimir
давайте тогда не писать на си, ведь баш знают все
Vladimir
и питоне
Pavel
Мож он для какойнить большой тройки решает задачу.. там не очень любят небаш :)
Pavel
Тогда так, коль дискуссия разгорелась :)
Vitaliy
Мож он для какойнить большой тройки решает задачу.. там не очень любят небаш :)
нифига подобного. Работаю на МегаФон, вокруг меня все любят Go ;)
Pavel
С мегафон не сталкивался :)
Pavel
Но другие оч мозк делали
Nick
Какими средствами надо решать задачу?
Лучше чтобы попроще. Тар делается в потоке, списка файлов нет пока он весь не сделается, а повторно читать нельзя
Nick
Правда снимок файлов можно отдельно получить, но ресурсоемко
Nick
Список
G72K
есть tar и его надо распаковать поверх текущих файлов так, как если бы это был rsync --delete Можно ли это как-нибудь сделать?
обязательно tar? есть всякие https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-send и в zfs что-то подобное было если не страшно :)
Sergei
русские чаты. человек пришел с задачей и ему весь чат доказывает как у него все плохо.
Sergei
:)
G72K
ну задача в целом-то получить новое состояние ФС по сети и применить его налету, не сохраняя рядом, так? :)
G72K
да ну, скучно :)