Безопасно ли крутить жесткий диск вручную с помощью hdparm?

6876
Shane

У меня есть ноутбук с ssd для основного диска ОС и большой вращающийся диск для хранения. В настоящее время у меня есть псевдоним, который я использую для ручного раскручивания диска, когда я его не использую (конечно, после отключения):

sudo hdparm -y /dev/disk/by-id/ata-WDC_WD7500BPKX-80HPJT0_WD-WX31AB3N6985 

Это безопасно для использования? Будет ли hdparmотказаться от этого, если диск еще синхронизировать или, если я забуду размонтировать? Если нет, есть ли способ использовать hdparm(или другой утилиты), чтобы проверить, безопасно ли это делать?


ОБНОВИТЬ --

Насколько я ценю оба ваших ответа, они мне совсем не помогают, потому что я пробовал бесчисленное множество различных комбинаций значений для параметров APM и времени замедления, без каких-либо результатов, кроме как а) менее чем за 10 секунд до замедление б) нет замедления, но случайная парковка, или в) нет замедления или парковки. Я также пытался найти в Интернете мою конкретную модель привода и соответствующие значения APM, но безрезультатно.

Итак, я хотел бы пойти в следующем направлении: мне нужно найти способ проверить, используется ли диск, чтобы я мог написать сервис systemd. Самое близкое, к чему я могу прийти, - это lsof | grep /mnt/dataкакая-то ерунда. Но, как вы можете видеть, это далеко не идеально. Я хотел бы получить метод достижения этого, который не зависит от заранее определенной точки монтирования или жадных множественных вызовов процессора lsof + D mntpoint в ответе, который я сам дал.

Посмотрите мой ответ ниже, чтобы понять, что я пытаюсь сделать.

2
Я просто использую опцию `-S`, чтобы установить короткий тайм-аут, чтобы устройство самостоятельно решало, когда вращаться. Nattgew 9 лет назад 1
Хм .. Я пытался установить короткий тайм-аут, и он слишком короткий, на мой вкус (я не хочу быстро изнашивать диск). С тех пор я связывался с WD (моим производителем накопителей), и они сказали мне, что только их диски корпоративного класса поддерживают подобные функции. Shane 9 лет назад 0
@Shane: хорошо, если оно слишком короткое, вы можете увеличить время ожидания, пока оно не будет, верно? Peque 9 лет назад 0

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

3
Otheus

У вас есть псевдоним! Может быть, лучше иметь скрипт, который выполняет синхронизацию / размонтирование, а затем вызывает hdparm. Добавьте скрипт в файл sudoers.

cat >/usr/local/sbin/spindown disk=/dev/disk/by-uuid/c542a956-fbfe-42f7-ac8f-44c029a35a69 sync && unmount /bigdisk/volume && hdparam -y $disk 

&& обеспечивает успешное завершение предыдущей команды, прежде чем пытаться выполнить следующую.

Тогда добавьте к sudoers. Это может сработать:

cat >/etc/sudoers.d/spindown <<EOF ALL ALL=(ALL) NOPASSWD:/usr/local/sbin/spindown EOF 

DanielB сделал блестящее предложение: используйте autofs для автоматического монтирования / размонтирования локального диска (я никогда не думал об использовании его таким образом, так как я обычно работаю на серверах и так как autofs традиционно был для NFS). Затем, когда это настроено (не спрашивайте меня, как;)), добавьте что-то вроде этого в cronjob:

cat >/etc/cron.d/spindown << EOF * * * * * hdparm -C | grep -q -E "idle|active" DISK-DEV && grep -q MOUNTPOINT /etc/mtab && hdparm -y DISK-DEV EOF 

Обязательно замените DISK-DEV и MOUNTPOINT (если Disk-dev имеет 0 или 1 раздел, вы можете использовать его для MOUNTPOINT). Обратите внимание: на самом деле я не могу проверить это, поскольку единственная физическая система, к которой у меня есть доступ к АТМ, - это устройство RAID, и контроллер не поддерживает эти команды.

Всегда отключать диск не очень удобно, вы можете обойти это с помощью `autofs`. Daniel B 9 лет назад 2
Это отличная идея, @DanielB! Так что получите autofs для запуска размонтирования, а затем позвольте hdparm делать свою работу автоматически! Otheus 9 лет назад 0
3
Daniel B

Instead of manually trying to figure this out, rely on existing stuff. I use hd-idle on my file server, it works great. I also don’t unmount my drives because there’s really no reason to do so. If I want to access a file, the disks will spin up. Then, after the timeout passes, they’ll spin down again.

If you’re super paranoid about data integrity, you can use autofs, which can automatically mount and umount your filesystems on an as-needed basis. I haven’t used it myself, but the ArchWiki page offers some info that looks quite usable.

Спасибо чувак. HD-холостой ход - это как раз то, что я искал. И я использовал autofs, не знаю, почему мне не пришло в голову использовать это с легким демоном, который вращает размонтированные диски. Shane 9 лет назад 0
Одной из причин отключения дисков вручную является режим сна / возобновления на ноутбуке. Я ищу способ не допустить раскрутки жесткого диска при выходе из спящего режима, например, если он не установлен. Даже если он не смонтирован и я вручную перевел его в режим сна с помощью hdparm, он все равно просыпается при возобновлении работы из режима сна. Michael 6 лет назад 0
@Michael Когда ваш ноутбук находится в режиме ожидания, диск полностью выключен. Он должен раскручиваться, чтобы его можно было снова обнаружить. Обойти это невозможно. Daniel B 6 лет назад 0
1
Peque

Note

You don't need to umount the partitions in order to spin down the hard drive. It will be easier if you just set a standby timeout (that will trigger after some time not being used). This way, when needed, the disk will awake (spin-up) and you'll be able to use it straight away without the need to remount the partitions.

Command-line solution

As @Nattgew has suggested on a comment, use hdparm (if that's the tool you like to use) with the -S option to set a standby timeout:

-S Set standby (spindown) timeout 

This way the disk will automatically spin down when there's no activity.

In order to make this change permanent (i.e. after reboot), you may need to make changes to /etc/hdparm.conf. Or maybe, as your distribution is likely nowadays using systemd, you may need to create a unit:

https://unix.stackexchange.com/a/89013/66295

Probably the easiest way would be to use a graphical tool... (yeah, sometimes, when you already have a graphical interface enabled in your system, it is the fastest way)

GUI solution (GNOME)

As you are saying you are using your laptop, I assume you actually have a graphical interface. With GNOME distributions, there's a program named "Disks":

enter image description here

Once you select the hard drive you want to put in standby mode, you can click on "Drive settings" from the menu (or CTRL + E may be a shortcut as well):

enter image description here

Then change the standby timeout settings:

enter image description here

Обратите внимание, что настройка APM (которую устанавливает `hdparm`) не работает должным образом на многих дисках, приводя к падению диска через секунды, а не минуты или часы. Это может разрушить ваш жесткий диск. Daniel B 9 лет назад 0
1
Shane

Вот мой взлом сценария до сих пор. Я буду держать это открытым, пока кто-нибудь не найдет лучшее решение ...

#!/bin/bash  # for each disk specified as disk # if disk is active/idle # disk in use as inuse = false # for each mount point as mntpoint accociated with it # if (lsof | grep mntpoint) # inuse = true # break # endif # endfor # if inuse # spin down disk # endif # endif # endfor  DISKS_LEN=1 DISKS[1]=ata-WDC_WD7500BPKX-80HPJT0_WD-WX31AB3N6985  spindown_disk() { (sync $1 && sudo hdparm -y /dev/$1 >/dev/null) & }  diskArr_len=0 for i in `seq $DISKS_LEN`; do linkpath=$(readlink /dev/disk/by-id/$) ((diskArr_len+=1)) diskArr[$i]=$ done  for i in `seq $diskArr_len`; do disk=$ if (sudo hdparm -C /dev/$disk | grep -B1 'active/idle'); then inuse=false mntpoints="$(mktemp)" mount \ | grep "^/dev/$disk[0-9]" \ | sed -r "s|^/dev/$disk[0-9] on (.*) type.*$|\1|" \ >"$mntpoints" while read mntpoint; do while read openfile; do [ $inuse = false ] && echo open files: echo $'\t'/$ inuse=true done < <(lsof | grep "$mntpoint") done <"$mntpoints" rm -f "$mntpoints" if [ "$inuse" = true ]; then echo $disk is in use else echo spinning down $disk \(after sync\) spindown_disk $disk fi else echo $disk is already inactive fi done  exit 0 

Мне все еще придется выяснить, как обернуть это в службу systemd, которая запускается каждые X минут. Очевидно, было бы лучше, если бы была альтернатива использованию lsof и grep. Кроме того, я не уверен, что это будет работать с забавными символами точки монтирования из-за использования grep. Кроме того, его необходимо будет пересмотреть, если у вас более 9 разделов.

Пожалуйста, если у вас есть какие-либо предложения, не стесняйтесь.

Какой дистрибутив GNU / Linux вы используете? Какой рабочий стол? Почему вы не используете опцию `-S` (режим ожидания, когда неактивен)? Peque 9 лет назад 0
не имеет значения, какой дистрибутив Linux я использую. Пока hdparm устанавливает регистры диска, диск должен уважать их. Я могу подтвердить, что это так, поскольку я пробовал много разных комбинаций значений, передаваемых с -S и -B (проверьте мой вопрос, отредактированный выше). Если вы все еще не уверены, на моей машине установлено несколько разных дистрибутивов с одинаковыми результатами Shane 9 лет назад 0
Ну, я думаю, что так и есть. То, чего вы хотите достичь, может быть проще с графическим интерфейсом, а не с определенно неоптимальным сценарием, который вы планируете выполнять каждые X минут ... Peque 9 лет назад 0
А) Как вы думаете, что GUI использует в качестве бэкэнда? Б) Я пытался сделать это с помощью gnome-дисков, прежде чем запутаться с вызовом hdparm из оболочки Shane 9 лет назад 0
А) Я не знаю, и я думаю, что вы тоже. ;-) B) Вы нашли эту опцию «ожидания в режиме ожидания» (в моем ответе есть скриншот). Это не сработало? Peque 9 лет назад 0
@Peque Я действительно ценю вашу попытку ответить на мой вопрос, со скриншотами и всем Shane 9 лет назад 0
Итак, вы нашли эту опцию «ожидания в режиме ожидания»? (в моем ответе есть скриншот). Это не сработало? Он не вращал диск, когда неактивен? или тайм-аут не сработал, как ожидалось? Peque 9 лет назад 0

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