Як я можу безпечно вийняти диск SATA з працюючої системи?


64

Мені іноді потрібно підключити диск у відсік для дисків. В інший час у мене дуже дивні налаштування підключення SSD за допомогою кабелю SATA-eSATA на моєму ноутбуці, одночасно витягуючи живлення з робочого столу.

Як я можу безпечно вийняти диск SATA з системи? У цій темі форуму Phoronix є кілька пропозицій:

justsumdood написав:

Дроїд написав:
Що ви робите з боку програмного забезпечення перед відключенням штекера? Це простий "umount / dev / sd" [лист диска]? після відключення пристрою "вимкнути" (або увімкнути) пристрій:

hdparm -Y /dev/sdX

(де X представляє пристрій, який ви хочете вимкнути. Наприклад: / dev / sdb)

це призведе до вимкнення приводу, що дозволяє зняти його без ризику сплеску напруги.

Чи означає це, що кеш-диски належним чином промиті та відключені після цього?

Ще одна пропозиція з тієї ж теми:

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

Як поводиться чіпсет і драйвер - це ще одне питання. Деякі комбінації драйверів / чіпсетів неправильно обробляють гарячу підключення, і потрібна команда warmplug, наприклад наступна:

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

Замініть X на відповідний номер для вашого порту SATA / eSATA.

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

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

Відповіді:


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

Якщо ви хочете бути особливо обережними, зробіть echo 1 > /sys/block/(whatever)/device/deleteспочатку. Це скасує реєстрацію пристрою з ядра, тому ви нічого не знаєте, як використовувати його, коли ви від'єднаєте його від мережі. Коли я це роблю з накопичувачем у корпусі eSATA, я чую, як голови диска самостійно паркуються, тому ядро, мабуть, підказує диску, щоб підготуватися до вимкнення живлення.

Якщо ви використовуєте контролер AHCI, він повинен справлятися з відключеними пристроями. Якщо ви використовуєте інший тип контролера SATA, драйвер може бути заплутаний гарячим підключенням.

На мій досвід, гаряча підключення SATA (з AHCI) працює досить добре в Linux. Я відключив оптичний привід, підключив жорсткий диск, відсканував його на помилки, зробив файлову систему та скопіював у неї дані, відключив та відключив її, підключив різний привід DVD і записав диск, все з машиною і біг.


У мене виникла потреба відключити жорсткий диск, який я хотів повністю стерти. Після витягування диска з гнізда / dev / sdXY все-таки з’явився. Написавши, 1щоб deleteвін зник, і я почув, як диск крутиться вниз. Просто цього hdparm -Yбуло недостатньо, оскільки /dev/записи все одно існуватимуть. Дякую!
Лекенштейн

16
Я настійно раджу завжди видавати echo 1 > /sys/block/(whatever)/device/deleteкоманду, оскільки накопичувач буде паркувати голови, повністю зупинити диск і відключити живлення на шині. Якщо непаркована голова торкається спінінгової пластини, привід може бути назавжди знищений.
барабанне вогнище

2
Крім того, якщо розумний запуск працює, то непогано заздалегідь надати SIGHUP процесу, щоб він перезавантажив інформацію про накопичувач. Особливо важливо, якщо ви замінюєте диски, оскільки smartd перезавантажить інформацію про цей накопичувач та всі інші.
барабанне вогнище

1
Лише одна примітка, яку варто згадати, echo 1 > /sys/block/(whatever)/device/deleteне буде працювати під sudo, помилка "Дозволено відмовлено" буде кинуто. Вам потрібно буде стати справжнім коренем, тому використовуйте suзамість нього звичайний старий .
TranslucentCloud

11
@TranslucentCloud Ви можете передати це, sudo teeщоб імітувати переспрямування як корінь:echo 1 | sudo tee /sys/block/(whatever)/device/delete
Oli

5

Ці два розділи призначені для різних речей.

Перший - для відключення вилки . Друга - для підключення .

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

Для підключення пристрій повинен бути розпізнаний автоматично. Якщо ні, ви можете виконати цю команду для запуску сканування шини. Після розпізнавання пристрою ви можете встановити його.

І дозвольте мені застерегти це, сказавши, що я тільки коли-небудь робив подібні речі з USB-накопичувачами.


Дякую за вашу відповідь, але я досі не переконаний у тому, що було б правильним. На SSD-кодах є SMART-поле "Небезпечний вимкнення", просто від'єднавши його від мережі, не роблячи нічого, для мене це не здається безпечним.
Лекенштейн

3
Якщо це допомагає, я як правило працюю на жорстких дисках із гарячою штепсельною роз'ємом та гарячим відключенням SATA, але не переконуюсь, що спочатку він відключений, і я ніколи не стикався з проблемою. Це анекдотично, тому не сприймайте це як євангеліє, але це хоча б деякі докази того, що це, ймовірно, безпечно. У будь-якому випадку, я вважаю, що це помилка ядра, якщо ОС не гарантує, що дані будуть повністю записані в кінці операції, що не відключається, особливо в світі гарячих пробок.
Джандер

1
@Lekensteyn, hdparm -Yподбає про це. Це в основному те, що система робить кожен раз, коли ви призупиняєте чи відключаєте.
psusi

5

про що eject /dev/sdX? У моєму налаштуванні ця команда налаштовує, синхронізує та відключає диск.


4
Я спробував це на диску, підключеному через eSATA, але команда не вдалась із "не гарячою підключенням" чи іншим.
Лекенштейн

1
Afaik eject вимикає підключається диск, а не пристрій. Це залежить від того, що драйвер блокового пристрою підтримує ioctl()операцію, яку використовує ejectінструмент. Диски жорстких дисків Esata не підтримують це, але оптичні пристрої, дискети та, мабуть, флешки, так.
користувач259412

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 - це лише хороша міра і працює з тією ж метою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.