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

В моей системе 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. Может ли это быть неправильно настроенный загрузчик, который ищет операционные системы на всех подключенных жестких дисках?

2 ответа

Решение

Несколько лет назад я искал точную вещь для 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 тоже должен работать).

Ядро Linux раскручивает диск. Взгляните на эти строки из drivers/ata/libata-core.c (исходный код ядра):

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;
}

Если вы прокомментируете эти строки и перекомпилируете ядро, диски не будут раскручиваться. Затем вам понадобится команда для их раскрутки, например, когда hdparm отключает PUIS, он раскручивает диск. Посмотрите на эту ссылку.

Это все, что я знаю о PUIS.

Редактировать: Я только что заметил, что ваш диск раскручивается перед экраном Grub: это означает, что материнская плата раскручивает диск. Вы можете попробовать отключить соответствующий порт sata в вашей конфигурации BIOS/UEFI, если это позволяет, и попробуйте снова. Если он работает, диск будет оставаться неподвижным до тех пор, пока ядро ​​его не раскрутит, после экрана grub и до приглашения пользователя войти в систему, и вы можете найти его в 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)

На этом этапе, если вы взломаете ядро, диск не будет вращаться вообще, как я описал ранее.

Редактировать 2: я нашел лучшую команду, чтобы раскрутить диск:

sg_sat_set_features --feature=7 /dev/sdX

он является частью пакета sg3_utils, требует привилегий root, но хорошо раскручивает диск. Сообщение обновлено на форуме Arch Linux, это мое окончательное решение на данный момент. Небольшое резюме этого поста:

  • если ваш диск с поддержкой PUIS раскручивается перед экраном загрузчика, попробуйте отключить соответствующий порт sata или попробуйте карту контроллера PCI-ex sata
  • перекомпилировать ядро, чтобы отключить команду, которая раскручивает диски в состоянии PUIS
  • используйте sg_sat_set_feature, чтобы раскрутить диск
  • повторно сканировать порт SATA, чтобы получить доступ к разделам
Другие вопросы по тегам