Sur une nouvelle installation d'Ubuntu 14.04, j'obtiens ce message d'erreur pendant le démarrage.
le lecteur de disque pour /dev/mapper/cryptswap1 n'est pas encore prêt ou n'est pas présent
et la partition swap n'est jamais activée. De mes recherches jusqu'à présent, j'ai trouvé :
- Il s'agit d'un problème répandu, qui affecte probablement toutes les installations Ubuntu 14.04 sur lesquelles l'échange crypté a été activé.
- Une partie du problème est un bogue facile à corriger qui fait que l'en-tête d'échange chiffré (généré pendant le démarrage) écrase l'en-tête d'échange non chiffré, ce qui rend impossible la recherche de la bonne partition lors du démarrage suivant.
- Toutes les solutions proposées pour le faire fonctionner semblent n'être que des solutions de contournement qui se résument à : 1. Désactiver le swap en le définissant comme noauto dans fstab. 2. Créer un fichier /etc/rc.local (ou définir votre propre service à activer au démarrage), qui active la partition d'échange.
Est-il possible d'utiliser un swap crypté sur Ubuntu 14.04 sans utiliser cette sorte de hack ? Je suis parfaitement à l'aise avec la mise à jour de tous les paquets installés et la correction de ces fichiers de configuration, qui ont été initialisés avec un contenu incorrect en raison d'un bug d'installation scripts. Je préfère éviter d'avoir à utiliser mon propre scripts pour activer le swap, car ce genre d'approche a tendance à se casser lorsque les paquets sont mis à jour.
C'est ce que mon /etc/crypttab
ressemble :
cryptswap1 /dev/sda6 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,offset=16
Et la ligne pertinente de mon /etc/fstab
est :
/dev/mapper/cryptswap1 none swap sw 0 0
Ce que j'ai essayé jusqu'à présent :
J'ai trouvé message le lecteur de disque pour /dev/mapper/cryptswap1 n'est pas encore prêt ou n'est pas présent même après avoir essayé diverses options en demandant ce qui pourrait être le même scénario.
Mais la seule réponse est de suggérer l'utilisation d'un swap non crypté.
J'ai trouvé http://ubuntuforums.org/showthread.php?t=2200995 qui prétend avoir une solution, mais cette solution n'a aucun sens pour moi.
La première partie de la solution proposée consiste à réécrire l'en-tête de swap chiffré en utilisant mkswap. Cependant, comme cet en-tête est crypté avec une clé qui n'est pas persistante lors des redémarrages, cette étape n'aidera pas à faire fonctionner l'échange après le prochain redémarrage.
Il suggère également des mises à jour de /etc/fstab, mais il semble que mon fstab soit déjà correctement configuré.
Le post suppose LVM, que je n'utilise pas. Je ne suis pas au courant d'un moyen qui pourrait faire la différence.
J'ai trouvé https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/1310058 ce qui m'a aidé à comprendre le problème de l'en-tête de swap qui est écrasé et que l'ajout de offset
a crypttab
et en régénérant l'en-tête de swap non crypté, peut résoudre ce problème.
Cependant, l'en-tête écrasé n'est pas le seul problème en jeu, il y a un autre problème, que je ne comprends pas encore complètement.
J'ai découvert d'autres choses sur ce problème :
De la lecture /lib/cryptsetup/cryptdisks.functions
J'ai appris que lors du démarrage, le périphérique est censé être créé en utilisant le nom cryptswap1_unformatted
alors l'en-tête de swap crypté doit être écrit, et le périphérique doit être renommé en tant que cryptswap1
. Dans le journal du noyau, je trouve ce message d'erreur :
[ 39.419429] device-mapper: ioctl: Unable to change name on mapped device cryptswap1_unformatted to one that already exists: cryptswap1
Curieusement, le résultat est que l'appareil finit par porter le nom de cryptswap1
mais le swap
La tête n'a jamais été écrite.
Swap fonctionne pendant les démarrages où une vérification du système de fichiers a été effectuée. Ce n'est que lorsqu'aucune vérification du système de fichiers n'est effectuée que j'obtiens le redoutable message suivant cryptswap1 is not ready yet
erreur.
En /var/log/upstart/cryptdisks.log
Je trouve le message d'erreur
Device cryptswap1_unformatted already exists.
Cependant, en ajoutant une journalisation supplémentaire à /lib/cryptsetup/cryptdisks.functions
J'ai appris qu'il y a une course entre /etc/init.d/cryptdisks-early
y /etc/init/cryptdisks.conf
. Toute journalisation que j'ajoute à cryptdisks.functions
peut influencer la façon dont les actions des deux scripts sont entrelacées, et occasionnellement, cela finit par fonctionner.
Il est clair que les deux ne sont pas censés gérer le même périphérique en parallèle. Comment puis-je obtenir que les deux scripts soient sérialisés, de telle sorte que le swap fonctionne à chaque démarrage ?