SSD-Probleme

Samsung SSD 990 pro 2TB: Plötzlich meldete er dauerhaft eine Temperatur von etwa 83 Grad. Offenbar ging das anderen auch so, es gab einen Firmware-Update. Seitdem verschwindet diese SSD sporadisch und taucht erst wieder auf, wenn der Strom abgetrennt wird. Kann kein Muster erkennen. Ich glaube aber, dass ich in diesem Rechner vor 2-3 Jahren schon solche Probleme hatte, Lösung war eine neue SSD.

Aber ich habe ja noch eine von Intel auch mit 2TB, und das Motherboard hat zwei Steckplätze. Also mal tauschen. Am Steckplatz liegt es nicht. Vielleicht wieder am Stick?

Nun habe ich die Samsung-SSD auf die Intel-SSD kopiert – erst mit dd, dann mit rsync. Die von Intel ist etwas kleiner, in der Gegenrichtung wäre es etwas aufwändiger gewesen. Natürlich dabei möglichst alles Laufende ausgeschaltet, weil das mit der laufenden Samsung lief. Besser: mit USB-Stick booten und die Kopie von dort starten.

Aber wie bringe ich nun den Booter dazu, alles von der Intel-SSD zu nehmen? Nur im BIOS die Boot-Priorität ändern reicht nicht. Das läuft alles über die UUID der Dateisysteme, die sind ja nun identisch. Auch beim Booten ab Intel-SSD werden die Dateisysteme von der Samsung-SSD genommen.

Also erstmal auf der Intel-SSD andere UUID setzen für ext4, swap, vfat. Drei verschiedene Methoden …

Dann habe ich einen Script geschrieben, der diese drei UUID zwischen den beiden SSD tauscht. Den von einem USB-Life-System ausgeführt. Problem gelöst, wie man mit lsblk -f  einfach sehen kann.

#!/bin/bash

echo swapping all UUIDS between my 2T SSDs, so the same grub/fstab uses the other disk

set -e

cd /dev

list() {
    lsblk  --list -o FSTYPE,NAME,FSTYPE,UUID | grep nvme |sort
}

set - $(list | grep -e '^   ')
test $# -ne 2 && {
    echo muss genau 2 SSDs haben, habe aber: $*
    exit 2
}

change_vfat_uuid() {
    fs=$2
    echo changing vfat on $fs to $1
    new_hex=$(printf "\x${1:7:2}\x${1:5:2}\x${1:2:2}\x${1:0:2}")
    echo "$new_hex" | dd bs=1 seek=67 count=4 conv=notrunc of=$fs
}

change_ext4_uuid() {
    uuid=$1
    fs=$2
    fsck.ext4 -f $fs
    tune2fs -U $uuid $fs

}

xchange_uuids() {
    left=$1
    right=$2
    partition=$3
    fstype=$4
    left_fs=$(list | grep -w $fstype | grep $left$partition | sed s/$fstype//g)
    right_fs=$(list | grep -w $fstype | grep $right$partition | sed s/$fstype//g)
    set - $(echo $left_fs $right_fs)
    test $fstype == ext4 && {
        change_ext4_uuid $4 $1
        change_ext4_uuid $2 $3
        return
    }
    test $fstype == swap && {
        swaplabel --uuid $4 $1
        swaplabel --uuid $2 $3
        return
    }
    test $fstype == vfat && {
        change_vfat_uuid $4 $1
        change_vfat_uuid $2 $3
        return
    }
}

echo alt:
list

xchange_uuids $1 $2 p1 vfat
xchange_uuids $1 $2 p2 swap
xchange_uuids $1 $2 p3 ext4

sync

echo neu:
list