Pull to refresh

Comments 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 прав на выполненение команды не даёт.
UFO landed and left these words here
С точки зрения железа — безопасно. (мы про удаление информации в ядре об устройстве). Хотплаг железа имеет определённые нюансы.

А вот с точки зрения файловой системы — если удалить устройство не отмонтировав его, это эквивалентно «дёрнуть на ходу». Так что сначала отмонтировать, сделать 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'ов…
к сожалению обоснованного пруфа предоставить не могу. сам где то на железячных сайтах несколько лет назад прочитал в какой то статье, а потом 3 года очень часто проверял на практике на тысячах разных компов.

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

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

и при подключении PATA-винтов винда может его некоторое время «не видеть» пока не обновишь вручную список устройств.
UFO landed and left these words here
а главное — сразу интересно стало)))
Спасибо, очень хорошее руководство. Но я вдобавок всё же всегда обесточиваю винчестер заранее через hdparm, а потом только убиваю ввод/вывод и отключаю его.
Подробнее расскажите. У вас получается отключить устройство в ядре при выключенном шпинделе?
Я не понимаю зачем отключать шпиндель, ведь при отключении питания головки по инерции переходят в безопасную зону у шпинделя, и это безопасно и предусмотрено разработчиками жестких дисков. Поправьте меня если я не прав, мне будет интересно.
С точки зрения парковки головок — да. Достаточно отключить питание и дать шпиделю остановиться перед любыми перемещениями, и в смысле механики всё ок.
Остановка шпинделя желательна для того, чтобы в момент размыкания цепи питания там был маленький ток (и маленькая индуктивность). Когда шпиндель кушает электричество, ток больше, а значит, при наличии хоть какой-то индуктивности, и больше напряжение в момент разрыва цепи (индукциональная инерция, кажется называется, но могу название попутать). Чем выше скачок напряжения, тем выше вероятность, что кто-то его не выдержит.
UFO landed and left these words here
Текст хороший, но там вообще-то про iscsi. ISCSI от SCSI отличается буквой eth.
два раза прочитал, ничего новго про себя не узнал.
UFO landed and left these words here
Разумеется. Потому что удобнее пока никто ничего не придумал.
И потом эти люди говорят что вот вот настанет вендекапец.
Мне реально насрать на то, что стоит на компьютерах у хомячков. Я знаю, что удобнее _мне_.
На мой взгляд, в манах вообще надо давать только консольные команды, потому что имея консольную утилиту, написать ГУИ легче, чем имея ГУЕвую утилиту, получить результат её работы в консоли.
Как это принято у сообществ конкурирующих ситсем, влезу со своими 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?
UFO landed and left these words here
Я имею в виду, оно его за scsi считает?
UFO landed and left these words here
UFO landed and left these words here
Меня этот метод не раз спасал, когда выбивало винт из RAID, smartctl отваливался с «Input/output error», а в ДЦ надо было отправить запрос на замену с серийником битого винта.
Удаление/добавление — и некоторое время можно опрашивать «плохой» винт через smartctl.
К сожалению, я не знаю метода совместить выключение шпинделя диска с его удалением с точки зрения ядра. Шпиндель можно отключить командой scsi-spin, однако, при попытке удалить устройство, оно будет раскручено заново и удалено. А у удалённого устройства уже нельзя ничего останавливать (нет устройства). Так что эта часть проблемы пока не решена.
перед:
echo 1 >/sys/block/sdX/device/delete

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

и диск остановится через 5сек
Only those users with full accounts are able to leave comments. Log in, please.