Transfer-Laufwerke: Engine und Werkzeugpruefung im Installer

Benannte, dauerhafte Austauschmedien zwischen Host und Gast - Abbilddateien
unter /var/lib/pvesnap/transfer, die zu keinem Gast gehoeren und jede
Wiederherstellung ueberleben.

Zwei Entwurfsentscheidungen, beide am Host geprueft:

  Datei statt Proxmox-Volume. Ein Volume wuerde beim Entfernen der Maschine
  mitgeloescht, auch aus der Weboberflaeche heraus - die vorbereitete
  Werkzeugsammlung waere weg. Pfade ueberspringt destroy_vm ausdruecklich
  ("return if $volid =~ m|^/|"). Nachgestellt: VM mit --purge entfernt, das
  Abbild lebte samt Inhalt weiter.

  Loop-Geraet statt direktem Pfad. Eine Abbilddatei als scsi3 einzutragen
  lehnt Proxmox ab ("unable to associate path to any storage"), /dev/... wird
  dagegen durchgereicht. Ueber losetup -P bekommt der Gast eine Platte mit
  Partitionstabelle - ohne die zeigt Windows nur "nicht initialisiert".

Verriegelung, am laufenden System geprueft: ein Laufwerk ist entweder am Host
eingehaengt oder an einem Gast, nie beides. Alle drei Wege wurden abgelehnt -
anhaengen waehrend Host-Mount, Host-Mount waehrend angehaengt, loeschen
waehrend in Benutzung. Der Gast-Zustand wird aus den Konfigurationsdateien
gelesen, gilt also auch fuer gestoppte Maschinen.

Installer: parted und exfatprogs werden bei Bedarf nachinstalliert
(--no-install-deps schaltet das ab). ntfs-3g bewusst nicht - apt entfernt
dafuer 'fuse', an dem pve-cluster (/etc/pve) und ceph-fuse haengen. Dazu gibt
es nur einen Hinweis samt Begruendung; fuer Windows ist exFAT ohnehin die
einfachere Wahl.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
duffyduck
2026-07-31 20:24:22 +02:00
co-authored by Claude Opus 5
parent 2c85011a08
commit f44ad0e34a
2 changed files with 680 additions and 1 deletions
+57 -1
View File
@@ -11,6 +11,8 @@
# --bind <adresse> Adresse, auf der sie lauscht
# (Vorgabe: 0.0.0.0 = alle)
# --no-start installieren, aber Dienste nicht starten
# --no-install-deps fehlende Werkzeuge (parted, exfatprogs) nicht
# nachinstallieren
# --force auch ohne erkanntes Proxmox VE installieren
# -h, --help diese Hilfe
#
@@ -37,6 +39,7 @@ SRC="$(cd "$(dirname "$0")" && pwd)"
START=1
FORCE=0
DEPS=1
WEB=0
WEB_PORT=""
WEB_BIND="0.0.0.0"
@@ -48,8 +51,9 @@ while [ $# -gt 0 ]; do
--bind) WEB_BIND="${2:-}"; shift ;;
--bind=*) WEB_BIND="${1#*=}" ;;
--no-start) START=0 ;;
--no-install-deps) DEPS=0 ;;
--force) FORCE=1 ;;
-h|--help) sed -n '2,24p' "$0" | sed 's/^#[[:space:]]\{0,1\}//'; exit 0 ;;
-h|--help) sed -n '2,27p' "$0" | sed 's/^#[[:space:]]\{0,1\}//'; exit 0 ;;
*) echo "Unbekannte Option: $1" >&2
echo "Hilfe mit: $0 --help" >&2; exit 1 ;;
esac
@@ -108,6 +112,58 @@ fi
command -v systemctl >/dev/null 2>&1 || fail "systemd wird benoetigt."
[ -d "${SRC}/pvesnap" ] || fail "Verzeichnis 'pvesnap' nicht gefunden (Aufruf aus dem Projektordner?)."
# --- Werkzeuge fuer Transfer-Laufwerke -------------------------------------
# Transfer-Laufwerke sind Abbilddateien, die auf dem Host formatiert und
# eingehaengt werden. Dafuer braucht es eine Partitionstabelle (parted) und
# einen Formatierer je Dateisystem.
have_tool() {
command -v "$1" >/dev/null 2>&1 && return 0
for d in /usr/local/sbin /usr/sbin /sbin; do
[ -x "$d/$1" ] && return 0
done
return 1
}
if [ "$DEPS" -eq 1 ]; then
MISSING=""
have_tool parted || MISSING="${MISSING} parted"
have_tool mkfs.exfat || MISSING="${MISSING} exfatprogs"
if [ -n "$MISSING" ]; then
info "Fehlende Werkzeuge fuer Transfer-Laufwerke:${MISSING}"
if command -v apt-get >/dev/null 2>&1; then
info "Installiere:${MISSING}"
# shellcheck disable=SC2086
if DEBIAN_FRONTEND=noninteractive apt-get install -y ${MISSING}; then
info "Werkzeuge installiert"
else
warn "Installation fehlgeschlagen - Transfer-Laufwerke lassen sich"
warn "dann nur mit den vorhandenen Dateisystemen anlegen."
fi
else
warn "apt-get nicht gefunden - bitte von Hand:${MISSING}"
fi
fi
# NTFS bewusst NICHT automatisch: apt entfernt dafuer 'fuse', und daran
# haengen pve-cluster (/etc/pve) und ceph-fuse. Auf einem laufenden Node
# ist das kein Schritt, den ein Installer ungefragt gehen darf.
if ! have_tool mkfs.ntfs; then
cat <<'EOF'
Hinweis: NTFS-Transfer-Laufwerke lassen sich hier nicht anlegen, es fehlt
mkfs.ntfs aus dem Paket ntfs-3g. Die Installation wuerde 'fuse' entfernen,
an dem pve-cluster (/etc/pve) und ceph-fuse haengen - deshalb macht dieses
Skript das nicht von selbst.
Fuer Windows-Gaeste ist exFAT die einfachere Wahl (bereits eingerichtet).
Wer wirklich NTFS braucht: apt install ntfs-3g - vorher Cluster pruefen.
Lesen kann der Host NTFS ohnehin, ueber den ntfs3-Treiber im Kernel.
EOF
fi
fi
# --- Programm ---------------------------------------------------------
info "Installiere Programm nach ${LIB_DIR}"
rm -rf "${LIB_DIR}/pvesnap"