Включение жесткого диска в режиме ожидания: предотвращение раскрутки

3059
Finwood

В моей системе Linux Mint 17.1 для резервного копирования используется жесткий диск Western Digital WD20EZRX. Чтобы минимизировать энергопотребление и продлить срок службы накопителя, я хочу, чтобы жесткий диск обычно находился в режиме ожидания с замедлением вращения и раскручивался только в случае явной необходимости.

Это может быть достигнуто двумя способами: тривиальным подходом будет установка жесткого диска в режим ожидания вручную с помощью hdparm -y /dev/sdb. Однако недостатком будет то, что во время запуска накопитель раскручивается, пока сценарий снова не переходит в спящий режим. Поэтому я бы хотел, чтобы накопитель включался в режиме ожидания, PUIS, чтобы он не вращался в первый раз.

Некоторые накопители WD поддерживают PUIS, хотя Western Digital называется PM2, Power Management 2 Mode . Эта функция включается с помощью перемычек, как описано в этой статье базы знаний WD . Результат этой конфигурации можно проверить с помощью hdparm:

# hdparm -I /dev/sdb | grep "Power-Up In Standby" * Power-Up In Standby feature set 

Тем не менее, диск все еще раскручивается во время загрузки, даже до отображения экрана запуска Grub. Может ли это быть неправильно настроенный загрузчик, который ищет операционные системы на всех подключенных жестких дисках?

3
PUIS не препятствует первоначальному включению жесткого диска, но жесткий диск переходит в спящий режим, когда он не используется, и ОС необходимо знать, чтобы снова включить жесткий диск, в противном случае он будет имитировать сбой жесткого диска, а ОС зависнет в ожидании на файл, который никогда не придет. Я не уверен в точных деталях, просто вначале он действует так, как будто он не включен, даже когда он включен. Также вы можете установить это как флаг на жестком диске, он работает не только через перемычки. JFA 7 лет назад 0

2 ответа на вопрос

2
Xen2050

Несколько лет назад я искал точную вещь для Linux Mint и старого HD, который также использовался только для случайного хранения данных.

Решения, которые я нашел (не ссылки под рукой больше) были теми же, что это выглядит, как вы обнаружили: а несколько жестких дисков могут иметь установку перемычки, которые должны привести привод остаться спящим / не раскручивать во время загрузки. Но это не сработало, мои результаты были такими же, как и у вас, они все равно раскручивались при загрузке. Я не нашел никаких исправлений для этого, насколько я знаю, это был BIOS / GRUB / linux, отдельно или вместе, или просто сам HD, который не слушал.

Я провел некоторое тестирование «горячей замены» / «горячей замены», подключив питание к жесткому диску (SATA), когда компьютер был включен и работает. Он сгенерировал несколько записей в журнале (dmesg & /var/log/syslog) и работал успешно . Затем по окончании работы с диском (синхронизация, размонтирование, спящий режим / hdparm -y) снова отключите питание. Работал! Но ему, видимо, нужна совместимая материнская плата и операционная система, поэтому YMMV.

Однако вытащить вилку из розетки для использования привода не очень удобно или просто, поэтому я подключил двухполюсный одноходовой переключатель - DPST, в Википедии есть схема - имеет 4 клеммы для 2 отдельных проводов питания (12 В). & 5V?), Чтобы разделить их и одновременно включить / выключить. Подключив его к источнику питания HD, я могу включать и выключать накопитель при необходимости.

Обновить:

Горячая замена используется для работы на Linux Mint 14/15/16, но по какой - то причине он перестал работать 17 и выше, я предполагаю, что некоторые изменения ядер остановили его. Теперь «горячая» замена жесткого диска только работает, но диск считывается поврежденным, только перезагрузка при включении приводит его в действие. Может быть, есть простой способ заставить его работать снова, или требуется какое-то перекомпилированное ядро ​​с некоторыми специальными переключателями ...?

Обновление 2

Горячая замена, видимо, снова работает для Ubuntu 16.04 (Mint 18 тоже должен работать).

2
Veon

The linux kernel spins up the drive. Take a look at these lines from drivers/ata/libata-core.c (kernel source code):

if (!tried_spinup && (id[2] == 0x37c8 || id[2] == 0x738c)) { tried_spinup = 1; /* * Drive powered-up in standby mode, and requires a specific * SET_FEATURES spin-up subcommand before it will accept * anything other than the original IDENTIFY command. */ err_mask = ata_dev_set_feature(dev, SETFEATURES_SPINUP, 0); if (err_mask && id[2] != 0x738c) { rc = -EIO; reason = "SPINUP failed"; goto err_out; } /* * If the drive initially returned incomplete IDENTIFY info, * we now must reissue the IDENTIFY command. */ if (id[2] == 0x37c8) goto retry; } 

If you comment these lines and recompile the kernel, the drives will not spin up. Then you'll need a command to spin them up, for example when hdparm disables PUIS it spins up the drive. Take a look at this link.

That's all I know about PUIS.

Edit: I just noticed that your drive spins up before the grub screen: this means the motherboard is spinning up the drive. You can try disabling the corresponding sata port in your BIOS/UEFI configuration, if it allows such a thing, and try again. If it's working, the drive will remain still until the kernel spins it up, after the grub screen and before the user login prompt, and you can find in dmesg

ataX.00: failed to IDENTIFY (SPINUP failed, err_mask=0x4) ataX.00: revalidation failed (errno=-5) ataX: SATA link up 6.0 Gbps (SStatus 133 SControl 300) 

At this point, if you hack the kernel, the drive will not spin up at all like I described earlier.

Edit 2: I found a better command to spin up the disk:

sg_sat_set_features --feature=7 /dev/sdX 

it's part of the sg3_utils package, requires root privileges, but spins up the disk nicely. Post updated on the arch linux forum, that's my final solution for now. A small summary of that post:

  • if your PUIS enabled disk spins up before boot loader screen, try disabling the corresponding sata port, or try a PCI-ex sata controller card
  • recompile the kernel to disable the command that spins up the disks in PUIS state
  • use sg_sat_set_feature to spin up the disk
  • rescan sata port to gain access to partitions
это очень информативно. Я хотел бы иметь безголовый сервер Linux, который будет использоваться в качестве NAS, но он перейдет в режим ожидания S3 и после пробуждения не раскручивает жесткие диски. Ваши предложения могут завести меня так далеко. Но тогда я бы хотел, чтобы система раскручивала диск, когда к нему фактически обращаются, без необходимости вручную вводить эту команду sg_sat_set_features. Но делайте это автоматически по требованию. Какие-либо предложения? Благодарю. onlinespending 6 лет назад 0
Похоже, это может работать на ноутбуке, но может быть больше проблем, чем оно того стоит ... Michael 5 лет назад 0