mint-image: Boot-Medium-Platte von Zielplatten-Erkennung ausschliessen

Auf echter USB-Stick-Hardware (anders als in bisherigen QEMU-Tests mit
CD-ROM-Boot-Medium) enumeriert das Boot-Medium selbst als "disk"-Typ,
genau wie die interne Zielplatte - _mint_image_detect_target_disk()
konnte deshalb den eigenen Stick waehlen, dessen Partitionierung dann
immer mit dem "unable to inform the Kernel of the change"-Fehler
scheitert (man kann die Platte nicht partitionieren, von der man lebt).

_mint_image_boot_medium_disk() findet das Boot-Medium ueber
findmnt/lsblk (dem Live-Mountpoint /run/live/medium bis zur
Elternplatte folgend) und schliesst es aus der Kandidatenliste aus.

Verifiziert in QEMU: Boot-Medium-ISO absichtlich als device='disk' auf
hda (vor dem eigentlichen Ziel-qcow2 auf hdb) angehaengt, um die reale
Aufzaehlungsreihenfolge einer USB-Stick-Installation nachzustellen -
ohne diesen Fix waere hda (das Boot-Medium) gewaehlt worden. Mit dem
Fix: "Zieldatentraeger: /dev/sdb", Partitionierung/Formatierung ohne
Fehler, komplette Golden-Image-Bereitstellung durchgelaufen, Reboot in
den echten Linux-Mint-Cinnamon-Login-Bildschirm bestaetigt (Hostname
"debian", Login "tuxflotte", deutsches Tastaturlayout).
This commit is contained in:
Thomas Stallinger 2026-09-01 13:29:45 +02:00
parent 5b9d3fdf6a
commit fa54461cae
2 changed files with 60 additions and 2 deletions

View File

@ -52,14 +52,43 @@ backend_fatal() {
return 1 return 1
} }
# Live auf echter USB-Stick-Hardware gefunden (01.09.2026): auf einem
# CD-ROM (wie in allen bisherigen QEMU-Tests) ist das Boot-Medium ein
# eigener Geraetetyp ("rom"), der von der lsblk-Filterung unten schon
# ausgeschlossen wird - auf einem echten USB-Stick ist das Boot-Medium
# selbst aber ein ganz normales "disk"-Blockgeraet, genau wie die interne
# Zielplatte. Ohne Ausschluss kann die Erkennung darunter den Stick selbst
# waehlen (abhaengig von der Aufzaehlungsreihenfolge) - "parted mklabel"
# darauf schlaegt dann IMMER fehl ("...have been unable to inform the
# Kernel of the change, probably because it/they are in use"), weil man
# nicht die Platte partitionieren kann, von der man gerade lebt. Der
# vorherige Fix (Zielplatte freigeben + Neueinlesen wiederholen) half
# deshalb nicht - das war die falsche Diagnose fuer dieses Problem.
_mint_image_boot_medium_disk() {
local medium_source parent
medium_source="$(findmnt --noheadings --output SOURCE /run/live/medium 2>/dev/null)" || return 1
[[ -n "${medium_source}" ]] || return 1
parent="$(lsblk --noheadings --output PKNAME "${medium_source}" 2>/dev/null | head -n1)"
[[ -n "${parent}" ]] || return 1
printf '/dev/%s\n' "${parent}"
}
# Analog zu _tuxflotte_detect_target_disk() in backends/mint/backend.sh - # Analog zu _tuxflotte_detect_target_disk() in backends/mint/backend.sh -
# bewusst hier dupliziert statt geteilt, um dieses Backend unabhaengig vom # bewusst hier dupliziert statt geteilt, um dieses Backend unabhaengig vom
# Mint-Referenzbackend zu halten (siehe Modul-Kommentar oben). Ein Umzug in # Mint-Referenzbackend zu halten (siehe Modul-Kommentar oben). Ein Umzug in
# eine gemeinsame lib waere ein sinnvolles spaeteres Aufraeumen, sobald # eine gemeinsame lib waere ein sinnvolles spaeteres Aufraeumen, sobald
# mehr als zwei Backends dieselbe Logik brauchen. # mehr als zwei Backends dieselbe Logik brauchen.
_mint_image_detect_target_disk() { _mint_image_detect_target_disk() {
local boot_medium_disk
boot_medium_disk="$(_mint_image_boot_medium_disk || true)"
lsblk --nodeps --noheadings --bytes --output NAME,TYPE,SIZE --paths | lsblk --nodeps --noheadings --bytes --output NAME,TYPE,SIZE --paths |
awk '$2 == "disk" && $3 > 0 && $1 !~ /(nbd|zram|loop)[0-9]*$/ { print $1; exit }' awk -v exclude="${boot_medium_disk}" '
$2 == "disk" && $3 > 0 && $1 !~ /(nbd|zram|loop)[0-9]*$/ && $1 != exclude { print $1; exit }
'
} }
backend_init() { backend_init() {

View File

@ -52,14 +52,43 @@ backend_fatal() {
return 1 return 1
} }
# Live auf echter USB-Stick-Hardware gefunden (01.09.2026): auf einem
# CD-ROM (wie in allen bisherigen QEMU-Tests) ist das Boot-Medium ein
# eigener Geraetetyp ("rom"), der von der lsblk-Filterung unten schon
# ausgeschlossen wird - auf einem echten USB-Stick ist das Boot-Medium
# selbst aber ein ganz normales "disk"-Blockgeraet, genau wie die interne
# Zielplatte. Ohne Ausschluss kann die Erkennung darunter den Stick selbst
# waehlen (abhaengig von der Aufzaehlungsreihenfolge) - "parted mklabel"
# darauf schlaegt dann IMMER fehl ("...have been unable to inform the
# Kernel of the change, probably because it/they are in use"), weil man
# nicht die Platte partitionieren kann, von der man gerade lebt. Der
# vorherige Fix (Zielplatte freigeben + Neueinlesen wiederholen) half
# deshalb nicht - das war die falsche Diagnose fuer dieses Problem.
_mint_image_boot_medium_disk() {
local medium_source parent
medium_source="$(findmnt --noheadings --output SOURCE /run/live/medium 2>/dev/null)" || return 1
[[ -n "${medium_source}" ]] || return 1
parent="$(lsblk --noheadings --output PKNAME "${medium_source}" 2>/dev/null | head -n1)"
[[ -n "${parent}" ]] || return 1
printf '/dev/%s\n' "${parent}"
}
# Analog zu _tuxflotte_detect_target_disk() in backends/mint/backend.sh - # Analog zu _tuxflotte_detect_target_disk() in backends/mint/backend.sh -
# bewusst hier dupliziert statt geteilt, um dieses Backend unabhaengig vom # bewusst hier dupliziert statt geteilt, um dieses Backend unabhaengig vom
# Mint-Referenzbackend zu halten (siehe Modul-Kommentar oben). Ein Umzug in # Mint-Referenzbackend zu halten (siehe Modul-Kommentar oben). Ein Umzug in
# eine gemeinsame lib waere ein sinnvolles spaeteres Aufraeumen, sobald # eine gemeinsame lib waere ein sinnvolles spaeteres Aufraeumen, sobald
# mehr als zwei Backends dieselbe Logik brauchen. # mehr als zwei Backends dieselbe Logik brauchen.
_mint_image_detect_target_disk() { _mint_image_detect_target_disk() {
local boot_medium_disk
boot_medium_disk="$(_mint_image_boot_medium_disk || true)"
lsblk --nodeps --noheadings --bytes --output NAME,TYPE,SIZE --paths | lsblk --nodeps --noheadings --bytes --output NAME,TYPE,SIZE --paths |
awk '$2 == "disk" && $3 > 0 && $1 !~ /(nbd|zram|loop)[0-9]*$/ { print $1; exit }' awk -v exclude="${boot_medium_disk}" '
$2 == "disk" && $3 > 0 && $1 !~ /(nbd|zram|loop)[0-9]*$/ && $1 != exclude { print $1; exit }
'
} }
backend_init() { backend_init() {