LINUX.ORG.RU

read+write с нескольких дисков одновременно

 , , , ,


0

2

Здравствуйте.

Хочу придумать скрипт чтоб с разных дисков одновременно (десяток nvme или десяток sata например) читать абстрактные данные (какие угодно, не важно) и потом записывать, чтобы смотреть с какой скоростью это происходит и как на такую нагрузку реагирует исследуемая система.

Еще раз, писать на десяток сразу, читать с десятка сразу. Не один за другим последовательно)

ДэДэшкой по одному перебирать не годится, сами понимаете. Может подскажет кто идею?


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

Хм, тупо сделать массив типа sudo dd status=progress if=/dev/nvme1n1 of=tempfile bs=100M count=1024; sudo dd status=progress if=/dev/nvme2n1 of=tempfile bs=100M count=1024; sudo dd status=progress if=/dev/nvme3n1 of=tempfile bs=100M count=1024; и т.д.?

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

Так будет последовательно. Или используй символ & после команды или открывай скриптом несколько окон консолей и в каждой свою команду dd.

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

попробую с &, это проще чем 10 окон и суета по старту

только как бы в файл все это одновременное направить, в том плане что tee и >> будут одновременно в один файл фигачить, а вот от какого диска в какую строку…

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

попробую с &

Есть xargs + tee, и такая штука, как GNU parallel.

vvn_black ★★★★★
()
Ответ на: комментарий от shell-script

После 10го не останавливается, фигачит дальше 20й, 100й, 1000й

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

dd status=progress if=/dev/nvme1n1 of=tempfile bs=100M count=10 & dd status=progress if=/dev/nvme1n1 of=tempfile bs=100M count=10

Отображает прогресс только в 1 экземпляре и выкидывает потом в терминал текст:

[3] 254300 838860800 bytes (839 MB, 800 MiB) copied, 2 s, 397 MB/s 10+0 records in 10+0 records out 1048576000 bytes (1,0 GB, 1000 MiB) copied, 3,62164 s, 290 MB/s

10+0 records in 10+0 records out 1048576000 bytes (1,0 GB, 1000 MiB) copied, 3,62201 s, 290 MB/s

sin4ez
() автор топика
Ответ на: комментарий от shell-script

Вот такой цикл доложен быть

for (( i=1; i <= 10; i++ )) do dd status=progress if=/dev/nvme${i}n1 of=«tempfile-nvme${i}n1» bs=10M count=10 & done

Прогресс бы смотреть как-то ещё…

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

это проще чем 10 окон и суета по старту

Дак ведь можно в команде открывать терминал с запущеным там нужным процессом, будет разом открыто 10 окон, и там и смотрите в каждом окне свой прогресс...

xterm -geometry 80x5 -e /bin/bash --init-file <(echo "dd if=/dev/sda1 of=/dev/null bs=102400 status=progress" ) &

Цикл, как-нибудь, сами приделайте. И там может не только xterm, просто нужно смотреть какие опции задают размер окна и выполняемую команду в man'e. Можно писать команду через ″bash -c″ и добавлять в конец команду ″read″, или вобще указыать xterm выполнять ″dd ..″, но тогда окно закроется после завершения команды. Можно указать заголовок окна:

xterm -geometry 80x5 -T "dd /dev/sda1" -e /bin/bash -c "dd if=/dev/sda1 of=/dev/null bs=102400 status=progress; echo Done, Hit Enter to exit; read A" &

P.S. Что за железо такое, что там 10+ nvme накопителей?

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

Не, с отдельными окнами не вариант.

А железо-сервер, с кучей дискачей, 2 ксеонами и 32 модулями памяти

sin4ez
() автор топика
Ответ на: комментарий от no-dashi-v2

Да, начал читать ман, упустил утилиту это я как-то из виду.

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