Faites dormir un disque dur et ne vous réveillez qu'en cas de besoin

10

Je veux connecter un autre disque dur à mon ordinateur, que je veux dormir 99% du temps. Je ne l'utilise que pour quelques choses, mais j'ai besoin qu'il soit monté à tout moment.

Pour y parvenir, je voudrais savoir:

  1. Comment enregistrer les processus qui accèdent à un appareil? J'ai besoin de la journalisation pour pouvoir dire ce qui provoque le réveil du disque dur si c'est le cas, donc je peux agir dessus.
  2. Y a-t-il des paramètres de noyau spéciaux que je dois faire pour que l'appareil puisse dormir plus longtemps?
  3. Comment définir les intervalles de veille du disque dur?
Effacé
la source

Réponses:

13

L'intervalle de mise en veille est appelé "APM" (gestion automatique de l'alimentation) et spindown_time. Ceci est contrôlé avec hdparmcomme ceci:

hdparm -B 50 -S 36 /dev/disk/by-label/BACKUP-HDD

Cela fera que votre disque dur s'éteindra sur environ 3 minutes d'inactivité.

kolypto
la source
4

Comme vous êtes sous Linux, vous pouvez utiliser le nouvel fatraceutilitaire, qui enregistre chaque accès aux fichiers et vous indique quel processus est responsable:

https://launchpad.net/fatrace

Plus d'informations ici:

http://www.piware.de/2012/02/fatrace-report-system-wide-file-access-events/

Il utilise l' API linux fanotify ( plus de détails ) disponible depuis le noyau linux 2.6.37.

fatrace n'est pas inclus dans toutes les distributions à partir de juillet 2014 (il est entré récemment dans les tests Debian, il devrait donc être livré avec 'jessie'), mais il est facile à installer à partir des sources.

JosephH
la source
1
Je ne sais pas ce que vous entendez par "la plupart" des distributions. Comme d'habitude, Debian est la dernière distribution à obtenir quelque chose. Je l'ai depuis Fedora depuis un certain temps ...
Michael Hampton
3

http://en.wikipedia.org/wiki/Fuser_%28Unix%29 - fuser est une commande UNIX utilisée pour montrer quels processus utilisent un fichier, un système de fichiers ou un socket spécifié.

http://sourceforge.net/projects/hdparm/ - obtenir / définir les paramètres du lecteur ATA / SATA sous Linux (recherchez l'option -S)

http://sg.danny.cz/sg/sg3_utils.html - Le package sg3_utils contient des utilitaires qui envoient des commandes SCSI aux périphériques. Ainsi que les périphériques sur les transports traditionnellement associés à SCSI (recherchez sg_start)

Maciek Sawicki
la source
Merci pour votre réponse informative! Il semble que l'unité de fusion ne me dise que les processus qui utilisent un fichier, le système de fichiers ou le socket à l'instance d'émission de la commande. Bien que cela soit très utile si un processus fait quelque chose de rapide, comme lister le contenu du répertoire racine du périphérique, je pourrais le manquer même si j'ai un fuser en boucle. S'il y avait quelque chose qui attendrait et consignerait toutes les activités jusqu'à ce que je lui dise d'arrêter, ce serait encore plus utile dans cette situation. En connaissez-vous?
Supprimé
Je suppose que hdparam est ce que j'utiliserai pour configurer le temps d'attente avant de dormir? Et le sg3_utils est juste un outil puissant mais je ne l'utiliserai pas dans ce cas? (Comme je suppose que je n'aurai pas à spécifier manuellement quand le disque dur doit dormir après l'avoir configuré à l'aide de hdparam?)
Supprimé
3

btraceou blktrace(un wrapper de btrace) suivre les E / S des blocs du noyau et peut vous y aider.

anon
la source
2

lsof +D /path/to/mount devrait vous montrer chaque processus qui a un fichier ouvert dans le chemin indiqué.

Teddy
la source
0

J'ai un problème similaire. J'ai un SSD, /dev/sdbavec OS (Linux Mint 18.1 basé sur Ubuntu Xenial) et un disque dur /dev/sda, avec des données que j'utilise de temps en temps. Les deux disques sont cryptés. Les partitions du disque dur ne sont pas montées. Et de toute façon, par périodes de plusieurs minutes, le disque dur se réveille, puis s'endort, puis se réveille à nouveau. Désordre.

Voici une question en double avec une réponse utile , qui suggère auditdde trouver le processus de mauvais comportement.

apt-get install auditd
auditctl -w /dev/sda -p rwa

Ensuite, je force le disque dur à dormir avec hdparm -Y /dev/sda. Attendez ensuite que j'entende le disque dur tourner à nouveau. Exécutez ensuite ausearch -f /dev/sda. Dans mon cas, il affiche des entrées comme les suivantes.

time->Sat Feb 25 12:38:17 2017
type=PROCTITLE msg=audit(1488022697.651:1744): proctitle=2F7573722F6C69622F756469736B73322F756469736B7364002D2D6E6F2D6465627567
type=PATH msg=audit(1488022697.651:1744): item=0 name="/dev/sda" inode=376 dev=00:06 mode=060660 ouid=0 ogid=6 rdev=08:00 nametype=NORMAL
type=CWD msg=audit(1488022697.651:1744):  cwd="/"
type=SYSCALL msg=audit(1488022697.651:1744): arch=c000003e syscall=2 success=yes exit=12 a0=f3fb90 a1=800 a2=7f4745221f64 a3=30 items=1 ppid=1 pid=18520 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pool" exe="/usr/lib/udisks2/udisksd" key=(null)

La partie pertinente est exe = "/ usr / lib / udisks2 / udisksd" . Bien que j'avais aussi smartmontoolsqui smartdétait aussi le coupable. J'ai désinstallé smartmontoolset arrêté le udisk2service avec service udisks2 stop. Après cela, le disque dur dort comme prévu.

Notez que udisks2cela démarrera automatiquement lorsque, par exemple, j'ouvrirai l' application Disks , je dois donc l'arrêter à nouveau. Un autre inconvénient est que les paramètres SMART ne sont pas surveillés pour les deux disques, ce qui n'est pas bon, mais comme solution de contournement, cela convient.

Une autre chose qui n'est pas claire, c'est que ce rapport de bogue indique udisks2qu'il ne fait pas de polling des disques, ce qui est maintenant fait par le noyau. Mais les preuves semblent indiquer le contraire.

saaj
la source