Heute mal wieder ein Windows Server Backup Problem der etwas spezielleren Art. Es geht um den Fehler-Code 800423F4, der beim Backup einer CentOS 6.7 VM (abgesichert mit SELinux) auftrat.
1. Szenario
- Windows Server 2012R2 als Hyper-V Host
- CentOS 6.7 mit aktiviertem SELinux und installierten Hyper-V Linux Integrated Services (
yum install hyperv-daemons
) als Virtuelle Maschine - Online Windows Server Backup der CentOS-VM („Live virtual machine backup“) mithilfe des Hyper-V VSS Writers (wird erst ab Windows Server 2012R2 unterstützt, siehe Quellen)
2. Fehlermeldungen und Logs
2.1. 800423F4 Fehlermeldung des Windows Server Backup Dienstes
Die Fehlermeldung des Windows Server Backup Dienstes auf dem Hyper-V Host sieht wie folgt aus:
Fehler des Writers Writer-ID: "{66841CD4-6DED-4F4B-8F17-FD23F8DDC3DE}" Instanz-ID: "{ECE207FA-AAAE-4F0E-9B73-60E152A3227C}" Name des Writers: "Microsoft Hyper-V VSS Writer" Status des Writers: "8" Fehlerergebnis: "800423F4" Anwendungsergebnis: "80004005" Anwendungsmeldung: "(null)" Komponente: "9759C888-FBAB-4FEF-AFD5-DF03F5BB5487" Logischer Pfad: "(null)" Komponentenergebnis: "800423F4" Komponentenmeldung: (null) Dateiangabe: "E:\eset\eset\Virtual Machines\\9759C888-FBAB-4FEF-AFD5-DF03F5BB5487.xml", rekursiv: "0" Dateiangabe: "E:\eset\\ERA_Server-disk1.vhdx", rekursiv: "0" Dateiangabe: "E:\eset\ERA_Server-disk1_7E3DC7F8-937D-411E-B2E8-9CD5AEB50552.avhdx", rekursiv: "0" Dateiangabe: "E:\eset\eset\Snapshots\7E3DC7F8-937D-411E-B2E8-9CD5AEB50552.xml", rekursiv: "0" *-----------------------------* Anwendungssicherung Writer-ID: "{66841CD4-6DED-4F4B-8F17-FD23F8DDC3DE}" Komponente: "9759C888-FBAB-4FEF-AFD5-DF03F5BB5487" Beschreibung : Online\eset Logischer Pfad: "" Fehler : 80780175 Fehlermeldung : Eine Komponente wurde bei der Schattenkopie des Volumes übersprungen. Detaillierter Fehler : 800423F4 Detaillierte Fehlermeldung : Für den Generator wurde ein nicht vorübergehender Fehler festgestellt. Wenn der Sicherungsvorgang wiederholt wird, tritt der Fehler höchstwahrscheinlich erneut auf. *-----------------------------*
(Ja, die Fehler traten bei einer ESET Remote Administration – Appliance auf, die aber auf CentOS 6.7 basiert.)
2.2. relevante CentOS 6.7 Log-Einträge
/var/log/messages:
Aug 23 12:46:24 eset Hyper-V VSS: FREEZE of /proc/sys/fs/binfmt_misc failed; error:13 Permission denied Aug 23 12:46:24 eset Hyper-V VSS: VSS: op=FREEZE: failed Aug 23 12:46:24 eset Hyper-V VSS: op=5 failed! Aug 23 12:46:24 eset Hyper-V VSS: report it with these files: Aug 23 12:46:24 eset Hyper-V VSS: /etc/fstab and /proc/mounts
/var/log/audit/audit.log:
type=AVC msg=audit(1440326784.521:191): avc: denied { read } for pid=1317 comm="hv_vss_daemon" name="/" dev=dm-2 ino=2 scontext=system_u:system_r:hypervvssd_t:s0 tcontext=system_u:object_r:home_root_t:s0 tclass=dir type=SYSCALL msg=audit(1440326784.521:191): arch=c000003e syscall=2 success=no exit=-13 a0=1ff726b a1=0 a2=2 a3=1 items=0 ppid=1 pid=1317 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="hv_vss_daemon" exe="/usr/sbin/hv_vss_daemon" subj=system_u:system_r:hypervvssd_t:s0 key=(null)
Die Logs deuten also darauf hin, dass SELinux dem hypervvssd-Dienst bestimmte Rechte verweigert.
3. Lösungen
Lösung 1 (einfach): Umschalten von SELinux in den „Permissive“ Modus
Diese Lösung ist nicht zu empfehlen, da sie die Sicherheit des Systems schwächt. Wer es dennoch einfach haben möchte, hier die Schritte:
In der Datei /etc/selinux/config einfach den Eintrag
SELINUX=enforcing
in
SELINUX=permissive
abändern. Speichern. CentOS neustarten.
Lösung 2 (sichererer): SELinux Richtlinienanpassung mithilfe von audit2allow
Dazu speichern wir die durch „audit2allow“ erzeugten Berechtigungen erstmal ab und schauen sie uns an:
grep hypervvssd_t /var/log/audit/audit.log | audit2allow -m hypervvssd > hypervvssd.te cat hypervvssd.te module hypervvssd 1.0; require { type home_root_t; type hypervvssd_t; class dir { read write }; } #============= hypervvssd_t ============== #!!!! The source type 'hypervvssd_t' can write to a 'dir' of the following types: # boot_t, root_t, cluster_conf_t, cluster_var_lib_t, cluster_var_run_t allow hypervvssd_t home_root_t:dir { read write };
Wie man sieht, macht „audit2allow“ direkt einen Vorschlag, den wir auch im nächsten Schritt übernehmen:
grep hypervvssd_t /var/log/audit/audit.log | audit2allow -M hypervvssd
Dann müssen wir das Richtlinien-Modul noch installieren/aktivieren (damit wird das Modul auch persistent im System und übersteht auch Neustarts):
semodule -i hypervvssd.pp
Im Anschluss noch überprüfen, ob das Modul geladen ist:
semodule -l ... hypervvssd 1.0 ...
Am besten am Ende nochmal einen Neustart machen und prüfen, ob das Modul auch wirklich persistent ist. Das Windows Server Live Backup der CentOS-VM sollte nun ohne Fehlermeldungen durchlaufen.
Hallo,
stehe vor genau dem gleichen Problem mit CentOS 7.2. Allerdings tauchen bei mir unter /var/log/messages keine von Dir genannten Hinweise bei einem Sicherungsversuch auf. Um genau zu sein, gar keine Meldungen die auf den Hyper-V VSS schließen lassen. Im audit.log tauchen bei einem Sicherungsversuch auch keine Meldungen auf.
„systemctl | grep hyperv“ zeigt die hyper-v Daemons als „running“ an. SELINUX habe ich probehalber komplett abgeschaltet.
Hast Du einen Tipp? Müssen noch Module geladen, entladen werden? Backuplog sieht Deinem sehr ähnlich (https://cloud.clxe.de/index.php/s/azi8nTyCeaJ7Jcr)
Wenn der Fehler auch auftritt, wenn SeLinux abgeschaltet ist, wird es daran auch nicht liegen und dementsprechend werden die im Post gezeigten Fehlermeldungen auch nicht auftauchen. Wird denn zum Backup-Zeitpunkt überhaupt irgendein Fehler in /var/log/messages geloggt?
Nein, im Log taucht leider gar nix auf. Hast Du die Hyper-V Free Variante im Einsatz, oder eine „vollwertige“ Windows Server 2012 Version mit Hyper-V Rolle?
Ich habe das Problem schon lange, und habe bisher keine Lösung dazu gefunden.
Ist Windows Server 2012 R2 Std. inkl. GUI. Hast du denn die R2 am laufen? So weit mir bekannt, kann nur 2012R2 ein „Live Virtual Machine Backup“ durchführen.