Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа тестирования жёстких дисков, Получение списка носителей, создание фай 
:(
    Опции темы
dlinyj
  Дата 27.2.2014, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.10.2009

Репутация: нет
Всего: нет



Вопрос на правах обсуждения и советов.
Занимаюсь написание софта для тестирования железа. В данном случае стоит задача проверки работоспособности интерфейсов, а не целостность жёстких дисков (тестируем материнки). 

Суть теста такова, что надо получить список жёстких дисков, подмонтировать их (если не сделано ранее), и на жёстком диске создать файл определённого размера, считать его и сделать замер времени на чтение и запись (кстати важно убедиться, что файл реально оказался на диске, а не осел в буферах ядра). Тут наверное меня спасёт sync. При чём, что логично, что файл создавать только на физическом жёстком диске, минуя логические, т.к. важна проверка физических интерфейсов, а не логики работы. Можно даже в общем-то и не файл, а просто некий дамп данных, но так чтобы никому не мешать.

Начну с простого вопроса: быть может есть что-то аналогичное готовое, чтобы поглядеть примеры кода и т.п., минимизировав изобретение велосипеда?

Второй вопрос: как лучше получать список жёстких дисков?  Игнорируя другие системы (типа tmpfs). так же не просто список носителей, а ещё данные о размере, примонтированность  их в системе и т.п. Чтобы сразу можно было производить запись в точке монтирования устройства.
Возможно ли это сделать чтением файлов в sysfs или proc?

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

Решения, которые я нашёл по второму вопросу мне кажется не очень изящными, т.к. будут вызываться сторонние программы. Первое и очевидное решение - это fdisk:

Код

# fdisk -l
Disk /dev/sda: 251.1 GB, 251059544064 bytes
255 heads, 63 sectors/track, 30522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008fcd3
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          14      104448   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              14       13068   104857600   83  Linux
/dev/sda3           13068       13198     1048576   82  Linux swap / Solaris
/dev/sda4           13198       30523   139163648    5  Extended
/dev/sda5           13198       30523   139162624   83  Linux


Достаточно информативно, но не хватает информации о точках монтирования. Плюс, как бы программе не промахнуться куда писать...

Второе решение, это parted:
Код

# parted -l
Model: ATA ST250DM000-1BD14 (scsi)
Disk /dev/sda: 250GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End    Size    Type      File system     Flags
 1      1049kB  106MB  105MB   primary   ntfs            boot
 2      106MB   190GB  190GB   primary   ntfs
 3      190GB   250GB  60.2GB  extended
 6      190GB   246GB  56.0GB  logical   ext4
 5      246GB   250GB  4203MB  logical   linux-swap(v1)


Model: Generic- Compact Flash (scsi)
Disk /dev/sdb: 4110MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags


И третий вариант lsblk

Код

#lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 232.9G  0 disk 
├─sda1   8:1    0   100M  0 part 
├─sda2   8:2    0 176.8G  0 part /mnt/NTFS
├─sda3   8:3    0     1K  0 part 
├─sda5   8:5    0   3.9G  0 part [SWAP]
└─sda6   8:6    0  52.1G  0 part /
sdb      8:16   1   3.8G  0 disk 
└─sdb1   8:17   1   3.8G  0 part /media/dlinyj/8d2906ea-05bd-48fc-a724-91b9ae637597
sr0     11:0    1  1024M  0 rom  



Или более информативный запрос, с отсеканием всего лишнего:

Код

# lsblk -io KNAME,TYPE,SIZE,MODEL,MOUNTPOINT
KNAME TYPE   SIZE MODEL            MOUNTPOINT
sda   disk 232.9G ST250DM000-1BD14 
sda1  part   100M                  
sda2  part 176.8G                  /mnt/NTFS
sda3  part     1K                  
sda5  part   3.9G                  [SWAP]
sda6  part  52.1G                  /
sdb   disk   3.8G Compact Flash    
sdb1  part   3.8G                  /media/dlinyj/8d2906ea-05bd-48fc-a724-91b9ae637597
sr0   rom   1024M DVD RW AD-7280S  



Далее можно сделать вызов на подобии такого:

Код

FILE *fp = popen("lsblk -io KNAME,TYPE,SIZE,MODEL,MOUNTPOINT", "r");
while(fgets(path, sizeof(path) -1,fp) != NULL)
//some code

pclose(fp);


И отпарсить вывод... Но мне видится всё это некрасивым решением, т.к. программы эти тоже откуда-то получают данные. 

Как бы сделали вы? Если, что работаем под рутом (т.к. железо тестим).
PM MAIL   Вверх
xvr
Дата 27.2.2014, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(dlinyj @  27.2.2014,  13:07 Найти цитируемый пост)
как лучше получать список жёстких дисков?

Ищите в /sys/block ( http://mydebianblog.blogspot.com/2013/02/sysfs-linux.html )

Цитата(dlinyj @  27.2.2014,  13:07 Найти цитируемый пост)
т.к. программы эти тоже откуда-то получают данные.

Угу, и это 'откуда-то' /proc и /sys (ну еще может быть /dev)

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

PM MAIL   Вверх
tzirechnoy
Дата 27.2.2014, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
Начну с простого вопроса: быть может есть что-то аналогичное готовое, чтобы поглядеть примеры кода и т.п., минимизировав изобретение велосипеда?


hdparm

PM MAIL   Вверх
bsa
Дата 27.2.2014, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Актуальный список хардов можно найти в /dev/disk/by-path...
Чтобы не было проблем с локальными дисками и кэшами рекомендую производить запись и чтение напрямую на диск (минуя логические тома и файловые системы) - эти диски не будут содержать в своем названии слово part на конце.
Более того, все это можно сделать башевским скриптом. Для этого понадобятся: for/while, ls, grep, dd, time
PM   Вверх
dlinyj
Дата 27.2.2014, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.10.2009

Репутация: нет
Всего: нет



Цитата(tzirechnoy @ 27.2.2014,  14:03)
Цитата
Начну с простого вопроса: быть может есть что-то аналогичное готовое, чтобы поглядеть примеры кода и т.п., минимизировав изобретение велосипеда?


hdparm

Спасибо, то что нужно!

Добавлено через 3 минуты и 23 секунды
Цитата(bsa @  27.2.2014,  14:40 Найти цитируемый пост)
Более того, все это можно сделать башевским скриптом. Для этого понадобятся: for/while, ls, grep, dd, time 


Да это ясно, но надо ещё проверять чтение/запись на ошибки и в случае их возникновения передавать их на сервер. Например создали файл, записали туда некий дамп, считали его, а так хрень - ошибка. С dd проверку не организуешь. А проверочный дамп нужно в памяти держать....

/me правда подумал, что можно заюзать diff, а проверочный дамп в памяти держать в /tmpfs... Но это как-то не спортивно.
PM MAIL   Вверх
bsa
Дата 27.2.2014, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



dlinyj, ты вообще как представляешь повреждение данных? Ты понимаешь, что все данные идущие от матери к дискам и обратно сопровождаются кучей контрольных сумм и проверок на аппаратном уровне?
Единственное, что ты можешь сделать, это оценивать качество передачи данных по времени - чем больше время, тем больше повторов передачи (т.е. ошибок) было в дисковой подсистеме.
PM   Вверх
dlinyj
Дата 27.2.2014, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.10.2009

Репутация: нет
Всего: нет



Цитата(bsa @ 27.2.2014,  15:05)
dlinyj, ты вообще как представляешь повреждение данных? Ты понимаешь, что все данные идущие от матери к дискам и обратно сопровождаются кучей контрольных сумм и проверок на аппаратном уровне?
Единственное, что ты можешь сделать, это оценивать качество передачи данных по времени - чем больше время, тем больше повторов передачи (т.е. ошибок) было в дисковой подсистеме.

Разумеется всё это понятно. Я имел в виду, что на жёстких дисках может стоять некоторая система, и её может поломать smile.

А повреждение данных элементарно. Контроллер SATA, запись провёл нормально (с контролем, все дела), а потом перегрелся и отвалился (причина - мои фантазии, с этим будут аппаратчики разбираться). Мало ли аппаратных сбоев. Я тут больше на железо сетую и его проверяю, чем на софт с контрольными суммами. 
PM MAIL   Вверх
dlinyj
Дата 27.2.2014, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.10.2009

Репутация: нет
Всего: нет



Вот даже пример такого "аппаратного сбоя", у жёсткого диска из-за неправильной работы контроллера на материнской плате выгорал собственный контроллер, да так красиво, что прожигал дырку в наклейке

user posted image

Внутри ничего особенного, просто потемневшая микросхема, да оплавившаяся плёнка. Но сам факт, так что контролировать запись и чтение надо многократно.
PM MAIL   Вверх
tzirechnoy
Дата 27.2.2014, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
Чтобы не было проблем с локальными дисками и кэшами рекомендую производить запись и чтение напрямую на диск (минуя логические тома и файловые системы) - эти диски не будут содержать в своем названии слово part на конце.


Наличие и отсутствие part на концэ никак не влияет на использование кэша.
PM MAIL   Вверх
bsa
Дата 27.2.2014, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(dlinyj @  27.2.2014,  16:46 Найти цитируемый пост)
 Я тут больше на железо сетую и его проверяю, чем на софт с контрольными суммами.
Контрольные суммы не софтом формируются. А аппаратурой. Другими словами, если ты записал данные на диск, то ты их или прочитаешь корректно, или не прочитаешь вообще. Поэтому хранить дамп совсем не обязательно. можно тупо делать dd if=/dev/zero of=/dev/disk/by-path/...
PM   Вверх
dlinyj
Дата 28.2.2014, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.10.2009

Репутация: нет
Всего: нет



Цитата(bsa @ 27.2.2014,  19:23)
Цитата(dlinyj @  27.2.2014,  16:46 Найти цитируемый пост)
 Я тут больше на железо сетую и его проверяю, чем на софт с контрольными суммами.
Контрольные суммы не софтом формируются. А аппаратурой. Другими словами, если ты записал данные на диск, то ты их или прочитаешь корректно, или не прочитаешь вообще. Поэтому хранить дамп совсем не обязательно. можно тупо делать dd if=/dev/zero of=/dev/disk/by-path/...

Уважаемый, я знаю что этот форум русский и тут не принято помогать людям, а принято доказывать что они не правы. Но всё же, давайте вернём разговор в конструктивное русло.   smile 

Привожу вам конкретный пример, того что вы не правы. У меня есть CF-карточка, которая исчерпала местами свой ресурс чтения-записи (некоторые сектора), подключена в качестве IDE-винта. Вот сделаем проверку таким образом Обращаю внимание, что на самом деле нельзя проверять только нулями или FF, надо проверять разными байтами. Если ячейка исчерпала свой ресурс, то она может отдать какое-то значение, но его поменять не может. Но для теста представим что нас это устроит. Формируем тестовый файл:

Код

# dd if=/dev/urandom of=random_4gb.img bs=2048 count=2006928
2006928+0 records in
2006928+0 records out
4110188544 bytes (4.1 GB) copied, 387.105 s, 10.6 MB/s


Далее сформированный файл записываем на CF

Код

# dd if=random_4gb.img of=/dev/sdb bs=32768 count=2006928
125433+0 records in
125433+0 records out
4110188544 bytes (4.1 GB) copied, 223.339 s, 18.4 MB/s


Как видим, запись не вызывает проблем! Далее читаем его:

Код

# dd if=/dev/sdb of=read_cf.img bs=32768 count=2006928
125433+0 records in
125433+0 records out
4110188544 bytes (4.1 GB) copied, 223.399 s, 18.4 MB/s


Да и чтение проблем не вызвало. Ну вроде всё нормально, записываем их в рабочие, следуя вашей логике? Ну на всякий случай сравним два файла:
 smile 
Код

# cmp -b random_4gb.img read_cf.img 
random_4gb.img read_cf.img differ: byte 2759852033, line 10778956 is 320 M-P 366 M-v


Упс, а тут у нас ерунда! smile 

Так что чтение, запись и что прочитали надо контролировать. Кстати, программа hdparm фактически тоже не контролирует что она читает и пишет. Она работает просто. Считывает некоторое количество данных и пишет их обратно (т.е. в случае сбоя потерь не будет). Я пробовал физически оторвать жёсткий диск, она не делает проверки "существования", просто в конце говорит, что не удалось дописать. Так что никакой проверки целостности записанных данных никто не делает (только на аппаратном уровне контроллера).

Это сообщение отредактировал(а) dlinyj - 28.2.2014, 12:06
PM MAIL   Вверх
bsa
Дата 28.2.2014, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(dlinyj @  27.2.2014,  14:07 Найти цитируемый пост)
Занимаюсь написание софта для тестирования железа. В данном случае стоит задача проверки работоспособности интерфейсов, а не целостность жёстких дисков (тестируем материнки). 
Приведенный пример противоречит этому утверждению. Чему верить?
PM   Вверх
dlinyj
Дата 28.2.2014, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.10.2009

Репутация: нет
Всего: нет



Цитата(bsa @ 28.2.2014,  13:38)
Цитата(dlinyj @  27.2.2014,  14:07 Найти цитируемый пост)
Занимаюсь написание софта для тестирования железа. В данном случае стоит задача проверки работоспособности интерфейсов, а не целостность жёстких дисков (тестируем материнки). 
Приведенный пример противоречит этому утверждению. Чему верить?

Не пойму, что именно вас смущает? Видимо вы никогда не работали с железом. Никто не гарантирует, что эти данные не портятся на уровне контроллера. Но в данном случае тест может выявить отвал жёсткого диска в определённый момент времени. Выше я приводил фотографию, что происходит с жёстким диском, и тут вина контроллера на материнской плате.

Плюс у нас ещё бывают достаточно жёсткие тесты (температурные, радиационные и т.п.), когда опять же контроллеру может оторвать башню. По этому тестирование надо проводить полное. 

Или вы не согласны с моим примером выше, что надо контролировать чтение и запись?

Впрочем, мне смутно видится смысл дальнейшего диалога.  smile Я уже сам дал себе ответы на все вопросы smile. 
PM MAIL   Вверх
bsa
Дата 28.2.2014, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(dlinyj @  28.2.2014,  14:45 Найти цитируемый пост)
Или вы не согласны с моим примером выше, что надо контролировать чтение и запись?
все зависит от поставленной задачи. На мой взгляд, контроль работы контроллера должен осуществляться с помощью специального тестового стенда, с защитой от перенапряжений и прочих глюков контроллера. А вот тестировать на дорогом железе (вроде SSD) я бы воздержался. Потому что еще не известно, как себя поведет диск в случае сбоя контроллера. У одного может быть защита от подобного глюка, а у другого не быть. В итоге тест будет ни о чем.

Цитата(dlinyj @  28.2.2014,  14:45 Найти цитируемый пост)
Видимо вы никогда не работали с железом.
Постоянно работаю с устройствами типа микроконтроллеров. Но я не аппаратчик и никогда не работал с SATA контроллерами.

PM   Вверх
dlinyj
Дата 28.2.2014, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.10.2009

Репутация: нет
Всего: нет



Цитата(bsa @  28.2.2014,  14:14 Найти цитируемый пост)
все зависит от поставленной задачи. На мой взгляд, контроль работы контроллера должен осуществляться с помощью специального тестового стенда, с защитой от перенапряжений и прочих глюков контроллера. А вот тестировать на дорогом железе (вроде SSD) я бы воздержался. Потому что еще не известно, как себя поведет диск в случае сбоя контроллера. У одного может быть защита от подобного глюка, а у другого не быть. В итоге тест будет ни о чем.


Да это всё так. Аппаратной разработкой стенда занимаются другие люди, и это вне моей компетенции, но там всё на высоте. На счёт SSD - цена винта, в сравнении со стоимостью конечного изделия - копейки. Ну и потом тестировать надо с тем, что будет использовать заказчик. И тестируются с разными винтами, я просто показал живой пример.
В данном случае тест простой: прошёл или нет. Я вижу вариант отказов, например при минус 55 градусов Цельсия замёрз контроллер, потом оттаял, и некоторое количество секторов не записалось. Мы не узнаем этого, пока не прочитаем файл обратно. Как-то так smile.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.