Ich hatte das selbe Problem mit einem per ecryptfs-setup-swap erstellten Swap (wenn man bei der Installation von Ubuntu die Verschlüsselung des Home-Verzeichnisses aktiviert hat).
Standardmäßig wird die Partition in /etc/crypttab über die UUID der Swap-Partition identifiziert. Das funktioniert allerdings nur einmalig nach der Installation, weil cryptsetup den Header der ursprünglichen Swap-Partition überschreibt. So sieht /etc/crypttab nach der Installation von Ubuntu aus:
cryptswap1 UUID=00000000-0000-0000-0000-000000000000 /dev/urandom swap,cipher=aes-cbc-essiv:sha256
Die UUID ist individuell und ist hier nur als Platzhalter gedacht.
Als Lösung fügt man dem Eintrag in /etc/crypttab als Parameter offset=8 hinzu:
cryptswap1 UUID=00000000-0000-0000-0000-000000000000 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,offset=8
Damit wird das überschreiben des Headers verhindert. Da er jetzt aber schon überschrieben ist, muss man ihn erstmal neu anlegen, dazu folgenden Befehl im Terminal ausführen und den Platzhalter für die UUID ersetzten und ggf. die Partition /dev/sda5 durch die tatsächliche Swap-Partition ersetzten.
sudo mkswap --uuid 00000000-0000-0000-0000-000000000000 /dev/sda5
Ab hier, hat das Erstellen des verschlüsselten Volumes beim Booten schon mal zuverlässig funktioniert, allerdings hat cryptsetup das Volume nur manchmal auch als Swap initialisiert (scheinbar irgendeine Race Condition).
Abhilfe hat das hinzufügen des Parameters noearly zum Eintrag in /etc/crypttab geschaffen (wie im cryptsetup-FAQ empfohlen wird):
cryptswap1 UUID=00000000-0000-0000-0000-000000000000 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,offset=8,noearly
Zum Abschluss noch einmal im Terminal folgendes ausführen und alles sollte funktionieren:
sudo update-initramfs -u -k all