LINUX.ORG.RU

dd api?

 , ,


0

1

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


Ответ на: комментарий от turbognida

Запустил, а дальше что? Как управлять этим? Как прогресс отслеживать? Как жить, если у юзера китайский язык или версия другая, в которой выхлоп отличается?

bo4ok
() автор топика
Ответ на: комментарий от turbognida

stdout

шоб я ещё раз связался™ с парсингом человекочитаемого

ключи

они разные, не везде, например, status=progress есть.

локали

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

bo4ok
() автор топика
Последнее исправление: bo4ok (всего исправлений: 1)
Ответ на: комментарий от turbognida

мя не настолько глупый <_<

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

bo4ok
() автор топика

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

Это вобщем-то единственный способ. И лучше делать чтение/запись большими блоками, например по 1048576 байт (выравнивая позицию до этих границ). dd это интерфейс командной строки к этому действию.

firkax ★★★★★
()
Ответ на: комментарий от firkax

лучше

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

Кринжово-забавная статья на тему: https://habr.com/ru/post/301924/

bo4ok
() автор топика

Лично я бы, наверное, написал бы свой класс и засунул его в отдельный поток с настраиваемой возможностью отсылки прогресса вызывающему. Никакого rocket science я тут не вижу, выделил буфер и копируй. Ну вот про оптимальный размер этого буфера можно порассуждать, если предполагается гигабайтные данные копировать…

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

По хорошему надо еще в несколько потоков читать/писать, если речь идет не о hdd, а о nvme, т.к. в один поток максимальной скорости работы не добиться. Для этого было бы рационально заюзать какой нибудь async io api. Тоже не ракетная наука, но подумать есть над чем

cobold ★★★★★
()