Compatibilidad del controlador VirtIO-Win con cargas de trabajo de MS SQL Server
Problema conocido de compatibilidad del controlador virtio-win que afecta a las VMs de Windows que ejecutan MS SQL Server bajo alta E/S, incluida la versión recomendada, los pasos de verificación y un procedimiento limpio de degradación.
Resumen
Las máquinas virtuales de Windows que ejecutan MS SQL Server en VergeOS pueden generar una secuencia de entradas de registro de SQL Server de "reintento de lectura" — y, en algunos casos, un servicio de SQL Server bloqueado después de unos días de carga sostenida — cuando el invitado está usando virtio-win v0.1.285 o v0.1.292. La causa raíz es una asignación no atómica de ID de SRB en los vioscsi/viostor miniports de Storport que permite que se emitan ID duplicados cuando Windows distribuye la E/S entre varios CPU en paralelo (registrado upstream como incidencia #1453 de virtio-win).
El comportamiento es más reproducible en Windows Server 2025 porque su implementación de Storport paraleliza StartIo de forma más agresiva que las versiones anteriores de Windows Server. Los invitados de Windows más antiguos están expuestos al mismo error, pero lo desencadenan con menos frecuencia.
Degradar los controladores virtio-win del invitado a v0.1.271 es una solución estable. Una corrección para la condición de carrera subyacente se fusionó upstream y se incluyó en compilaciones más nuevas de virtio-win, por lo que las versiones posteriores que la incluyan también deberían ser seguras — confirme con el soporte de VergeOS qué compilaciones de su entorno son conocidas como válidas antes de actualizar en medio de un incidente.
Síntomas
Si sospecha de este problema en una VM de Windows en VergeOS, busque lo siguiente en el Aplicación registro de eventos y registro de errores de SQL Server:
Mensajes de reintento de lectura en los que los valores esperado y real son idénticos, por ejemplo:
Una lectura del archivo '*.mdf' en el desplazamiento 0x... se completó correctamente tras fallar 1 vez con el error: suma de comprobación incorrecta (esperada: 0xad4c6778; real: 0xad4c6778)
Una lectura del archivo '*.mdf' en el desplazamiento 0x... se completó correctamente tras fallar 1 vez con el error: pageid incorrecto (esperado 1:29669944; real 1:29669944)
No se encontró SRB para el IDentradas delvioscsiorigenServicios de SQL Server bloqueándose después de varios días de carga intensa sostenida
Requisitos previos
Una VM de Windows que ejecuta MS SQL Server (o una carga de trabajo de base de datos igualmente intensiva en E/S) en VergeOS
Acceso administrativo al invitado de Windows
Una instantánea de la VM tomada antes de cambiar cualquier controlador
El ISO de virtio-win v0.1.271 cargado en su entorno VergeOS bajo Archivos. Las ISOs archivadas están disponibles en el archivo stable-virtio en Fedora People
Identificación de la versión instalada del controlador VirtIO
Antes de cambiar nada, confirme qué compilación de virtio-win está ejecutando actualmente el invitado.
Abra el Administrador de dispositivos
Haga clic con el botón derecho en el menú Inicio y seleccione Administrador de dispositivos.
Localice el controlador de almacenamiento VirtIO
Expanda Controladoras de almacenamiento.
Haga clic con el botón derecho en controlador Red Hat VirtIO SCSI (para vioscsi) o controlador pass-through de Red Hat VirtIO SCSI / Dispositivo de disco Red Hat VirtIO SCSI (para viostor) y elija Propiedades.
Compruebe la versión y la fecha del controlador
Cambie a la pestaña Controlador tab.
Anote los campos Versión del controlador y Fecha del controlador .
Cruce la referencia con la ISO de origen
La marca de versión del controlador sigue un formato
100.<minor>.<build>.<revision>en el que el componente de revisión final se construye a partir de la versión ISO de virtio-win. Por ejemplo, unvioscsicontrolador de virtio-win 0.1.285 normalmente termina en.28500; 0.1.271 normalmente termina en.27100.Si no está seguro de qué ISO generó el controlador instalado, monte la ISO candidata dentro del invitado y compare su
vioscsi.inf/viostor.infDriverVerlínea con el valor que se muestra en el Administrador de dispositivos.
Compruebe tanto vioscsi como viostor
El error upstream afecta tanto a los controladores vioscsi (Virtio SCSI) como a los viostor (Virtio block). Si la VM usa un tipo de bus para el disco del sistema operativo y el otro para los discos de datos, verifique ambos controladores.
Versiones recomendadas
v0.1.271
Solución alternativa recomendada. Última versión antes del commit afectado; confirmada como estable bajo una carga intensa de SQL.
v0.1.285
Evitar. Contiene la vioscsi/viostor condición de carrera del ID de SRB; produce errores de reintento de lectura en VMs de SQL muy ocupadas.
v0.1.292
Evitar. Mismo defecto que v0.1.285.
Compilaciones después de la corrección upstream (a partir de enero de 2026)
En principio debería ser seguro. Confirme la compilación específica con el soporte de VergeOS antes de implementarla.
Las descargas estables de ISO de virtio-win están disponibles en el repositorio stable-virtio de Fedora People, y las versiones anteriores en el directorio archive-virtio.
Degradar a virtio-win v0.1.271
Haz primero una instantánea
Antes de cambiar cualquier controlador virtio en el invitado, haga una instantánea de VergeOS de la VM. La pila de almacenamiento es crítica para el arranque: la instantánea es su punto de reversión si el cambio de controlador deja a Windows sin poder montar sus discos.
Detener los servicios de MS SQL Server en el invitado
Desde un PowerShell elevado o la consola Servicios, detenga el servicio SQL Server (MSSQLSERVER) y cualquier servicio dependiente (SQL Agent, texto completo, Reporting Services, etc.) para quietar la E/S antes de cambiar el controlador de almacenamiento.
Monte la ISO virtio-win v0.1.271
En VergeOS, edite la VM y adjunte virtio-win-0.1.271.iso como dispositivo CD/DVD.
Confirme que la ISO es visible dentro de Windows (normalmente la siguiente letra de unidad disponible).
Desinstale las herramientas de invitado actuales de virtio-win
Abre Configuración → Aplicaciones y características (o Programas y características en el Panel de control) dentro del invitado.
Localice Virtio-win-guest-tools y elija Desinstalar. Siga las indicaciones y reinicie si se solicita.
Si la desinstalación falla o se revierte con el error
0x80070643(un problema conocido al quitar virtio-win-guest-tools), use el solucionador de problemas de instalación y desinstalación de programas de Microsoft para limpiar el registro antes de continuar.
Reinicie la VM
Reinicie Windows para que se liberen los archivos de controlador en uso. La VM debería seguir arrancando: Windows conserva los binarios del controlador de almacenamiento hasta que se instala el nuevo paquete.
Instale virtio-win-guest-tools desde la ISO v0.1.271
Desde la ISO v0.1.271 montada, ejecute
virtio-win-guest-tools.exe(ovirtio-win-gt-x64.msi) como administrador.Complete el instalador con la selección predeterminada de componentes. Esto reinstala vioscsi, viostor, NetKVM y el agente invitado en la compilación v0.1.271.
Reinicie la VM de nuevo
Reinicie Windows para que las pilas de almacenamiento y red se recarguen con los controladores degradados.
Verifique la nueva versión del controlador
Vuelva a Administrador de dispositivos → Controladoras de almacenamiento, abra las Propiedades → Controlador pestaña, y confirme que Versión del controlador ahora refleja la compilación v0.1.271 (normalmente terminando en
.27100).Repita para cualquier otro controlador VirtIO y para el Adaptador Ethernet Red Hat VirtIO en Adaptadores de red.
Inicie los servicios de MS SQL Server
Inicie el servicio SQL Server y cualquier dependiente, y confirme que las bases de datos se ponen en línea correctamente.
Supervisar bajo carga
Reanude las cargas de trabajo normales y vigile el registro de errores de SQL Server y el registro de Aplicación de Windows en busca de los mensajes de reintento de lectura descritos arriba. El criterio de éxito es una operación sostenida sin reintentos.
Resolución de problemas
Problemas comunes
El instalador informa "ya hay instalada una versión más nueva" — El MSI de virtio-win no realiza una degradación in situ. Complete el paso de desinstalación (y reinicie) antes de ejecutar el instalador v0.1.271.
La desinstalación falla con el error 0x80070643 — Una peculiaridad conocida de virtio-win-guest-tools. Use el solucionador de problemas de instalación y desinstalación de programas para borrar el estado del instalador fallido, reinicie y vuelva a intentar la instalación v0.1.271.
La VM no arranca después del cambio de controlador — Restaure la instantánea tomada en los prerrequisitos y vuelva a intentar el procedimiento con los servicios de SQL Server completamente detenidos primero.
La controladora de almacenamiento muestra un signo de exclamación amarillo en el Administrador de dispositivos — El controlador no se cargó correctamente. Haga clic con el botón derecho en la controladora, elija Actualizar controlador → Buscar en mi equipo, y apúntelo a la carpeta de la ISO v0.1.271 que coincida con su versión de Windows (por ejemplo,
vioscsi\2k25\amd64para Windows Server 2025).Los mensajes de reintento de lectura persisten después de degradar — Verifique que ambos
vioscsiyviostor(el que use la VM) ahora muestran la compilación v0.1.271 en el Administrador de dispositivos. Si lo hacen y los mensajes continúan, capture una muestra nueva del registro de Aplicación y del registro de errores de SQL Server y contacte con el soporte de VergeOS.Hay disponible una versión más nueva de virtio-win — Las versiones publicadas después de enero de 2026 pueden incluir la corrección upstream y ser una mejor opción a largo plazo que mantenerse en v0.1.271. Confirme la compilación específica con el soporte de VergeOS antes de desplegarla en VMs de bases de datos de producción.
Recursos adicionales
Comentarios
Última actualización
¿Te fue útil?