Я хочу создать образ внешнего жесткого диска USB (раздел ext2) с большими данными (50–70 ГБ) на внутреннем диске IDE/SATA, а затем восстановить этот файл образа одновременно на нескольких жестких дисках USB максимально быстрым способом. ,

Есть ли какие-либо приложения или сценарии уже доступны или какие-либо предложения?

Windows тоже хорошо, я могу подключить эти диски с помощью IFS.

1 ответ1

3

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

Чтобы скопировать из /dev/sda чтобы сделать его изображение в файле:

dd if=/dev/sda of=./drive.image

И скопировать этот образ на многие диски:

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

Обратите внимание, что последний элемент - это канал, а не перенаправление, так как tee также отправит свой ввод в стандартный вывод. Вы можете отправить это в /dev /null, если вы хотите сохранить все перенаправления одинаковыми в командной строке, хотя это, очевидно, немного менее эффективно, поскольку вы запускаете дополнительный процесс и отправляете ему дополнительную копию всей информации через труба только чтобы его выбросить

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/null

хотя эффект производительности, вероятно, будет небольшим по сравнению с общей операцией, действующей на многих USB-накопителях.

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

cat /dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/sde

Вы также можете заменить cat на pv (вы найдете это в большинстве стандартных репозиториев, если вы еще не установили его, в противном случае вы можете получить его отсюда и скомпилировать его самостоятельно) в приведенном выше примере, чтобы отобразить индикатор прогресса. пока операция копирования продолжается, вот так:

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/null

Важно отметить: в зависимости от того, как подключены ваши USB-накопители и как быстро они могут записывать данные по отдельности, вы можете обнаружить, что это только немного быстрее, чем копирование на каждый накопитель в отдельности. Пропускная способность шины USB или концентратора распределяется между подключенными к нему устройствами, поэтому, если у вас нет нескольких USB-контроллеров, которые станут главным узким местом при работе нескольких дисков (если, конечно, каждый диск не работает медленно, конечно, так как много флэш-памяти Флешки есть). Некоторые материнские платы эффективно имеют несколько контроллеров USB, поэтому даже без дополнительного контроллера может случиться так, что не все ваши порты будут использовать одну и ту же шину, но если вы используете их через концентратор, они определенно будут использовать одну и ту же полосу пропускания ввода / вывода.
Сказав это, даже если процесс мало или не ускоряется вообще с точки зрения времени настенных часов из-за состязания шины, вы все равно получаете преимущество, выполняя это одной командой (с одним индикатором выполнения, если используется pv).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .