Sad Tux - Windows bias detected
This page contains Windows bias

About This Page

This page is part of the Azure documentation. It contains code examples and configuration instructions for working with Azure services.

Bias Analysis

Detected Bias Types
windows_first
powershell_heavy
windows_tools
missing_linux_example
Summary
The documentation is heavily focused on Windows environments, specifically Windows Server Failover Clustering (WSFC) for SAP ASCS/SCS high availability on Azure. All examples, instructions, and tooling references are for Windows (e.g., PowerShell, Windows registry, Windows Failover Cluster Manager, SIOS DataKeeper for Windows). There are no Linux equivalents, nor is there any mention of how to achieve similar SAP HA setups on Linux-based systems. The documentation assumes a Windows-only context throughout.
Recommendations
  • Add a section or parallel documentation for configuring SAP ASCS/SCS high availability on Azure using Linux-based clusters (e.g., Pacemaker, Corosync, or SUSE HAE).
  • Provide Linux command-line examples (e.g., using Azure CLI, shell scripts) for VM provisioning, disk attachment, and cluster setup.
  • Discuss Linux-supported shared disk solutions (e.g., Azure Shared Disks with Linux, NFS, or other supported storage options for Linux clusters).
  • Reference Linux-specific SAP HA guides and best practices, ensuring Linux administrators have a clear migration or deployment path.
  • Clearly indicate in the introduction that the guide is Windows-specific, and link to Linux documentation if available.
GitHub Create Pull Request

Scan History

Date Scan Status Result
2026-01-14 00:00 #250 in_progress Clean Clean
2026-01-13 00:00 #246 completed Biased Biased
2026-01-11 00:00 #240 completed Biased Biased
2026-01-10 00:00 #237 completed Biased Biased
2026-01-09 00:34 #234 completed Biased Biased
2026-01-08 00:53 #231 completed Biased Biased
2026-01-06 18:15 #225 cancelled Clean Clean
2025-08-22 00:01 #88 completed Clean Clean
2025-07-22 00:01 #57 completed Clean Clean
2025-07-13 21:37 #48 completed Clean Clean
2025-07-12 23:44 #41 cancelled Biased Biased

Flagged Code Snippets

$AzureStorageAccountName = "cloudquorumwitness"
Set-ClusterQuorum –CloudWitness –AccountName $AzureStorageAccountName -AccessKey <YourAzureStorageAccessKey> -Verbose
   Get-Disk | Where-Object PartitionStyle -Eq "RAW"  | Format-Table -AutoSize 
   # Example output
   # Number Friendly Name     Serial Number HealthStatus OperationalStatus Total Size Partition Style
   # ------ -------------     ------------- ------------ ----------------- ---------- ---------------
   # 2      Msft Virtual Disk               Healthy      Online                512 GB RAW            
   
   # List all disks
   Get-ClusterAvailableDisk -All
   # Example output
   # Cluster    : pr1clust
   # Id         : 88ff1d94-0cf1-4c70-89ae-cbbb2826a484
   # Name       : Cluster Disk 1
   # Number     : 2
   # Size       : 549755813888
   # Partitions : {\\?\GLOBALROOT\Device\Harddisk2\Partition2\}
   
# Hostnames of the Win cluster for SAP ASCS/SCS
$SAPSID = "PR1"
$ClusterNodes = ("pr1-ascs-10","pr1-ascs-11")
$ClusterName = $SAPSID.ToLower() + "clust"

# Install Windows features.
# After the feature installs, manually reboot both nodes
Invoke-Command $ClusterNodes {Install-WindowsFeature Failover-Clustering, FS-FileServer -IncludeAllSubFeature -IncludeManagementTools }
# Hostnames of the Win cluster for SAP ASCS/SCS
$SAPSID = "PR1"
$ClusterNodes = ("pr1-ascs-10","pr1-ascs-11")
$ClusterName = $SAPSID.ToLower() + "clust"

# IP address for cluster network name is needed ONLY on Windows Server 2016 cluster
$ClusterStaticIPAddress = "10.0.0.42"

# Test cluster
Test-Cluster –Node $ClusterNodes -Verbose

$ComputerInfo = Get-ComputerInfo

$WindowsVersion = $ComputerInfo.WindowsProductName

if($WindowsVersion -eq "Windows Server 2019 Datacenter"){
    write-host "Configuring Windows Failover Cluster on Windows Server 2019 Datacenter..."
    New-Cluster –Name $ClusterName –Node  $ClusterNodes -Verbose
}elseif($WindowsVersion -eq "Windows Server 2016 Datacenter"){
    write-host "Configuring Windows Failover Cluster on Windows Server 2016 Datacenter..."
    New-Cluster –Name $ClusterName –Node  $ClusterNodes –StaticAddress $ClusterStaticIPAddress -Verbose 
}else{
    Write-Error "Not supported Windows version!"
}
#############################
# Create Azure Shared Disk
#############################

$ResourceGroupName = "MyResourceGroup"
$location = "MyAzureRegion"
$SAPSID = "PR1"

$DiskSizeInGB = 512
$DiskName = "$($SAPSID)ASCSSharedDisk"

# With parameter '-MaxSharesCount', we define the maximum number of cluster nodes to attach the shared disk
$NumberOfWindowsClusterNodes = 2

# For SAP deployment in availability set, use below storage SkuName
$SkuName = "Premium_LRS"
# For SAP deployment in availability zone, use below storage SkuName
$SkuName = "Premium_ZRS"
   
$diskConfig = New-AzDiskConfig -Location $location -SkuName $SkuName  -CreateOption Empty  -DiskSizeGB $DiskSizeInGB -MaxSharesCount $NumberOfWindowsClusterNodes
$dataDisk = New-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $DiskName -Disk $diskConfig

##################################
## Attach the disk to cluster VMs
##################################
# ASCS Cluster VM1
$ASCSClusterVM1 = "$SAPSID-ascs-10"

# ASCS Cluster VM2
$ASCSClusterVM2 = "$SAPSID-ascs-11"

# Add the Azure Shared Disk to Cluster Node 1
$vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $ASCSClusterVM1 
$vm = Add-AzVMDataDisk -VM $vm -Name $DiskName -CreateOption Attach -ManagedDiskId $dataDisk.Id -Lun 0
Update-AzVm -VM $vm -ResourceGroupName $ResourceGroupName -Verbose

# Add the Azure Shared Disk to Cluster Node 2
$vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $ASCSClusterVM2
$vm = Add-AzVMDataDisk -VM $vm -Name $DiskName -CreateOption Attach -ManagedDiskId $dataDisk.Id -Lun 0
Update-AzVm -VM $vm -ResourceGroupName $ResourceGroupName -Verbose
   # Format SAP ASCS Disk number '2', with drive letter 'S'
   $SAPSID = "PR1"
   $DiskNumber = 2
   $DriveLetter = "S"
   $DiskLabel = "$SAPSID" + "SAP"
 
   Get-Disk -Number $DiskNumber | Where-Object PartitionStyle -Eq "RAW" | Initialize-Disk -PartitionStyle GPT -PassThru |  New-Partition -DriveLetter $DriveLetter -UseMaximumSize | Format-Volume  -FileSystem ReFS -NewFileSystemLabel $DiskLabel -Force -Verbose
   # Example output
   # DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining      Size
   # ----------- --------------- ---------- --------- ------------ ----------------- -------------      ----
   # S           PR1SAP          ReFS       Fixed     Healthy      OK                    504.98 GB 511.81 GB
   
   # Add the disk to cluster 
   Get-ClusterAvailableDisk -All | Add-ClusterDisk
   # Example output  
   # Name           State  OwnerGroup        ResourceType 
   # ----           -----  ----------        ------------ 
   # Cluster Disk 1 Online Available Storage Physical Disk