Cache SSD pour minimiser le temps de rotation du disque dur?


8

première version courte : je recherche un logiciel compatible Linux capable de mettre en cache de manière transparente les écritures du disque dur à l'aide d'un SSD. Cependant, je ne veux faire tourner le disque dur qu'une ou deux fois par jour (pour écrire les données mises en cache sur le disque dur). Le reste du temps, le disque dur ne devrait pas tourner en raison de problèmes de bruit.

Maintenant, la version plus longue : j'ai construit un ordinateur complètement silencieux exécutant Xubuntu. Il a un APU A10-6700T, un énorme refroidisseur sans ventilateur, un bloc d'alimentation sans ventilateur, un SSD. Le problème est: il a également (et a besoin) un disque dur bruyant et je veux interdire de le faire tourner pendant la nuit. Toutes les écritures doivent être mises en cache sur le SSD, les lectures ne sont pas nécessaires dans la nuit.

Tout au long de la journée, cet ordinateur télécharge automatiquement environ 5 Go de données qui seront conservées pendant environ un an, ce qui donne une capacité totale de disque nécessaire légèrement inférieure à 2 To. Ces données sont actuellement stockées sur un disque dur bruyant de 3 To qui tourne jour et nuit. Parfois, j'ai besoin d'accéder à certaines données d'il y a plusieurs mois. Cependant, la plupart du temps, je n'aurai besoin que des données des 14 derniers jours, qui tiendraient sur le SSD. Idéalement, j'aimerais une solution transparente (toutes les données sur un système de fichiers) qui met en cache toutes les écritures sur le SSD, n'écrivant sur le disque dur qu'une seule fois par jour. Les lectures seraient servies par le cache si elles étaient encore sur le SSD, sinon le disque dur devrait tourner.

J'ai essayé bcache sans grand succès (en utilisant cache_mode = writeback, writeback_running = 0, writeback_delay = 86400, sequential_cutoff = 0, congested_write_threshold_us = 0 - quelque chose manque?) Et j'ai lu sur ZFS ZIL / L2ARC mais je ne suis pas sûr de pouvoir atteindre mon objectif avec ZFS. Des pointeurs?

Si tout le reste échoue, je vais simplement utiliser certains scripts pour copier automatiquement les fichiers sur le gros disque tout en supprimant les fichiers les plus anciens du SSD.

Edit : Cache est vraiment le mauvais terme pour ce que je voulais. Il semble que la solution initiale prévue ne soit pas possible pour moi pour le moment. Merci à tous ceux qui ont contribué!


1
Pourquoi ne gardez-vous pas juste 14 jours (ou quelle que soit la taille) des données sur le SSD et écrivez un script qui s'exécute une fois par jour et déplace quoi que ce soit de plus ancien vers le disque dur? De cette façon, si vous utilisez quelque chose de moins de 14 jours, vous utiliserez le SSD et le disque dur n'écrira qu'une fois par jour. Si vous aviez besoin de quelque chose de plus ancien, vous devrez accéder au disque dur.
Richard Powell

C'est exactement ce que je vais faire, comme je l'ai suggéré dans la dernière phrase de la question :) L'une des raisons pour lesquelles j'ai posé la question était d'éviter les tracas (certes minimes) d'avoir à tourner et à monter le lecteur manuellement plutôt que de simplement ayant un système de fichiers transparent.
sirprize

Réponses:


3

Ce n'est pas vraiment comment ni pourquoi la mise en cache fonctionne - la mise en cache est censée profiter de la vitesse plus rapide et d'un meilleur accès aléatoire du SSD ou d'une autre mémoire, plutôt que de minimiser les écritures sur le disque dur. La mise en cache est conçue pour maximiser la vitesse, et non pour réduire l'écriture, en ayant un tampon plus petit et plus rapide qui sauvegarde un grand périphérique de stockage lent.

En fait, bcache, qui fait partie du noyau Linux principal, transmettra simplement les écritures séquentielles au disque dur, plutôt que de le passer via le SSD car il n'y a aucun avantage en termes de performances.

ZIL / L2Arc utilise le SSD pour stocker les journaux (dans le cas de ZIL) et les clusters de fichiers couramment utilisés (avec L2Arc). ZIL accélère les écritures synchrones en les stockant jusqu'à ce qu'elles soient toutes prêtes à être écrites. L2Arc stocke les fichiers fréquemment consultés sur un stockage plus rapide. Aucun de ces éléments ne vous permettra de faire ce dont vous avez besoin.

Le lecteur Fusion utilise également un SSD et un disque dur en plaçant de manière transparente les fichiers couramment utilisés sur le SSD pour des lectures plus rapides et des disques durs pour le stockage en vrac des fichiers moins souvent utilisés. Il ne vous permet pas non plus d'utiliser le SSD comme espace de travail et de sauvegarder régulièrement des fichiers sur le lecteur principal.

Ce que vous regardez n'est pas du tout la mise en cache, mais plutôt des sauvegardes périodiques du système sur le disque dur. Je suppose que vous pourriez être en mesure de truquer quelque chose avec Aufs -la première branche sur le disque dur avec des fichiers plus volumineux (donc il faut de la précaution), et une branche sur le SSD, puis exécutez un script qui déplace les fichiers du SSD vers le HDD périodiquement, tout en ayant accès au même endroit. Je n'ai pas encore testé cela, mais contrairement à la mise en cache, le déplacement périodique de fichiers et l'utilisation d'aufs seront probablement exactement ce que vous voulez.

Le moyen le plus simple de trier les fichiers par âge est ls -tr - t trie par heure (du plus récent au plus ancien) et r inverse l'ordre. (Si vous avez une plage spécifique en tête, cela find . -mtime nfonctionne très bien car un nombre spécifique vous donne des fichiers modifiés il y a n jours, -n vous donne des fichiers modifiés au cours des n derniers jours et + n vous donne des fichiers modifiés il y a n jours). Vous pouvez trouver quelques idées sur la façon de l'utiliser ici

Puisque le silence est votre véritable objectif, vous pouvez vérifier si votre lecteur prend en charge le mode silencieux avec hdparm -M /dev/sda- cela devrait produire quelque chose comme acoustic = 254 (128=quiet ... 254=fast), auquel cas vous pouvez rendre votre disque dur plus silencieux avec la commande hdparm -M 128 /dev/sda. Exécutez la commande opposée hdparm -M 1254 /dev/sdalorsque vous avez besoin de plus de vitesse.


Merci pour la contribution, c'est ma réponse préférée pour le moment. Je ne connaissais pas les aufs et je m'y intéresserai.
sirprize

La transparence n'est pas vraiment possible pour un processus groupé comme le vôtre - je peux penser à de nombreuses façons de déclencher un travail de type sauvegarde, mais vous regardez vraiment les scripts, certains sed / awk pour sélectionner les fichiers dont vous avez besoin et le déplacement les fichiers, peut-être avec cron. Je soupçonne à moitié que hdparm seul peut résoudre le problème de `` volume '' de votre disque dur de manière significative, et il vous permettra d'éteindre le lecteur lorsqu'il n'est pas utilisé, ce qui pourrait également être utile.
Journeyman Geek

Merci encore, je vais utiliser certains bash-fu, cron, hdparm, mount et rsync comme suggéré dans la dernière phrase de la question. hdparm -M a aidé à rendre le lecteur un peu plus silencieux, mais je préfère que le disque ne tourne pas du tout pendant la nuit.
sirprize

3

Comme les autres réponses ont traité le problème du point de vue logiciel, j'ai pensé inclure quelques informations sur les solutions matérielles.

L'article Sound Proof your Hard Drive répertorie les options suivantes:

  • Défragmentez votre disque dur
  • Enveloppez le disque dur dans des élastiques pour amortir les vibrations
  • Optez pour un nouveau disque dur: la plupart des disques durs actuels sont équipés de roulements dynamiques et fluides, qui permettent aux plateaux de rester presque silencieux même lorsqu'ils tournent à un rythme très élevé.

Je peux témoigner de ma propre expérience que je ne peux jamais entendre mon nouveau disque dur de 4 To, même lors de la copie de très gros fichiers.

Avec quelques recherches, on peut également trouver des matériaux d'amortissement acoustique pour les disques durs tels que le SilentDrive HD Enclosure & Acoustic Materials ou le NoiseMagic NoVibes III Silent Hard Drive Mounting System . Je ne sais pas où ceux-ci sont vendus, et les élastiques ci-dessus me semblent presque aussi efficaces.

On peut également insonoriser tout l'ordinateur. Quelques exemples de sites Web qui vendent des matériaux d'insonorisation sont Quiet PC USA , AcousticPC ou Dynamat , mais ils sont nombreux.

Certains boîtiers d'ordinateur sont déjà conçus pour un fonctionnement silencieux. Voir par exemple
Six cas à faible bruit axés sur les performances, testés .

Comme dernière remarque, un disque dur bruyant qui claque, clique ou hurle peut être un signe que votre disque dur commence à tomber en panne, alors faites attention.


Merci pour vos commentaires, ayez un vote positif. J'utilise déjà du matériel spécialisé - dans ce cas, du matériel complètement silencieux à l'exception du lecteur. Par «bruit», je fais référence au son normal d'un disque dur sain. Je devrai simplement utiliser cron afin de faire tourner le disque, de le monter, de faire une sauvegarde, de le démonter puis de le faire tourner à nouveau.
sirprize

2

Plusieurs variantes de Puppy Linux sont basées sur Ubuntu mais utilisent Aufs .

Puppy fonctionne entièrement à partir de la RAM, il n'y a pas d'accès au disque dur en fonctionnement normal.

Si vous dites à Puppy que votre disque dur est un lecteur flash, il videra périodiquement le système de fichiers RAM sur le disque plutôt que de façon continue. Cela a été conçu pour réduire l'usure des écritures fréquentes sur les clés USB, mais fonctionne également très bien sur les disques durs.

Comme avec à peu près tout dans Puppy, vous pouvez utiliser une interface graphique pour définir la fréquence à laquelle vous souhaitez que le système de fichiers RAM soit enregistré. En règle générale, ce sera toutes les 10 minutes environ, mais rien n'empêche de le configurer pour un vidage toutes les 720 minutes (12 heures) par exemple.

Puppy Linux Event Manager

Cet extrait de mon menu.lstfichier de chargeur de démarrage Grub4DOS montre le réglage de l' pmediaoption du noyau qui dit qu'il utilise flashdrive au lieu d'un disque dur ...

# menu.lst produced by grub4dosconfig-v1.7.1
#
# 'kernel ... pmedia=ideflash'
#     Treat the HDD as a flashdrive: infrequent writes of filesystem to savefile

title Puppy Lupu 5.2.8 (sda3/puppy528lu) Cached\nUse SWAP; changes to RAM; flush to disk every 10min (fastest)
  find --set-root --ignore-floppies --ignore-cd /puppy528lu/initrd.gz
  kernel /puppy528lu/vmlinuz   psubdir=puppy528lu pmedia=ideflash pfix=copy,fsck
  initrd /puppy528lu/initrd.gz

Une note sur les "variations" de Puppy Linux ...
J'utilise Puppy Linux 5.2.8 "Lupu" qui est basé sur (construit en réduisant) Ubuntu 10.04 Lucid Lynx. Cette version est aussi souvent appelée "Lucid" au lieu de "Lupu" en raison de ses origines. Il existe également des versions basées sur Slackware et certaines autres distributions. Puisque vous utilisez déjà Xubuntu, Puppy Linux Lupu serait le plus familier. Ce serait également beaucoup plus rapide. J'ai utilisé Xubuntu pendant environ un an avant de trouver Puppy.

Il existe également une version beaucoup plus récente basée sur "Ubuntu Precise Pangolin" appelée "Puppy Linux Precise". Il y a des changements majeurs au noyau utilisé dans la nouvelle version qui peuvent ne pas fonctionner correctement avec du matériel plus ancien. Si votre machine est inférieure à 5 ans, vous pourriez être plus satisfait de Precise. Je crois que la technique décrite ci-dessus fonctionnera toujours sur Precise bien que les options exactes, etc. puissent être différentes mais je ne suis pas en mesure de le tester.


0

La solution courte et rapidement implémentable (mais ne répond pas exactement à ce que vous voulez) est: transférer le disque de stockage ailleurs. il peut s'agir d'un serveur de fichiers netowrk chassi (comme l'édition mondiale de WD) ou d'un disque USB3 et vous pouvez l'avoir dans la même pièce que le PC silencieux, ou dans une autre pièce afin d'éviter de l'écouter complètement.

C'est mieux à mon avis, car vous n'utiliserez sûrement le lecteur que lorsque vous souhaitez transférer des données sur le réseau - le système d'exploitation peut effectuer un autre rééquilibrage ou un rééquilibrage de l'arborescence du système de fichiers que vous ne pouvez pas éviter et qui vous dérangerait. . Donc, une pièce différente est un gros plus.

La mise en cache devrait être assez facile - il suffit de sauvegarder les données de la journée sur le disque externe, ce que vous pouvez accomplir en utilisant des solutions comme rsyncou unison.

La solution plus longue n'est pas encore idéale (c'est-à-dire pas d'application unique) mais vous obtiendrez le lecteur dans la même boîte avec le ssd et atteindrez des vitesses plus élevées (mais avez-vous vraiment besoin d'une vitesse plus élevée que le réseau pour seulement 5 Go / jour?):

vous pouvez utiliser smartctlpour définir le temps de rotation de votre disque et conserver ce disque dans un état non monté - pour éviter que le système d'exploitation ne fasse des choses sur le disque. Ensuite, écrivez simplement un script mountet sauvegardez (comme ci-dessus) les données dont vous avez besoin.


Malheureusement, ce sont toutes des choses que je voulais éviter. Merci pour votre temps!
sirprize

0

Vous n'aimerez pas ma réponse, mais vous abusez en fait du terme cache, vous décrivez en fait une solution de sauvegarde. Jetez un œil à rsync ou recherchez d'autres solutions de sauvegarde si vous souhaitez quelque chose de plus complet.


C'est absolument vrai, et c'est ce que j'ai couvert en profondeur dans ma réponse :)
Journeyman Geek
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.