LINUX.ORG.RU

dd api?

 , ,


0

1

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


Разве dd делает что-то сложнее чем прочитать N байт из «файла» А, записать их в «файл» В, повторить? Зачем тебе API к этому?

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

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

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

stdout

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

ключи

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

локали

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

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

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

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

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

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

Ты UNIX-agnostic софт делаешь? Тогда делай в соответствии с POSIX.

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

Не, я серьезно. Бери да копируй сам. Read, write, repeat. Перед повтором можешь проверить условие выхода из цикла.

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

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

Извини, просто я - настолько 😄. Помогаю в силу своих небогатых познаний. Ну, наверное, мне больше сказать и нечего.

turbognida
()

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

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

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

И тем не менее нужно. Иначе твой софт станет помойкой со временем.

firkax ★★★★★
()

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

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

dd на какой-то сигнал отвечает, выводя текущий прогресс.

urquan
()

Докиньте золота, что значит «клонировать диски из своего софта» ? А то потом всплывут нюансы...

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

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

cobold ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.