Как стать автором
Обновить

Комментарии 48

Как раз нужно. Спасибо!
Наткнулся на эту статью, спасибо.
Но хотел бы добавить некоторые особенности, с которыми столкнулся на Ubuntu 12.04.
Команда:
sudo echo 1 > /sys/block/sdb/device/delete
не работает, выдавая следующую ошибку:
bash: /sys/block/sdb/device/delete: Permission denied


Приведу пример того, как это работает у меня.
Добавление(сканирование):
sudo sh -c "echo "'- - -'" > /sys/class/scsi_host/host0/scan"

Остановка и удаление устройства:
scsi_stop /dev/sdb   # Останавливает шпиндель
sudo sh -c " echo 1 > /sys/block/sdb/device/delete"   # Можно дергать


scsi_stop — утилита из пакета scsitools, наличествует в дефолтных репозиториях.
На счет безопасности сего действа…
На разъеме у самого диска, некоторые контакты вынесены вперед(идут лесенкой).
Есть мнение, что это сделано специально для этих целей.
Мол земля сначала, а потом все остальное.
Разумеется, не работает. Как бы должно быть очевидно, что перенаправление вывода sudo прав на выполненение команды не даёт.
Это я так, для будущих незнаек как я )
echo 1 | sudo tee /sys/block/sdb/device/delete
насколько это безопасно?
НЛО прилетело и опубликовало эту надпись здесь
С точки зрения железа — безопасно. (мы про удаление информации в ядре об устройстве). Хотплаг железа имеет определённые нюансы.

А вот с точки зрения файловой системы — если удалить устройство не отмонтировав его, это эквивалентно «дёрнуть на ходу». Так что сначала отмонтировать, сделать sync; sync (он вроде делается при отмонтировании, но лучше перебдеть), и только потом отключать.
Вот как-то я возился с внешним eSata хардом под фряху 7.0 и мечтал о чем-то таком, да ещё чтобы настроить поведение харда так, чтобы он шпиндель не останавливал при бездействви, но это поведение как оказалось регулируется только софтинкой под винду и только по USB :(
Но тогда об этом только мечталось…
Кстати, кроме отладки скриптов udev ещё полезно при прогоне вхвост и в гриву всяческих soft-RAID-ов без физического передергивания хардов.
Насколько я понимаю, smartctl умеет управлять этими параметрами. В том числе, через большинство usb-коробочек.
То есть, если таким образом удалить из системы устройство, его можно спокойно отключать (не учитывая пока проблемы остановки шпинлеля)? И это применимо к стандартным sata устройствам, а не только esata?
Разумеется. Не забыв отмонтировать предварительно.

SATA отключается в таком порядке: сначала шина данных, потом питание. Включается в обратном: питание, подождать раскрутки шпинделя, шина данных.

Разумеется, питание нужно втыкать правильной стороной (воткнуть криво не получится, а вот кинуть напряжение «не туда» воткнув угол верх ногами — запросто). Так что перед втыканием всегда контрольный взгляд на разъём на винте и на питании.

Я так давно (и часто) меняю винты — скорость по SATA в три раза выше, чем по USB-SATA.
Стандарт SATA не предусматривает горячую замену активного устройства (используемого Операционной Системой) (вплоть до SATA Revision 3.x), дополнительно подключенные диски отключать нужно постепенно — питание, шлейф, а подключать в обратном порядке — шлейф, питание.

на это нам как бе намекают контакты одинаковой длинны во всех sata-разъемах
Мы под хотсвапом подразумеваем разные вещи. Для меня «не hotswap», это когда компьютер начинает виснуть после подтыкания PATA к тупому контроллеру. А hotswap, это когда с нужными предосторожностями можно отключить устройство и подключить обратно без перезагрузки.

… А так даже флешки без ритуала дёргать чревато.
PATA — сначала выдергиваем питание, потом шлейф.
SATA — сначала выдергиваем шлейф, потом питание.

Работает как в виндовс, так и в линукс. В случае с РАТА — на некоторых машинах/виндах возможны зависания, но чаще все проходит нормально.
Вот именно про эти зависания я и говорю. Особый ужас в случае slave/master'ов…
почему с SATA наоборот?
к сожалению обоснованного пруфа предоставить не могу. сам где то на железячных сайтах несколько лет назад прочитал в какой то статье, а потом 3 года очень часто проверял на практике на тысячах разных компов.

На винде если у PATA винта выдернуть сначала шлейф — почти всегда BSOD или зависание системы, потому всегда сначала винт удалял в устройствах, потом вырубал питание и только после этого шлейф.
С сата наоборот — если сначала втыкнуть шлейф то начинаются тупняки(видно сказывается то что винда думает что это хотплуг устройство, а без питания не получает ответов от контроллера), потому сначала втыкаем питание ждем раскрутки шпинделя и тыкаем шлейф.

То есть все дело в типах устройств и в работе дров/контроллеров
вообще говоря, здравый смысл подсказывает, что питание нужно подавать последним, а отключать первым всегда и при любых условиях для всех типов устройств. почему здесь это может быть не так, мне не вполне понятно.
Вообще-то здравый смысл говорит, что от разрыва цепи данных никому сильно не плохеет, а при разрыве цепи питания по цепям данных может идти любая ахинея (в смысле напряжения/полярности). Не смотря на то, что SATA-power планировался с рассчётом на хотплаг, никто не может гарантировать, что произойдёт при подаче «только 12 вольт и земли» на винт. Так что сначала питание, потом завершение переходных процессов (зарядка кондёров, установление тока в индуктивностях, ток RST по шинам процессоров и т.д.), и только после этого данные.
можно сильно уменьшить вероятность бсода, если вырубить предварительно винт в «диспетчере устройств»

и при подключении PATA-винтов винда может его некоторое время «не видеть» пока не обновишь вручную список устройств.
НЛО прилетело и опубликовало эту надпись здесь
а главное — сразу интересно стало)))
Спасибо, очень хорошее руководство. Но я вдобавок всё же всегда обесточиваю винчестер заранее через hdparm, а потом только убиваю ввод/вывод и отключаю его.
Подробнее расскажите. У вас получается отключить устройство в ядре при выключенном шпинделе?
Я не понимаю зачем отключать шпиндель, ведь при отключении питания головки по инерции переходят в безопасную зону у шпинделя, и это безопасно и предусмотрено разработчиками жестких дисков. Поправьте меня если я не прав, мне будет интересно.
С точки зрения парковки головок — да. Достаточно отключить питание и дать шпиделю остановиться перед любыми перемещениями, и в смысле механики всё ок.
Остановка шпинделя желательна для того, чтобы в момент размыкания цепи питания там был маленький ток (и маленькая индуктивность). Когда шпиндель кушает электричество, ток больше, а значит, при наличии хоть какой-то индуктивности, и больше напряжение в момент разрыва цепи (индукциональная инерция, кажется называется, но могу название попутать). Чем выше скачок напряжения, тем выше вероятность, что кто-то его не выдержит.
Спасибо
НЛО прилетело и опубликовало эту надпись здесь
Текст хороший, но там вообще-то про iscsi. ISCSI от SCSI отличается буквой eth.
два раза прочитал, ничего новго про себя не узнал.
НЛО прилетело и опубликовало эту надпись здесь
И опять консоль…
Разумеется. Потому что удобнее пока никто ничего не придумал.
И потом эти люди говорят что вот вот настанет вендекапец.
Мне реально насрать на то, что стоит на компьютерах у хомячков. Я знаю, что удобнее _мне_.
На мой взгляд, в манах вообще надо давать только консольные команды, потому что имея консольную утилиту, написать ГУИ легче, чем имея ГУЕвую утилиту, получить результат её работы в консоли.
Как это принято у сообществ конкурирующих ситсем, влезу со своими 5 рублями.
в FreeBSD это делается красивей:
для SATA устройств
# смотрим нужное канал/устройство которое необходимо заменить
atacontrol list
# для добавления устойства «отцепляем канал»
atacontrol detach ataN
# «цепляем» канал с нашим устройством
atacontrol attach ataN
# если у устройства пропадало питание, то detach/attach делать не нужно
atacontrol reinit ataN

для SATA/SCSI устройств подключенных через CAM — аналогично, используется другая утилита
# ищем наше устройство
camcontrol devlist
# для добавления нового (соответственно удаления старого) усройства
camcontrol stop daN
camcontrol eject daN
camcontrol rescan all (или нужную шину увиденную в camcontrol devlist)
camcontrol inquiry daN
camcontrol start daN
# с «плохим» устройством делаем ужасные вещи, сбрасываем шину
camcontrol reset daN

удачи (:
Ну, собственно, что-то подобное для линукса пишется как набор alias'ов. Кстати, а как бздя относится к USB-HDD?
НЛО прилетело и опубликовало эту надпись здесь
Я имею в виду, оно его за scsi считает?
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
уже давно научился.
Меня этот метод не раз спасал, когда выбивало винт из RAID, smartctl отваливался с «Input/output error», а в ДЦ надо было отправить запрос на замену с серийником битого винта.
Удаление/добавление — и некоторое время можно опрашивать «плохой» винт через smartctl.
К сожалению, я не знаю метода совместить выключение шпинделя диска с его удалением с точки зрения ядра. Шпиндель можно отключить командой scsi-spin, однако, при попытке удалить устройство, оно будет раскручено заново и удалено. А у удалённого устройства уже нельзя ничего останавливать (нет устройства). Так что эта часть проблемы пока не решена.
перед:
echo 1 >/sys/block/sdX/device/delete

можно сделать вот так:
 hdparm -S1 /dev/sdX

и диск остановится через 5сек
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории