Что надлежащий путь состоит в том, чтобы разъединить жесткий диск с интерфейсом SATA замены в горячем режиме?

Я использую отсек замены в горячем режиме SATA, и у меня есть в BIOS этот конкретный порт, настроенный специально для "Замены в горячем режиме".

Этот отсек имеет удобную кнопку "POWER ON/OFF", таким образом, никакие прерывания во время plugging-in/out кабелей не происходят.

Когда я включаю диск, я сразу получаю некоторые ошибки ядра, прежде чем он смонтируется:

[1263413.036674] ata6: exception Emask 0x10 SAct 0x0 SErr 0x4040000 action 0xe frozen
[1263413.036680] ata6: irq_stat 0x00000040, connection status changed
[1263413.036683] ata6: SError: { CommWake DevExch }
[1263413.036698] ata6: hard resetting link
[1263418.796687] ata6: link is slow to respond, please be patient (ready=0)
[1263423.052529] ata6: COMRESET failed (errno=-16)
[1263423.052547] ata6: hard resetting link
[1263428.032390] ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[1263428.032836] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20150930/psargs-359)
[1263428.032846] ACPI Error: Method parse/execution failed [\_SB.PCI0.SAT0.SPT5._GTF] (Node ffff88040e0c5780), AE_NOT_FOUND (20150930/psparse-542)
[1263428.159582] ata6.00: ATA-9: HGST HDN726040ALE614, APGNW7JH, max UDMA/133
[1263428.159588] ata6.00: 7814037168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA
[1263428.161980] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20150930/psargs-359)
[1263428.161988] ACPI Error: Method parse/execution failed [\_SB.PCI0.SAT0.SPT5._GTF] (Node ffff88040e0c5780), AE_NOT_FOUND (20150930/psparse-542)
[1263428.164472] ata6.00: configured for UDMA/133
[1263428.164483] ata6: EH complete
[1263428.164650] scsi 5:0:0:0: Direct-Access     ATA      HGST HDN726040AL W7JH PQ: 0 ANSI: 5
[1263428.165064] sd 5:0:0:0: Attached scsi generic sg4 type 0
[1263428.165502] sd 5:0:0:0: [sdd] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB)
[1263428.165508] sd 5:0:0:0: [sdd] 4096-byte physical blocks
[1263428.165582] sd 5:0:0:0: [sdd] Write Protect is off
[1263428.165587] sd 5:0:0:0: [sdd] Mode Sense: 00 3a 00 00
[1263428.165618] sd 5:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[1263428.213630]  sdd: sdd1
[1263428.214062] sd 5:0:0:0: [sdd] Attached SCSI disk
[1263534.534238] EXT4-fs (dm-5): mounted filesystem with ordered data mode. Opts: (null)

И когда я размонтировал его (как любой другой диск) и затем выключаю отсек, я получаю более странный вывод от ядра (последние части происходит спустя приблизительно 10 секунд после выключения - система все еще думает, что диск подключен некоторое время до него тайм-ауты):

[1263588.964461] ata6: exception Emask 0x10 SAct 0x0 SErr 0x4090000 action 0xe frozen
[1263588.964467] ata6: irq_stat 0x00400040, connection status changed
[1263588.964478] ata6: SError: { PHYRdyChg 10B8B DevExch }
[1263588.964483] ata6: hard resetting link
[1263589.687000] ata6: SATA link down (SStatus 0 SControl 300)
[1263594.686806] ata6: hard resetting link
[1263595.006827] ata6: SATA link down (SStatus 0 SControl 300)
[1263595.006837] ata6: limiting SATA link speed to 1.5 Gbps
[1263600.006678] ata6: hard resetting link
[1263600.330626] ata6: SATA link down (SStatus 0 SControl 310)
[1263600.330634] ata6.00: disabled
[1263600.330645] ata6: EH complete
[1263600.330653] ata6.00: detaching (SCSI 5:0:0:0)
[1263600.334909] sd 5:0:0:0: [sdd] Synchronizing SCSI cache
[1263600.334943] sd 5:0:0:0: [sdd] Synchronize Cache(10) failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[1263600.334946] sd 5:0:0:0: [sdd] Stopping disk
[1263600.334955] sd 5:0:0:0: [sdd] Start/Stop Unit failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK

Однако диск хорошо работает, никакие проблемы или ошибки данных вообще, но я получаю чувство, что он, возможно, был сделан лучшим/более безопасным способом без такого луга тайм-аута.

Существует ли более надлежащий путь к разъединению замены в горячем режиме SATA?


Я пытался отправить a udisksctl power-off -b /dev/sdd команда, но в то время как это хорошо работает для Карт памяти, это ничего не делает с SATA. Лучшая вещь, которую я изобразил, состоит в том, чтобы приостановить диск перед выключением, но вывод ядра - это то же так или иначе.


$ uname -a
Linux dev 4.4.0-93-generic #116-Ubuntu SMP Fri Aug 11 21:17:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
2
задан 26 December 2017 в 03:53

3 ответа

Вот самая странная команда, которая на самом деле добивается цели, я искал:

sudo sh -c 'echo 1 > /sys/block/sdd/device/delete'

... и после этого это идет:

[1285227.129329] sd 5:0:0:0: [sde] Synchronizing SCSI cache
[1285227.129566] sd 5:0:0:0: [sde] Stopping disk
[1285228.209095] ata6.00: disabled

... и теперь я могу ВЫКЛЮЧИТЬСЯ, и это идет:

[1285259.491044] ata6: exception Emask 0x10 SAct 0x0 SErr 0x4090000 action 0xe frozen
[1285259.491049] ata6: irq_stat 0x00400040, connection status changed
[1285259.491052] ata6: SError: { PHYRdyChg 10B8B DevExch }
[1285259.491058] ata6: hard resetting link
[1285260.211923] ata6: SATA link down (SStatus 0 SControl 300)
[1285260.211934] ata6: EH complete

Мало неприятности, что это должно базироваться priviledge, но это выглядит намного более удовлетворяющим :)

2
ответ дан 26 December 2017 в 03:53
  • 1
    Лучше добавить информацию о сервере имен к соединениям NetworkManager (при использовании NetworkManager), как описано bodhi.zazen, или соединять интерфейсом с определениями в/etc/network/interfaces (при использовании ifup), чем добавить информацию статически и глобально к/etc/resolvconf/resolv.conf.d/base. – jdthood 30 October 2012 в 12:21
  • 2
    Лучше добавить информацию о сервере имен к соединениям NetworkManager (при использовании NetworkManager), как описано bodhi.zazen, или соединять интерфейсом с определениями в/etc/network/interfaces (при использовании ifup), чем добавить информацию статически и глобально к/etc/resolvconf/resolv.conf.d/base. – jdthood 30 October 2012 в 12:21
  • 3
    Лучше добавить информацию о сервере имен к соединениям NetworkManager (при использовании NetworkManager), как описано bodhi.zazen, или соединять интерфейсом с определениями в/etc/network/interfaces (при использовании ifup), чем добавить информацию статически и глобально к/etc/resolvconf/resolv.conf.d/base. – jdthood 30 October 2012 в 12:21
  • 4
    Лучше добавить информацию о сервере имен к соединениям NetworkManager (при использовании NetworkManager), как описано bodhi.zazen, или соединять интерфейсом с определениями в/etc/network/interfaces (при использовании ifup), чем добавить информацию статически и глобально к/etc/resolvconf/resolv.conf.d/base. – jdthood 30 October 2012 в 12:21
  • 5
    Лучше добавить информацию о сервере имен к соединениям NetworkManager (при использовании NetworkManager), как описано bodhi.zazen, или соединять интерфейсом с определениями в/etc/network/interfaces (при использовании ifup), чем добавить информацию статически и глобально к/etc/resolvconf/resolv.conf.d/base. – jdthood 30 October 2012 в 12:21
  • 6
    Лучше добавить информацию о сервере имен к соединениям NetworkManager (при использовании NetworkManager), как описано bodhi.zazen, или соединять интерфейсом с определениями в/etc/network/interfaces (при использовании ifup), чем добавить информацию статически и глобально к/etc/resolvconf/resolv.conf.d/base. – jdthood 30 October 2012 в 12:21

Когда вы размонтировали все разделы с файловыми системами на диске (и поменяли местами любые активные разделы подкачки), вы можете отключить питание без какого-либо риска для файловых систем (и, возможно, для хранения данных в состоянии гибернации), и после этого вы можете отключить диск.

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


Процесс размонтирования начинается с очистки буферов (заканчивает запись данных в смонтированные файловые системы, что также можно выполнить отдельно с помощью команды sync), и после этого процесс размонтирования завершается (и файл системы больше не доступны).

Следующие ссылки могут помочь в описании размонтирования и извлечения USB-накопителей (eject = unmount и отключить питание),

  • подробнее о размонтировании: Размонтирование моего выделенного диска Windows на Ubuntu Pendrive

  • размонтировать и извлечь: Как отключить USB-устройство MTP из командной строки

    Это размонтируйте . Буферы сброшены, поэтому можно безопасно отключить устройство от сети. Устройство все еще включено, поэтому его можно «увидеть на рабочем столе» и снова подключить. Это отличается от извлечения . Выдвинутый выводной привод будет отключен, и его необходимо отключить и снова подключить, если вы хотите его смонтировать.

    Я не использую какой-либо общий метод автоматического извлечения дисков [e] SATA в linux, но вы можете использовать следующую последовательность действий:

    • unmount
    • отключить питание
    • отключить

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

1
ответ дан 26 December 2017 в 03:53
  • 1
    @jdthood кажется наблюдением моих комментариев и вопроса, а также других ответов! Некоторые комментарии [..] " Вы могли использовать это: $ ifdown eth0 & & ifup eth0" [..] – pl1nk 1 November 2012 в 17:19
  • 2
    @jdthood кажется наблюдением моих комментариев и вопроса, а также других ответов! Некоторые комментарии [..] " Вы могли использовать это: $ ifdown eth0 & & ifup eth0" [..] – pl1nk 1 November 2012 в 17:19
  • 3
    @jdthood кажется наблюдением моих комментариев и вопроса, а также других ответов! Некоторые комментарии [..] " Вы могли использовать это: $ ifdown eth0 & & ifup eth0" [..] – pl1nk 1 November 2012 в 17:19
  • 4
    @jdthood кажется наблюдением моих комментариев и вопроса, а также других ответов! Некоторые комментарии [..] " Вы могли использовать это: $ ifdown eth0 & & ifup eth0" [..] – pl1nk 1 November 2012 в 17:19
  • 5
    @jdthood кажется наблюдением моих комментариев и вопроса, а также других ответов! Некоторые комментарии [..] " Вы могли использовать это: $ ifdown eth0 & & ifup eth0" [..] – pl1nk 1 November 2012 в 17:19
  • 6
    @jdthood кажется наблюдением моих комментариев и вопроса, а также других ответов! Некоторые комментарии [..] " Вы могли использовать это: $ ifdown eth0 & & ifup eth0" [..] – pl1nk 1 November 2012 в 17:19

Я написал скрипт для размонтирования всех разделов на диске, а затем приостановить работу диска с помощью hdpar. Хорошо работает для моих нужд, но просмотрите код и используйте его на свой страх и риск. (ссылка на github ниже)

1: размонтировать разделы и проверить на наличие ошибок

umount /dev/sdx? 

2: Если обнаружена ошибка, проверьте, все ли диски ранее были размонтированы или заняты. если занят выход из программы. если не продолжать

if [ $? -ne 0 ]; then
    for File in /dev/${1}?
    do
    findmnt ${File}
        if [ $? -ne 0 ]; then
            echo "${File} is not mounted"
        else
            echo
            echo "ERROR: ${File} is still mounted!!"
            echo
            exit 11
        fi
    done
else
    echo "${1} unmounted" 
fi

3: Подождите три секунды (это было необходимо, потому что, если я пытался приостановить работу слишком рано после размонтирования, это никогда не сработало.)

echo "wait three seconds"

для индекса в {3..1} делать echo "Парковка в ${Index}" спать 1 done

4: Если диски ранее были размонтированы или размонтирование прошло успешно, приостановите работу диска, чтобы припарковать головки.

hdparm -$Mode /dev/${1}

если [$? -ne 0]; тогда эхо echo "ОШИБКА: невозможно перевести диск в режим ожидания" эхо выход 12 фи return 0

Пожалуйста, смотрите полную программу на github, она включает в себя параметры функций и текстовый пользовательский интерфейс. https://github.com/BMarkley/ParkDrive

0
ответ дан 8 July 2020 в 06:49

Другие вопросы по тегам:

Похожие вопросы: