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:
co-authored by
Claude Opus 5
parent
2c85011a08
commit
f44ad0e34a
+57
-1
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user