@@ -26,7 +26,6 @@ import (
26
26
"strings"
27
27
28
28
"k8s.io/klog/v2"
29
- utilexec "k8s.io/utils/exec"
30
29
"k8s.io/utils/keymutex"
31
30
)
32
31
@@ -222,17 +221,17 @@ func (mounter *SafeFormatAndMount) formatAndMountSensitive(source string, target
222
221
223
222
// format disk if it is unformatted(raw)
224
223
cmd := fmt .Sprintf ("Get-Disk -Number %s | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru" +
225
- " | New-Partition -AssignDriveLetter - UseMaximumSize | Format-Volume -FileSystem %s -Confirm:$false" , source , fstype )
224
+ " | New-Partition -UseMaximumSize | Format-Volume -FileSystem %s -Confirm:$false" , source , fstype )
226
225
if output , err := mounter .Exec .Command ("powershell" , "/c" , cmd ).CombinedOutput (); err != nil {
227
226
return fmt .Errorf ("diskMount: format disk failed, error: %v, output: %q" , err , string (output ))
228
227
}
229
228
klog .V (4 ).Infof ("diskMount: Disk successfully formatted, disk: %q, fstype: %q" , source , fstype )
230
229
231
- driveLetter , err := getDriveLetterByDiskNumber (source , mounter . Exec )
230
+ volumeIds , err := listVolumesOnDisk (source )
232
231
if err != nil {
233
232
return err
234
233
}
235
- driverPath := driveLetter + ":"
234
+ driverPath := volumeIds [ 0 ]
236
235
target = NormalizeWindowsPath (target )
237
236
output , err := mounter .Exec .Command ("cmd" , "/c" , "mklink" , "/D" , target , driverPath ).CombinedOutput ()
238
237
if err != nil {
@@ -243,17 +242,17 @@ func (mounter *SafeFormatAndMount) formatAndMountSensitive(source string, target
243
242
return nil
244
243
}
245
244
246
- // Get drive letter according to windows disk number
247
- func getDriveLetterByDiskNumber ( diskNum string , exec utilexec. Interface ) (string , error ) {
248
- cmd := fmt .Sprintf ("(Get-Partition -DiskNumber %s).DriveLetter " , diskNum )
245
+ // ListVolumesOnDisk - returns back list of volumes(volumeIDs) in the disk (requested in diskID).
246
+ func listVolumesOnDisk ( diskID string ) (volumeIDs [] string , err error ) {
247
+ cmd := fmt .Sprintf ("(Get-Disk -DeviceId %s | Get-Partition | Get-Volume).UniqueId " , diskID )
249
248
output , err := exec .Command ("powershell" , "/c" , cmd ).CombinedOutput ()
249
+ klog .V (4 ).Infof ("listVolumesOnDisk id from %s: %s" , diskID , string (output ))
250
250
if err != nil {
251
- return "" , fmt .Errorf ("azureMount: Get Drive Letter failed : %v , output: %q " , err , string (output ))
251
+ return [] string {} , fmt .Errorf ("error list volumes on disk. cmd : %s , output: %s, error: %v " , cmd , string (output ), err )
252
252
}
253
- if len (string (output )) < 1 {
254
- return "" , fmt .Errorf ("azureMount: Get Drive Letter failed, output is empty" )
255
- }
256
- return string (output )[:1 ], nil
253
+
254
+ volumeIds := strings .Split (strings .TrimSpace (string (output )), "\r \n " )
255
+ return volumeIds , nil
257
256
}
258
257
259
258
// getAllParentLinks walks all symbolic links and return all the parent targets recursively
0 commit comments