Как безопасно удалить диск SATA из работающей системы?

64

Иногда мне нужно подключить диск к отсеку. В других случаях у меня есть очень странная настройка подключения SSD с помощью кабеля SATA-eSATA к ноутбуку при одновременном питании от настольного компьютера.

Как можно безопасно удалить диск SATA из системы? В этой ветке форума Phoronix есть несколько предложений:

justsumdood написал (а):

(Шумный) дроид писал: «
Что же вы делаете на стороне программного обеспечения, прежде чем отключить? Это просто "umount / dev / sd" [буква диска]? после размонтирования устройства, чтобы «выключить» (или перевести в спящий режим) устройство:

hdparm -Y /dev/sdX

(где X обозначает устройство, которое вы хотите отключить. Например: / dev / sdb)

это отключит электропитание привода, позволяя удалить его без риска скачка напряжения.

Означает ли это, что кэш-память диска после этого должным образом очищается и отключается?

Еще одно предложение из той же ветки:

Читан писал:
Все оборудование SATA и eSATA физически может быть подключено горячим способом (т. е. не повреждено, если вы вставите / вытяните вилку).

Как чипсет и драйвер справляются с этим - другой вопрос. Некоторые комбинации драйверов и наборов микросхем неправильно обрабатывают горячее подключение и нуждаются в такой команде, как следующая:

echo 0 - 0 > /sys/class/scsi_host/hostX/scan

Замените X на номер, соответствующий вашему порту SATA / eSATA.

Я сомневаюсь, является ли правильный способ сделать это, но я также не могу найти какое-либо доказательство против этого.

Итак, как правильно удалить подключенный диск из системы? Предположим, что я уже размонтировал каждый раздел на диске и запустил sync. Пожалуйста, укажите на некоторую официальную документацию, если возможно, я не смог найти ничего ни в дереве документации Linux, ни в вики Linux ATA .

Lekensteyn
источник

Ответы:

82
  1. Размонтируйте любые файловые системы на диске. ( umount ...)
  2. Деактивировать любые группы LVM. ( vgchange -an)
  3. Убедитесь, что диск ни для чего не используется.
  4. После того, как вы это сделали, отсоединение должно быть безопасным.

Если вы хотите быть очень осторожным, сделайте это в echo 1 > /sys/block/(whatever)/device/deleteпервую очередь. Это приведет к отмене регистрации устройства в ядре, поэтому вы ничего не знаете , когда оно будет отключено . Когда я делаю это с диском в корпусе eSATA, я слышу, как головки диска самопроизвольно паркуются, поэтому ядро, по-видимому, говорит диску подготовиться к отключению питания.

Если вы используете контроллер AHCI, он должен справляться с отключением устройств. Если вы используете какой-либо другой тип контроллера SATA, драйвер может быть сбит с толку горячим подключением.

По моему опыту, горячее подключение SATA (с AHCI) работает очень хорошо в Linux. Я отключил оптический привод, подключил жесткий диск, отсканировал его на наличие ошибок, создал файловую систему и скопировал на нее данные, размонтировал и отключил ее, подключил другой DVD-привод и записал диск, и все это с включенной машиной и работает.

Wyzard - Стоп Harming Моника
источник
Мне нужно было отключить жесткий диск, который я хотел полностью стереть. После извлечения диска из отсека, / dev / sdXY все еще обнаружился. Запись 1в deleteсделал это исчезнет , и я мог слышать диск вращаться вниз. Просто hdparm -Yбыло недостаточно, потому что /dev/записи все еще будут существовать. Спасибо!
Лекенштейн
16
Я настоятельно советую всегда вводить echo 1 > /sys/block/(whatever)/device/deleteкоманду, потому что привод будет парковать головки, полностью останавливать диск и отключать питание шины. Если непаркованная головка касается вращающейся пластины, привод может быть окончательно разрушен.
барабанная дробь
2
Кроме того, если SmartD работает, рекомендуется выдать SIGHUP процессу, чтобы он перезагрузил информацию о диске. Особенно важно, если вы заменяете диски, потому что SmartD перезагрузит информацию для этого диска и всех остальных.
барабанная дробь
1
Стоит упомянуть только одно примечание, echo 1 > /sys/block/(whatever)/device/deleteкоторое не будет работать , будет sudoвыдано сообщение об ошибке «Отказано в доступе». Вам нужно стать настоящим корнем, поэтому используйте suвместо этого обычный старый .
TranslucentCloud
11
@TranslucentCloud Вы можете передать его через канал, sudo teeчтобы эмулировать перенаправление от имени пользователя root:echo 1 | sudo tee /sys/block/(whatever)/device/delete
Oli
5

Эти два раздела для разных вещей.

Первый для отключения . Второй для подключения .

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

Для подключения устройство должно быть автоматически распознано. Если нет, вы можете выполнить эту команду для запуска сканирования шины. Как только устройство будет распознано, вы можете установить его.

И позвольте мне пояснить это, сказав, что я когда-либо делал подобные вещи только с USB-накопителями.

bahamat
источник
Спасибо за ваш ответ, но я все еще не уверен, что будет правильным действием. SSD имеют поле SMART «Unsafe Shutdown Count», просто отключить его, ничего не делая, не кажется мне безопасным.
Лекенштейн
3
Если это помогает, я обычно подключаю жесткие диски SATA с возможностью «горячего» и горячего отключения как часть своей работы, просто следя за тем, чтобы сначала их отключить, и у меня никогда не возникало проблем. Это анекдотично, так что не принимайте это как евангелие, но это, по крайней мере, некоторые доказательства того, что это, вероятно, безопасно. В любом случае, я бы посчитал это ошибкой ядра, если ОС не гарантирует полную запись данных в конце операции размонтирования, особенно в мире горячего подключения.
Декабрь
1
@Lekensteyn, hdparm -Yпозаботится об этом. Это в основном то, что система делает каждый раз, когда вы приостанавливаете работу или выключаетесь.
psusi
5

о чем eject /dev/sdX? На моей установке эта команда отключает, синхронизирует и выключает диск.

bitvitez
источник
4
Я попытался сделать это с диском, подключенным через eSATA, но команда завершилась неудачно с "not hotpluggable" или чем-то другим.
Лекенштейн
1
Afaik eject подключает подключаемый диск, а не устройство. Это зависит от того, поддерживает ли драйвер блочного устройства ioctl()операцию, используемую ejectинструментом. Жесткие диски Esata не поддерживают его, но оптические устройства, дискеты и, возможно, флэш-диски, да.
user259412
2

У меня есть пара сценариев, основанных на ответе Вайзарда . Во-первых, scsi-dropэто безопасно отсоединить один диск:

#!/bin/sh

if test -h "$1"
then
    disk=$(chase "$1")
else
    disk="$1"
fi

if test -b "$disk"
then
    echo 1 >/sys/block/$(basename "$disk")/device/delete
else
    echo "$0: not a block device: $1" >&2
    exit 1
fi

Его основное преимущество заключается в том, что вы можете передать ему символическую ссылку, например, найденную в, /dev/disk/by-id/и она разрешит это на реальном устройстве. Это требует chaseбыть установленным; Вы можете получить тот же результат, используя readlink -e.

Второй сценарий, scsi-rescanиспользуется после горячего подключения нового устройства:

#!/bin/bash

exec tee /sys/class/scsi_host/host*/scan <<<'- - -' >/dev/null

Это заставляет все адаптеры повторно сканировать устройства. Это был единственный способ получить новую емкость и таблицу разделов для чтения.

Тоби Спейт
источник
0

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

Большинство повреждений обычно вызвано неработающим кэшем и незафиксированными записями в буферах и т. Д. Вот почему вы ДОЛЖНЫ размонтировать диск перед его удалением. Команда SCSI - просто хорошая мера и работает для той же цели.

Губка Боб
источник