- Linux : SATA hot plug / unplug
- Hot plug : Scanning for newly added disks
- Hot unplug : safely removing a disk
- 9 thoughts on “Linux : SATA hot plug / unplug”
- SATA HotPlug: возможно ли?
- SATA hotplug
- (hot pluggable) SATA/SCSI add/remove scripts for Linux
- Re: (hot pluggable) SATA/SCSI add/remove scripts for Linux
- Re: (hot pluggable) SATA/SCSI add/remove scripts for Linux
- Re: (hot pluggable) SATA/SCSI add/remove scripts for Linux
- Переписано на sysfs
- Добавление и удаление на ходу SATA/SCSI устройств
- Удаление устройства
- Добавление устройства
Linux : SATA hot plug / unplug
I have 3 hard disks in SATA-to-eSATA external enclosure which I occasionally need to plug to perform backups and to unplug when done. I found it annoying to have to restart the whole computer at every turn, especially when SATA is supposed to bring hotplug abilities. If you mainboard / SATA chipset and disks support hot plugging and unplugging, you can do this by following those instructions.
Hot plug : Scanning for newly added disks
When you plug the disks, you need to tell the OS to scan for new SATA devices, you do this with the following command :
Here “host0” is the SATA channel you want to scan, so you obviously need to replace that by the appropriate channel number. Linux will then hopefully discover the newly attached disk.
Hot unplug : safely removing a disk
First thing, you need to unmount all the mounted filesystems which are residing on the disk you wish to disconnect.
Once this is done, you need to instruct Linux to flush all data still in memory to the disk and then to disconnect it. You do this by issuing the following command :
At this point you’ll usually hear the “click” of the drive spinning down, and you can power off and disconnect it.
9 thoughts on “Linux : SATA hot plug / unplug”
Hi St�phane,
thanks for sharing this.
If I would put the hotplug scan into a bash script, I would like to have the script wait, until “# fdsik -l” actually recognizes the newly added device / redo the scan until the device has been recognized.
Any ideas on how to do this?
Here are some hints to get you started :
1) here’s how to get the list of the attached disks : fdisk -l | grep ‘^/dev/sd’ | awk ‘
2) Do this at script start up, save result in a temp file
3) Run the command to discover new disks as described in the post
4) Get the disk list again. Is there a new disk (maybe use diff) ? Yes -> terminate. No -> sleep 10 sec and go to 3
Hope this helps ! (and hopefully I understood correctly what you need ;))
Great post dude! Was exactly what I was looking for though for the reverse reasons. I wanted a way to stop/hide the hard disk from the OS once it had loaded the live image in RAM, this was for a media centre I’m building.
Very cool, thanks for sharing. Not sure why this hasn’t been implemented to happen automatically since eSATA with hotplug support has been around for a while now.
Have you checked your BIOS settings? SATA hotplug does not (usually) work until you set BIOS to use AHCI for the chipsets; on most motherboards it is set to ‘ide-emulation’ or such by default.
And for further notes, even AHCI is enabled, some motherboards required to set a seprate option for SATA hotplugging.
Thank you for this posting – it helped me to replace fast one of my faulty SATA RAID disks on a running server.
Cheers 😉
I knew my motherboard and Linux kernel support SATA hotplugging, I enabled it but had no idea on how to use it. Thanks!
Источник
SATA HotPlug: возможно ли?
Давно интересовал такой вопрос: можно ли на горячую подключать или отключать SATA-диски? Если да, то обязательно ли для этого использовать какой-либо Mobile Rack, или же безопасно делать это напрямую?
В общем, хочется побольше информации на данный счет из реального опыта 🙂
Про eSATA знаю, но вопрос именно про обычный SATA, внутренний.
Постоянно отключаю и sata и pata — никаких проблем. Если контроллер не поддерживает hot-plug/plug and play или как там еще это называется, в общем не уведомляет о подключении/отключении устройств, то нужно перед отключением делать
echo 1 >/sys/block/sda/device/delete
после подключения соответственно
echo ‘- — -‘ >/sys/class/scsi_host/host0/scan
Вместо sda подставляем sdb/sdc/sr0/sr1 и т.д., вместо host0 — host1, host2 и т.д., пока не появится новое устройство.
Безопасно, SATA проектировался с поддержкой хотплага
Без проблем. SATA II предусматривает хотплаг в обязательном порядке, но многие диски SATA поддерживают эту возможность и так (Seagate точно должны).
В общем, хочется побольше информации на данный счет из реального опыта 🙂
УМВР 🙂 Дёргаю периодически, проблем ни разу не было. Главное, не забывать удалять устройство из ОС.
Когда увидел в магазине как их спецы SATA-хард на горячую втыкали просто обалдел. Дома попробовал — вполне себе работает.
Единственный замеченный глюк, под Win на недоRAID Si3112 или подобном, когда на горячую дёргаешь один из винтов в массиве, система коматозится на минуту и иногда уходит в себя насовсем. С одиночными хардами подключенными к материнке проблем не было.
Спасибо всем за ответы! На досуге буду пробовать данный финт 🙂
Источник
SATA hotplug
Интересна поддержка сабжа в железе. Вообще же SATA поддерживает hotplug, но первые интеловские мосты (кажись ICH5) его не поддерживали и это было описано. Сейчас искал инфу про новые чипы (тот же ICH10) и ничего не нашел. Потому вопрос: как сейчас с этим дела? Проверил у себя — вроде работает на ICH10R. Где-то кто-то говорил что в ICHxR поддерживается, а в ICHxx — нет.
Вопрос №2: как привильно вставлять/удалять устройства? Сначала вставлять питание, потом данные? Нужно ли что-то делать в линуксе перед удалением, кроме отмонтирования разделов?
Не путайте SATA и ATA. В SATA «из коробки» hotplug. Главное, отмонтировать диск не забыть, перед тем, как его отключать.
(hot pluggable) SATA/SCSI add/remove scripts for Linux
Re: (hot pluggable) SATA/SCSI add/remove scripts for Linux
При подключении сначала подключаем шлейф с данными, потом с питанием.
При отключении сначала отключаем шлейф с питанием, потом с данными.
При подключении сначала подключаем шлейф с данными, потом с питанием.
При отключении сначала отключаем шлейф с питанием, потом с данными.
Интересно. А почему так?
Спс. Надо такое в DE встроить.
Первый скрипт нужен только для старых SATA/SCSI контроллеров, которые нормативно не поддерживают hot plug (по факту поддерживают почти все, только они не посылают hotplug event’ы по dbus/hal’у, ибо контроллеры глупые).
Ага и он может понабиться, если у вас SATA в режиме IDE/compatible в BIOS стоит.
Re: (hot pluggable) SATA/SCSI add/remove scripts for Linux
Где проверка на примонтированность того что выключается?
Нафига вешать зависимости на два интерфейса когда можно всё через /sys сделать? И практика парсить форматированный выхлоп дебильная, ибо формат вывода изменили и скрипты полетели.
С какого боку ATA стало эквивалентно HDD? Про SSD, например, не слышали?
>Первый скрипт нужен только для старых SATA/SCSI контроллеров
Первый скрипт может понадобиться если в(вы)рубаешь устройство не вынимая его.
Re: (hot pluggable) SATA/SCSI add/remove scripts for Linux
> Где проверка на примонтированность того что выключается?
Я не нашёл как связать /proc/scsi/scsi с /dev/sdX, просто лень было — скрипт для меня родимого.
> Нафига вешать зависимости на два интерфейса когда можно всё через /sys сделать?
It’s a just quick hack.
> И практика парсить форматированный выхлоп дебильная, ибо формат вывода изменили и скрипты полетели.
и в sys оно тоже может поменяться.
> С какого боку ATA стало эквивалентно HDD? Про SSD, например, не слышали?
Полегче!! SSD — это уже не HDD? или вы как-то иначе их называете? 🙂
> Первый скрипт может понадобиться если в(вы)рубаешь устройство не вынимая его.
Можешь поиздеватся над вендузятниками — на рабочей машине внаглую отключаешь винт , а потом подключаешь — и ничего. Т.е. линукс как работал так и работает — лица у народа очень озадаченые. Естественно все это касается SATA винтов и линукса
Во время отключения винта в Линуксе попробуйте открыть хоть один незакэшированный файл — после этого система встаёт раком и ничего не помогает.
Может есче запустить компиляцию ядра с винта который отключен?
вообще hotplug работает только для AHCI как бы по стандарту.
>> на рабочей машине внаглую отключаешь винт , а потом подключаешь — и ничего
Ага, если только имя в /dev/ не сменится, что весьма вероятно.
UUID всех спасёт
>Ага, если только имя в /dev/ не сменится, что весьма вероятно.
если никаких скази устройств не пихать, то не сменится.
Весьма нормально работает:
echo 1 > /sys/block/sdh/device/delete
И довольно просто.
Переписано на sysfs
И да, вот так можно связать с именем блочного устройства.
Скрипты это не прикольно. Это ламерам можно показывать какой я крутой в консоли. А для личного удобства нужен гуй:)
Вы таки решительно не правы. Не буду флеймить насчет винды и привычек к мышковозительству, но скажу, что многие, очень многие вещи в консоли делать ЗНАЧИТЕЛЬНО быстрее и проще. Даже не обсуждаю сейчас вопрос «нах*я гуй на сервере», хотя тоже благодатная почва. Это, конечно, не значит, что гуй не нужен. Нужен. Но далеко не всегда и не везде.
Я даже больше скажу. В скриптах можно гуй сделать, представляете? Curses, или X11 — какой больше нравится (dialog, xdialog)
Даже не обсуждаю сейчас вопрос «нах*я гуй на сервере», хотя тоже благодатная почва.
+1, Нафиг не нужен. На сервере не влом и ручками в /sys записать.
Это, конечно, не значит, что гуй не нужен. Нужен. Но далеко не всегда и не везде.
Вы таки решительно не правы. Не буду флеймить насчет винды и привычек к мышковозительству, но скажу, что многие, очень многие вещи в консоли делать ЗНАЧИТЕЛЬНО быстрее и проще.
Не всегда. Два клика на каком-то device notifier’е против набора команды. В гуе тупо быстрее. Да, всего на секунды.
Я даже больше скажу. В скриптах можно гуй сделать, представляете? Curses, или X11 — какой больше нравится (dialog, xdialog)
Татышо. Я не хочу отдельную прогу, я хочу нормальную интеграфию в DE. Консольное решение и так есть, а гуя нету.
Источник
Добавление и удаление на ходу SATA/SCSI устройств
Современный Linux (2.6+) может обнаруживать новоподключенные устройства (на шинах, которые поддерживают hotplug). Их можно, так же отключать, предварительно отмонтировав файловые системы и сделав sync. Среди hotplug шин не только USB, но и SATA, SCSI и SAS (в теории, это же применимо и к PATA, но там много глупых контроллеров, которые не умеют адекватно реагировать на исчезновение устройства).
Отключать их лучше не дёргая на ходу физическое устройство, а сказав ядру полностью забыть про про него (гарантируя тем самым, что никаких операций ввода-вывода с устройством производиться не будет, даже если вспохватившийся кеш). Кроме того, иногда нужно выполнять эмуляцию процедуры plug-unplug без физического дёргания питания/шины данных (что не очень хорошо для железа). Самая типичная ситуация — это отладка скриптов udev.
Удаление устройства
(x — буква устройства, sda, sdb, etc).
Эта команда удаляет указанное устройство. Заметим, это низкоуровневая команда, которая не проверяет кеш и статус примонтированности, так что лучше сначала сказать umount & sync.
К сожалению, я не знаю метода совместить выключение шпинделя диска с его удалением с точки зрения ядра. Шпиндель можно отключить командой scsi-spin, однако, при попытке удалить устройство, оно будет раскручено заново и удалено. А у удалённого устройства уже нельзя ничего останавливать (нет устройства). Так что эта часть проблемы пока не решена.
Добавление устройства
Мы не можем «добавить» устройство, мы можем отдать контроллеру команду «перечитать» список устройств, подключенных к тому или иному порту. Если там найдётся что-то интересное, ядру дадут знать.
X — номер шины, совпадает с номером SATA порта на материнской плате. Если не знаете, можете смело делать для всех хостов по очереди, ничего, кроме небольшого лага в дисковых операциях, незаметного для софта и файловой системы, это не даст.
Обратите внимание, host’ы нумеруются с 0, а не с 1. (а в dmesg ata устройства нумеруются с 1).
Так же осуществляется и сканирование USB-SATA переходников (usb-боксов и внешних винчестеров — они просто фигурируют как ещё один scsi_host).
Если мы говорим про SCSI, то вместо «- — -» можно указать точный номер устройства/шины/LUN’а сканируемого устройства (например, «200 1 2»). SATA, в силу архитектурных особенностей (один target для одного initiator) принимает туда только «0 0 0».
Ещё об удалении… Если вы не знаете буквы устройства, но знаете его физическое место подключения, то удалять можно «прямым текстом», записью «1» в «/sys/bus/scsi/devices/targetX:0:0/X:0:0:0/delete».
Источник