Transfer-Laufwerke: NTFS raus, Partitionstyp explizit auf msftdata
NTFS wird nicht mehr angeboten und nirgends mehr erwaehnt - exFAT deckt den
Windows-Fall ab, ohne dass etwas nachinstalliert werden muss, das 'fuse' und
damit pve-cluster gefaehrdet. In snapfs.py bleibt ntfs stehen: dort geht es
ums Lesen von Windows-Gast-Snapshots, eine ganz andere Sache.
parted legt nur noch die Partition an, ohne Dateisystem-Hinweis. Dabei ist
aufgefallen, dass genau dieser Hinweis vorher die Typ-Kennung gesetzt hatte:
ohne ihn vergibt parted 0FC63DAF-... ("Linux filesystem"), und Windows haengt
so eine Partition nicht ein. Die Kennung wird jetzt ausdruecklich gesetzt:
parted ... mkpart primary 1MiB 100% set 1 msftdata on
-> EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
Nur darauf vergibt Windows von selbst einen Laufwerksbuchstaben.
Das alte --exchange kennt jetzt ebenfalls exfat statt ntfs.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
46ffc54059
commit
804224d2da
@@ -873,7 +873,7 @@ Karte erst zuschalten, wenn klar ist, dass die Luft rein ist.
|
|||||||
| `--resume` / `--no-resume` | Arbeitsspeicher laden bzw. bewusst kalt starten |
|
| `--resume` / `--no-resume` | Arbeitsspeicher laden bzw. bewusst kalt starten |
|
||||||
| `--exchange <größe>` | Austauschplatte, z. B. `20G` (Container: `ja` genügt) |
|
| `--exchange <größe>` | Austauschplatte, z. B. `20G` (Container: `ja` genügt) |
|
||||||
| `--exchange-storage <name>` | Storage dafür (Vorgabe: wie die erste Platte) |
|
| `--exchange-storage <name>` | Storage dafür (Vorgabe: wie die erste Platte) |
|
||||||
| `--exchange-fs <fs>` | `ext4` (Vorgabe), `ext3`, `xfs`, `vfat`, `ntfs` |
|
| `--exchange-fs <fs>` | `ext4` (Vorgabe), `ext3`, `xfs`, `vfat`, `exfat` |
|
||||||
| `--exchange-dir <pfad>` | nur Container: dieses Host-Verzeichnis durchreichen |
|
| `--exchange-dir <pfad>` | nur Container: dieses Host-Verzeichnis durchreichen |
|
||||||
| `--memory <MB>`, `--cores <n>` | abweichende Ausstattung (nicht mit `--resume`) |
|
| `--memory <MB>`, `--cores <n>` | abweichende Ausstattung (nicht mit `--resume`) |
|
||||||
| `--name <name>` | Name der neuen Maschine |
|
| `--name <name>` | Name der neuen Maschine |
|
||||||
|
|||||||
-17
@@ -145,23 +145,6 @@ if [ "$DEPS" -eq 1 ]; then
|
|||||||
fi
|
fi
|
||||||
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
|
fi
|
||||||
|
|
||||||
# --- Programm ---------------------------------------------------------
|
# --- Programm ---------------------------------------------------------
|
||||||
|
|||||||
+1
-1
@@ -74,7 +74,7 @@ MKFS = {
|
|||||||
"ext3": ["mkfs.ext3", "-q", "-m", "0", "-L", EXCHANGE_LABEL],
|
"ext3": ["mkfs.ext3", "-q", "-m", "0", "-L", EXCHANGE_LABEL],
|
||||||
"xfs": ["mkfs.xfs", "-q", "-L", EXCHANGE_LABEL],
|
"xfs": ["mkfs.xfs", "-q", "-L", EXCHANGE_LABEL],
|
||||||
"vfat": ["mkfs.vfat", "-n", EXCHANGE_LABEL],
|
"vfat": ["mkfs.vfat", "-n", EXCHANGE_LABEL],
|
||||||
"ntfs": ["mkfs.ntfs", "-Q", "-F", "-L", EXCHANGE_LABEL],
|
"exfat": ["mkfs.exfat", "-L", EXCHANGE_LABEL],
|
||||||
}
|
}
|
||||||
|
|
||||||
README = """Austauschlaufwerk von pvesnap-recovery
|
README = """Austauschlaufwerk von pvesnap-recovery
|
||||||
|
|||||||
+15
-25
@@ -49,50 +49,35 @@ CONF_ROOT = "/etc/pve/nodes"
|
|||||||
|
|
||||||
NAME_PATTERN = re.compile(r"^[a-z0-9][a-z0-9_-]{0,30}$")
|
NAME_PATTERN = re.compile(r"^[a-z0-9][a-z0-9_-]{0,30}$")
|
||||||
|
|
||||||
# Was sich womit anlegen laesst. Lesen kann der Kernel mehr, als er anlegen
|
# Was sich womit anlegen laesst. Die Partitionstabelle macht in jedem Fall
|
||||||
# kann - exfat und ntfs3 sind eingebaut, die Formatierer aber Extrapakete.
|
# parted, das Dateisystem der jeweilige Formatierer.
|
||||||
FILESYSTEMS = {
|
FILESYSTEMS = {
|
||||||
"ext4": {
|
"ext4": {
|
||||||
"mkfs": ["mkfs.ext4", "-q", "-m", "0", "-L"],
|
"mkfs": ["mkfs.ext4", "-q", "-m", "0", "-L"],
|
||||||
"parted": "ext4",
|
"fuer": "nur Linux, behaelt Rechte und Besitzer",
|
||||||
"fuer": "Linux-Gaeste",
|
|
||||||
"paket": "e2fsprogs",
|
"paket": "e2fsprogs",
|
||||||
},
|
},
|
||||||
"xfs": {
|
"xfs": {
|
||||||
"mkfs": ["mkfs.xfs", "-q", "-L"],
|
"mkfs": ["mkfs.xfs", "-q", "-L"],
|
||||||
"parted": "xfs",
|
"fuer": "nur Linux",
|
||||||
"fuer": "Linux-Gaeste",
|
|
||||||
"paket": "xfsprogs",
|
"paket": "xfsprogs",
|
||||||
},
|
},
|
||||||
"exfat": {
|
"exfat": {
|
||||||
"mkfs": ["mkfs.exfat", "-L"],
|
"mkfs": ["mkfs.exfat", "-L"],
|
||||||
"parted": "ntfs",
|
"fuer": "Windows und Linux, keine Groessengrenze je Datei",
|
||||||
"fuer": "Windows und Linux - fuer Windows die erste Wahl",
|
|
||||||
"paket": "exfatprogs",
|
"paket": "exfatprogs",
|
||||||
"hinweis": "apt install exfatprogs (281 KB, entfernt nichts)",
|
"hinweis": "apt install exfatprogs (281 KB, entfernt nichts)",
|
||||||
},
|
},
|
||||||
"ntfs": {
|
|
||||||
"mkfs": ["mkfs.ntfs", "-Q", "-F", "-L"],
|
|
||||||
"parted": "ntfs",
|
|
||||||
"fuer": "Windows",
|
|
||||||
"paket": "ntfs-3g",
|
|
||||||
# Bewusst als Warnung: apt will dafuer 'fuse' entfernen, und daran
|
|
||||||
# haengen ceph-fuse und pve-cluster - also /etc/pve.
|
|
||||||
"hinweis": ("apt install ntfs-3g - ACHTUNG: entfernt dabei 'fuse', an dem "
|
|
||||||
"pve-cluster (/etc/pve) und ceph-fuse haengen. Nur mit Bedacht "
|
|
||||||
"und nicht im laufenden Betrieb. Meist ist exfat die bessere Wahl."),
|
|
||||||
},
|
|
||||||
"vfat": {
|
"vfat": {
|
||||||
"mkfs": ["mkfs.vfat", "-n"],
|
"mkfs": ["mkfs.vfat", "-n"],
|
||||||
"parted": "fat32",
|
"fuer": "ueberall lesbar, aber nur Dateien bis 4 GB",
|
||||||
"fuer": "alles, aber nur Dateien bis 4 GB",
|
|
||||||
"paket": "dosfstools",
|
"paket": "dosfstools",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
# Wie lang die Datentraegerbezeichnung sein darf. exFAT und FAT lassen nur
|
# Wie lang die Datentraegerbezeichnung sein darf. exFAT und FAT lassen nur
|
||||||
# 11 Zeichen zu - laenger, und mkfs bricht ab.
|
# 11 Zeichen zu - laenger, und mkfs bricht ab.
|
||||||
LABEL_MAX = {"vfat": 11, "exfat": 11, "xfs": 12, "ext4": 16, "ntfs": 32}
|
LABEL_MAX = {"vfat": 11, "exfat": 11, "xfs": 12, "ext4": 16}
|
||||||
|
|
||||||
# exFAT als Vorgabe: Windows und Linux koennen beide damit umgehen, und anders
|
# exFAT als Vorgabe: Windows und Linux koennen beide damit umgehen, und anders
|
||||||
# als FAT32 gibt es keine 4-GB-Grenze je Datei. Fehlt der Formatierer, faellt
|
# als FAT32 gibt es keine 4-GB-Grenze je Datei. Fehlt der Formatierer, faellt
|
||||||
@@ -171,7 +156,7 @@ def have(command):
|
|||||||
def available_filesystems():
|
def available_filesystems():
|
||||||
"""[(name, verfuegbar, beschreibung)] - was sich hier anlegen laesst."""
|
"""[(name, verfuegbar, beschreibung)] - was sich hier anlegen laesst."""
|
||||||
result = []
|
result = []
|
||||||
for name in ("ext4", "exfat", "ntfs", "xfs", "vfat"):
|
for name in ("exfat", "ext4", "xfs", "vfat"):
|
||||||
spec = FILESYSTEMS[name]
|
spec = FILESYSTEMS[name]
|
||||||
result.append((name, have(spec["mkfs"][0]), spec))
|
result.append((name, have(spec["mkfs"][0]), spec))
|
||||||
return result
|
return result
|
||||||
@@ -439,9 +424,14 @@ def create(name, size=DEFAULT_SIZE, fs=None, note="", partitioned=True,
|
|||||||
note=note, created=int(time.time()), partitioned=partitioned)
|
note=note, created=int(time.time()), partitioned=partitioned)
|
||||||
try:
|
try:
|
||||||
if partitioned:
|
if partitioned:
|
||||||
step("Partitionstabelle anlegen (GPT, eine Partition)")
|
# Die Typ-Kennung "msftdata" (Microsoft basic data) ist der
|
||||||
|
# entscheidende Teil: nur darauf vergibt Windows von selbst einen
|
||||||
|
# Laufwerksbuchstaben. Ohne sie vergibt parted "Linux filesystem",
|
||||||
|
# und Windows zeigt die Partition zwar an, haengt sie aber nicht ein.
|
||||||
|
step("Partitionstabelle anlegen (GPT, eine Partition, msftdata)")
|
||||||
run(["parted", "-s", image, "mklabel", "gpt",
|
run(["parted", "-s", image, "mklabel", "gpt",
|
||||||
"mkpart", "primary", spec["parted"], "1MiB", "100%"])
|
"mkpart", "primary", "1MiB", "100%",
|
||||||
|
"set", "1", "msftdata", "on"])
|
||||||
with _loop(image, partitioned) as device:
|
with _loop(image, partitioned) as device:
|
||||||
step("Formatieren mit %s, Bezeichnung %s" % (fs, label))
|
step("Formatieren mit %s, Bezeichnung %s" % (fs, label))
|
||||||
run(spec["mkfs"] + [label, device], timeout=1800)
|
run(spec["mkfs"] + [label, device], timeout=1800)
|
||||||
|
|||||||
Reference in New Issue
Block a user